convert DayActivity to kotlin

This commit is contained in:
tibbi 2016-09-16 23:15:26 +02:00
parent dddab1c6ac
commit 8fd75ae628
3 changed files with 281 additions and 311 deletions

View File

@ -1,310 +0,0 @@
package com.simplemobiletools.calendar.activities;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import com.simplemobiletools.calendar.Constants;
import com.simplemobiletools.calendar.DBHelper;
import com.simplemobiletools.calendar.Formatter;
import com.simplemobiletools.calendar.R;
import com.simplemobiletools.calendar.Utils;
import com.simplemobiletools.calendar.models.Event;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindDimen;
import butterknife.ButterKnife;
public class DayActivity extends SimpleActivity
implements DBHelper.DBOperationsListener, AdapterView.OnItemClickListener, AbsListView.MultiChoiceModeListener {
/*@BindView(R.id.month_value) TextView mDateTV;
@BindView(R.id.day_events) ListView mEventsList;
@BindView(R.id.day_coordinator) CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.top_left_arrow) ImageView mLeftArrow;
@BindView(R.id.top_right_arrow) ImageView mRightArrow;*/
@BindDimen(R.dimen.activity_margin) int mActivityMargin;
private static final int EDIT_EVENT = 1;
public static final String DELETED_ID = "deleted_id";
private static String mDayCode;
private static List<Event> mEvents;
private static int mSelectedItemsCnt;
private static Snackbar mSnackbar;
private static List<Integer> mToBeDeleted;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_day);
ButterKnife.bind(this);
final Intent intent = getIntent();
if (intent == null)
return;
mDayCode = intent.getStringExtra(Constants.DAY_CODE);
if (mDayCode == null || mDayCode.isEmpty())
return;
final String date = Formatter.getEventDate(getApplicationContext(), mDayCode);
//mDateTV.setText(date);
mToBeDeleted = new ArrayList<>();
final int baseColor = mConfig.getIsDarkTheme() ? Color.WHITE : Color.BLACK;
final int textColor = Utils.adjustAlpha(baseColor, Constants.HIGH_ALPHA);
/*mLeftArrow.getDrawable().mutate().setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP);
mRightArrow.getDrawable().mutate().setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLeftArrow.getLayoutParams();
params.setMargins(mActivityMargin, params.topMargin, params.rightMargin, params.bottomMargin);
params = (RelativeLayout.LayoutParams) mRightArrow.getLayoutParams();
params.setMargins(params.leftMargin, params.topMargin, mActivityMargin, params.bottomMargin);*/
}
@Override
protected void onResume() {
super.onResume();
checkEvents();
}
@Override
protected void onPause() {
super.onPause();
checkDeleteEvents();
}
/*@OnClick(R.id.day_fab)
public void fabClicked(View view) {
final Intent intent = new Intent(getApplicationContext(), EventActivity.class);
intent.putExtra(Constants.DAY_CODE, mDayCode);
startActivity(intent);
}
@OnClick(R.id.top_left_arrow)
public void leftArrowClicked() {
final DateTime dateTime = Formatter.getDateTimeFromCode(mDayCode);
final String yesterdayCode = Formatter.getDayCodeFromDateTime(dateTime.minusDays(1));
switchToDay(yesterdayCode);
}
@OnClick(R.id.top_right_arrow)
public void rightArrowClicked() {
final DateTime dateTime = Formatter.getDateTimeFromCode(mDayCode);
final String tomorrowCode = Formatter.getDayCodeFromDateTime(dateTime.plusDays(1));
switchToDay(tomorrowCode);
}
@OnClick(R.id.month_value)
public void pickDay() {
final int theme = mConfig.getIsDarkTheme() ? R.style.MyAlertDialog_Dark : R.style.MyAlertDialog;
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, theme);
final View view = getLayoutInflater().inflate(R.layout.date_picker, null);
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.date_picker);
final DateTime dateTime = Formatter.getDateTimeFromCode(mDayCode);
datePicker.init(dateTime.getYear(), dateTime.getMonthOfYear() - 1, dateTime.getDayOfMonth(), null);
alertDialog.setView(view);
alertDialog.setNegativeButton(R.string.cancel, null);
alertDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
final int month = datePicker.getMonth() + 1;
final int year = datePicker.getYear();
final int day = datePicker.getDayOfMonth();
final DateTime newDateTime = dateTime.withDayOfMonth(day).withMonthOfYear(month).withYear(year);
String newDayCode = Formatter.getDayCodeFromDateTime(newDateTime);
switchToDay(newDayCode);
}
});
alertDialog.show();
}*/
private void switchToDay(String dayCode) {
final Intent intent = new Intent(getApplicationContext(), DayActivity.class);
intent.putExtra(Constants.DAY_CODE, dayCode);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(0, 0);
}
private void editEvent(Event event) {
final Intent intent = new Intent(getApplicationContext(), EventActivity.class);
intent.putExtra(Constants.EVENT, event);
startActivityForResult(intent, EDIT_EVENT);
}
private void checkEvents() {
final int startTS = Formatter.getDayStartTS(mDayCode);
final int endTS = Formatter.getDayEndTS(mDayCode);
DBHelper.newInstance(getApplicationContext(), this).getEvents(startTS, endTS);
}
private void updateEvents(List<Event> events) {
mEvents = new ArrayList<>(events);
/*final List<Event> eventsToShow = getEventsToShow(events);
final EventsAdapter adapter = new EventsAdapter(this, eventsToShow);
mEventsList.setAdapter(adapter);
mEventsList.setOnItemClickListener(this);
mEventsList.setMultiChoiceModeListener(this);*/
}
private List<Event> getEventsToShow(List<Event> events) {
final int cnt = events.size();
for (int i = cnt - 1; i >= 0; i--) {
if (mToBeDeleted.contains(events.get(i).getId())) {
events.remove(i);
}
}
return events;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == EDIT_EVENT && resultCode == RESULT_OK && data != null) {
final int deletedId = data.getIntExtra(DELETED_ID, -1);
if (deletedId != -1) {
mToBeDeleted.clear();
mToBeDeleted.add(deletedId);
notifyEventDeletion(1);
}
}
}
@Override
public void eventInserted(Event event) {
}
@Override
public void eventUpdated(Event event) {
}
@Override
public void eventsDeleted(int cnt) {
checkEvents();
}
private void checkDeleteEvents() {
if (mSnackbar != null && mSnackbar.isShown()) {
deleteEvents();
} else {
undoDeletion();
}
}
private void deleteEvents() {
mSnackbar.dismiss();
final int cnt = mToBeDeleted.size();
final String[] eventIDs = new String[cnt];
for (int i = 0; i < cnt; i++) {
eventIDs[i] = String.valueOf(mToBeDeleted.get(i));
}
DBHelper.newInstance(getApplicationContext(), this).deleteEvents(eventIDs);
}
private View.OnClickListener undoDeletion = new View.OnClickListener() {
@Override
public void onClick(View v) {
undoDeletion();
}
};
private void undoDeletion() {
if (mSnackbar != null) {
mToBeDeleted.clear();
mSnackbar.dismiss();
updateEvents(mEvents);
}
}
@Override
public void gotEvents(List<Event> events) {
updateEvents(events);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
editEvent(getEventsToShow(mEvents).get(position));
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if (checked) {
mSelectedItemsCnt++;
} else {
mSelectedItemsCnt--;
}
mode.setTitle(String.valueOf(mSelectedItemsCnt));
mode.invalidate();
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
checkDeleteEvents();
final MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_day_cab, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
prepareDeleteEvents();
mode.finish();
return true;
default:
return false;
}
}
private void prepareDeleteEvents() {
/*final SparseBooleanArray checked = mEventsList.getCheckedItemPositions();
for (int i = 0; i < mEvents.size(); i++) {
if (checked.get(i)) {
final Event event = mEvents.get(i);
mToBeDeleted.add(event.getId());
}
}
notifyEventDeletion(mToBeDeleted.size());*/
}
private void notifyEventDeletion(int cnt) {
/*final Resources res = getResources();
final String msg = res.getQuantityString(R.plurals.events_deleted, cnt, cnt);
mSnackbar = Snackbar.make(mCoordinatorLayout, msg, Snackbar.LENGTH_INDEFINITE);
mSnackbar.setAction(res.getString(R.string.undo), undoDeletion);
mSnackbar.setActionTextColor(Color.WHITE);
mSnackbar.show();
updateEvents(mEvents);*/
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mSelectedItemsCnt = 0;
}
}

View File

@ -204,7 +204,7 @@ public class EventActivity extends SimpleActivity implements DBHelper.DBOperatio
private void deleteEvent() {
final Intent intent = new Intent();
intent.putExtra(DayActivity.DELETED_ID, mEvent.getId());
intent.putExtra(DayActivity.Companion.getDELETED_ID(), mEvent.getId());
setResult(RESULT_OK, intent);
finish();
}

View File

@ -0,0 +1,280 @@
package com.simplemobiletools.calendar.activities
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.AbsListView
import android.widget.AdapterView
import com.simplemobiletools.calendar.Constants
import com.simplemobiletools.calendar.DBHelper
import com.simplemobiletools.calendar.Formatter
import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.models.Event
import java.util.*
class DayActivity : SimpleActivity(), DBHelper.DBOperationsListener, AdapterView.OnItemClickListener, AbsListView.MultiChoiceModeListener {
/*@BindView(R.id.month_value) internal var mDateTV: TextView? = null
@BindView(R.id.day_events) internal var mEventsList: ListView? = null
@BindView(R.id.day_coordinator) internal var mCoordinatorLayout: CoordinatorLayout? = null
@BindView(R.id.top_left_arrow) internal var mLeftArrow: ImageView? = null
@BindView(R.id.top_right_arrow) internal var mRightArrow: ImageView? = null
@BindDimen(R.dimen.activity_margin) internal var mActivityMargin: Int = 0*/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_day)
//ButterKnife.bind(this)
val intent = intent ?: return
mDayCode = intent.getStringExtra(Constants.DAY_CODE)
if (mDayCode == null || mDayCode!!.isEmpty())
return
val date = Formatter.getEventDate(applicationContext, mDayCode)
/*mDateTV!!.text = date
mToBeDeleted = ArrayList<Int>()
val baseColor = if (mConfig.isDarkTheme) Color.WHITE else Color.BLACK
val textColor = Utils.adjustAlpha(baseColor, Constants.HIGH_ALPHA)
mLeftArrow!!.drawable.mutate().setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP)
mRightArrow!!.drawable.mutate().setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP)
var params = mLeftArrow!!.layoutParams as RelativeLayout.LayoutParams
params.setMargins(mActivityMargin, params.topMargin, params.rightMargin, params.bottomMargin)
params = mRightArrow!!.layoutParams as RelativeLayout.LayoutParams
params.setMargins(params.leftMargin, params.topMargin, mActivityMargin, params.bottomMargin)*/
}
override fun onResume() {
super.onResume()
checkEvents()
}
override fun onPause() {
super.onPause()
checkDeleteEvents()
}
/*@OnClick(R.id.day_fab)
fun fabClicked(view: View) {
val intent = Intent(applicationContext, EventActivity::class.java)
intent.putExtra(Constants.DAY_CODE, mDayCode)
startActivity(intent)
}
@OnClick(R.id.top_left_arrow)
fun leftArrowClicked() {
val dateTime = Formatter.getDateTimeFromCode(mDayCode)
val yesterdayCode = Formatter.getDayCodeFromDateTime(dateTime.minusDays(1))
switchToDay(yesterdayCode)
}
@OnClick(R.id.top_right_arrow)
fun rightArrowClicked() {
val dateTime = Formatter.getDateTimeFromCode(mDayCode)
val tomorrowCode = Formatter.getDayCodeFromDateTime(dateTime.plusDays(1))
switchToDay(tomorrowCode)
}
@OnClick(R.id.month_value)
fun pickDay() {
val theme = if (mConfig.isDarkTheme) R.style.MyAlertDialog_Dark else R.style.MyAlertDialog
val alertDialog = AlertDialog.Builder(this, theme)
val view = layoutInflater.inflate(R.layout.date_picker, null)
val datePicker = view.findViewById(R.id.date_picker) as DatePicker
val dateTime = Formatter.getDateTimeFromCode(mDayCode)
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null)
alertDialog.setView(view)
alertDialog.setNegativeButton(R.string.cancel, null)
alertDialog.setPositiveButton(R.string.ok) { dialog, id ->
val month = datePicker.month + 1
val year = datePicker.year
val day = datePicker.dayOfMonth
val newDateTime = dateTime.withDayOfMonth(day).withMonthOfYear(month).withYear(year)
val newDayCode = Formatter.getDayCodeFromDateTime(newDateTime)
switchToDay(newDayCode)
}
alertDialog.show()
}*/
private fun switchToDay(dayCode: String) {
val intent = Intent(applicationContext, DayActivity::class.java)
intent.putExtra(Constants.DAY_CODE, dayCode)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
overridePendingTransition(0, 0)
}
private fun editEvent(event: Event) {
val intent = Intent(applicationContext, EventActivity::class.java)
intent.putExtra(Constants.EVENT, event)
startActivityForResult(intent, EDIT_EVENT)
}
private fun checkEvents() {
val startTS = Formatter.getDayStartTS(mDayCode)
val endTS = Formatter.getDayEndTS(mDayCode)
DBHelper.newInstance(applicationContext, this).getEvents(startTS, endTS)
}
private fun updateEvents(events: MutableList<Event>) {
mEvents = ArrayList(events)
/*val eventsToShow = getEventsToShow(events)
val adapter = EventsAdapter(this, eventsToShow)
mEventsList!!.adapter = adapter
mEventsList!!.onItemClickListener = this
mEventsList!!.setMultiChoiceModeListener(this)*/
}
private fun getEventsToShow(events: MutableList<Event>): List<Event> {
val cnt = events.size
for (i in cnt - 1 downTo 0) {
if (mToBeDeleted!!.contains(events[i].id)) {
events.removeAt(i)
}
}
return events
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == EDIT_EVENT && resultCode == Activity.RESULT_OK && data != null) {
val deletedId = data.getIntExtra(DELETED_ID, -1)
if (deletedId != -1) {
mToBeDeleted!!.clear()
mToBeDeleted!!.add(deletedId)
notifyEventDeletion(1)
}
}
}
override fun eventInserted(event: Event) {
}
override fun eventUpdated(event: Event) {
}
override fun eventsDeleted(cnt: Int) {
checkEvents()
}
private fun checkDeleteEvents() {
if (mSnackbar != null && mSnackbar!!.isShown) {
deleteEvents()
} else {
undoDeletion()
}
}
private fun deleteEvents() {
mSnackbar!!.dismiss()
val cnt = mToBeDeleted!!.size
val eventIDs = arrayOfNulls<String>(cnt)
for (i in 0..cnt - 1) {
eventIDs[i] = mToBeDeleted!![i].toString()
}
DBHelper.newInstance(applicationContext, this).deleteEvents(eventIDs)
}
private val undoDeletion = View.OnClickListener { undoDeletion() }
private fun undoDeletion() {
if (mSnackbar != null) {
mToBeDeleted!!.clear()
mSnackbar!!.dismiss()
//updateEvents(mEvents)
}
}
override fun gotEvents(events: MutableList<Event>) {
updateEvents(events)
}
override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {
//editEvent(getEventsToShow(mEvents)[position])
}
override fun onItemCheckedStateChanged(mode: ActionMode, position: Int, id: Long, checked: Boolean) {
if (checked) {
mSelectedItemsCnt++
} else {
mSelectedItemsCnt--
}
mode.title = mSelectedItemsCnt.toString()
mode.invalidate()
}
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
checkDeleteEvents()
val inflater = mode.menuInflater
inflater.inflate(R.menu.menu_day_cab, menu)
return true
}
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return true
}
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
when (item.itemId) {
R.id.delete -> {
prepareDeleteEvents()
mode.finish()
return true
}
else -> return false
}
}
private fun prepareDeleteEvents() {
/*val checked = mEventsList!!.checkedItemPositions
for (i in mEvents!!.indices) {
if (checked.get(i)) {
val event = mEvents!![i]
mToBeDeleted!!.add(event.id)
}
}
notifyEventDeletion(mToBeDeleted!!.size)*/
}
private fun notifyEventDeletion(cnt: Int) {
/*val res = resources
val msg = res.getQuantityString(R.plurals.events_deleted, cnt, cnt)
mSnackbar = Snackbar.make(mCoordinatorLayout!!, msg, Snackbar.LENGTH_INDEFINITE)
mSnackbar!!.setAction(res.getString(R.string.undo), undoDeletion)
mSnackbar!!.setActionTextColor(Color.WHITE)
mSnackbar!!.show()
updateEvents(mEvents)*/
}
override fun onDestroyActionMode(mode: ActionMode) {
mSelectedItemsCnt = 0
}
companion object {
private val EDIT_EVENT = 1
val DELETED_ID = "deleted_id"
private var mDayCode: String? = null
private var mEvents: MutableList<Event>? = null
private var mSelectedItemsCnt: Int = 0
private var mSnackbar: Snackbar? = null
private var mToBeDeleted: MutableList<Int>? = null
}
}