From e15415662837ecd3d72f32caa493d7e8b4d88a8f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Sep 2016 20:55:07 +0200 Subject: [PATCH] run getEvents on a background thread --- .../calendar/CalendarImpl.java | 2 +- .../calendar/activities/EventActivity.java | 2 +- .../activities/WidgetConfigureActivity.java | 13 +++++-- .../receivers/BootCompletedReceiver.java | 2 +- .../receivers/NotificationReceiver.java | 2 +- .../simplemobiletools/calendar/DBHelper.kt | 37 +++++++++---------- .../calendar/fragments/DayFragment.kt | 8 ++-- .../calendar/fragments/MonthFragment.kt | 6 ++- 8 files changed, 40 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/simplemobiletools/calendar/CalendarImpl.java b/app/src/main/java/com/simplemobiletools/calendar/CalendarImpl.java index 5608f86ad..3fe2d4295 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/CalendarImpl.java +++ b/app/src/main/java/com/simplemobiletools/calendar/CalendarImpl.java @@ -30,7 +30,7 @@ public class CalendarImpl implements DBHelper.DBOperationsListener { mTargetDate = targetDate; final int startTS = Formatter.getDayStartTS(Formatter.getDayCodeFromDateTime(mTargetDate.minusMonths(1))); final int endTS = Formatter.getDayEndTS(Formatter.getDayCodeFromDateTime(mTargetDate.plusMonths(1))); - DBHelper.Companion.newInstance(mContext, this).getEvents(startTS, endTS); + new DBHelper(mContext, this).getEvents(startTS, endTS); } public void getPrevMonth() { diff --git a/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java b/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java index 70e266ab8..557296ddd 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java +++ b/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java @@ -226,7 +226,7 @@ public class EventActivity extends SimpleActivity implements DBHelper.DBOperatio return; } - final DBHelper dbHelper = DBHelper.Companion.newInstance(getApplicationContext(), this); + final DBHelper dbHelper = new DBHelper(getApplicationContext(), this); final String description = mDescriptionET.getText().toString().trim(); mEvent.setStartTS(startTS); mEvent.setEndTS(mEndCheckbox.isChecked() ? endTS : startTS); diff --git a/app/src/main/java/com/simplemobiletools/calendar/activities/WidgetConfigureActivity.java b/app/src/main/java/com/simplemobiletools/calendar/activities/WidgetConfigureActivity.java index ac3bee765..a998d9efe 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/activities/WidgetConfigureActivity.java +++ b/app/src/main/java/com/simplemobiletools/calendar/activities/WidgetConfigureActivity.java @@ -226,10 +226,15 @@ public class WidgetConfigureActivity extends AppCompatActivity implements Calend }; @Override - public void updateCalendar(String month, List days) { - this.mDays = days; - updateMonth(month); - updateDays(); + public void updateCalendar(final String month, final List days) { + runOnUiThread(new Runnable() { + @Override + public void run() { + mDays = days; + updateMonth(month); + updateDays(); + } + }); } private void updateMonth(String month) { diff --git a/app/src/main/java/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.java b/app/src/main/java/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.java index 32ad3a67a..4801a29f2 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.java +++ b/app/src/main/java/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.java @@ -14,7 +14,7 @@ public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { - final List events = DBHelper.Companion.newInstance(context, null).getEventsAtReboot(); + final List events = new DBHelper(context, null).getEventsAtReboot(); for (Event event : events) { Utils.scheduleNextEvent(context, event); } diff --git a/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java b/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java index 54908ec4c..45c858434 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java +++ b/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java @@ -26,7 +26,7 @@ public class NotificationReceiver extends BroadcastReceiver { if (id == -1) return; - final Event event = DBHelper.Companion.newInstance(context, null).getEvent(id); + final Event event = new DBHelper(context, null).getEvent(id); if (event == null || event.getReminderMinutes() == -1) return; diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/DBHelper.kt index aa116cd4f..a95f0117e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/DBHelper.kt @@ -13,7 +13,7 @@ import com.simplemobiletools.calendar.models.Event import org.joda.time.DateTime import java.util.* -class DBHelper(context: Context) : SQLiteOpenHelper(context, DBHelper.DB_NAME, null, DBHelper.DB_VERSION) { +class DBHelper(context: Context, callback: DBOperationsListener?) : SQLiteOpenHelper(context, DBHelper.DB_NAME, null, DBHelper.DB_VERSION) { private val MAIN_TABLE_NAME = "events" private val COL_ID = "id" private val COL_START_TS = "start_ts" @@ -29,21 +29,18 @@ class DBHelper(context: Context) : SQLiteOpenHelper(context, DBHelper.DB_NAME, n private val COL_REPEAT_MONTH = "repeat_month" private val COL_REPEAT_DAY = "repeat_day" + private var mCallback: DBOperationsListener? = null + companion object { private val DB_NAME = "events.db" private val DB_VERSION = 3 - - private var mCallback: DBOperationsListener? = null lateinit private var mDb: SQLiteDatabase - - fun newInstance(context: Context, callback: DBOperationsListener): DBHelper { - mCallback = callback - return DBHelper(context) - } } init { mDb = writableDatabase + mCallback = callback + } override fun onCreate(db: SQLiteDatabase) { @@ -149,19 +146,21 @@ class DBHelper(context: Context) : SQLiteOpenHelper(context, DBHelper.DB_NAME, n } fun getEvents(fromTS: Int, toTS: Int) { - val events = ArrayList() - var ts = fromTS - while (ts <= toTS) { - events.addAll(getEventsFor(ts)) - ts += Constants.DAY - } + Thread({ + val events = ArrayList() + var ts = fromTS + while (ts <= toTS) { + events.addAll(getEventsFor(ts)) + ts += Constants.DAY + } - val selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL" - val selectionArgs = arrayOf(toTS.toString(), fromTS.toString()) - val cursor = getEventsCursor(selection, selectionArgs) - events.addAll(fillEvents(cursor)) + val selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL" + val selectionArgs = arrayOf(toTS.toString(), fromTS.toString()) + val cursor = getEventsCursor(selection, selectionArgs) + events.addAll(fillEvents(cursor)) - mCallback?.gotEvents(events) + mCallback?.gotEvents(events) + }).start() } private fun getEventsFor(ts: Int): List { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt index 3d7f92c7b..efc7fce50 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt @@ -118,7 +118,7 @@ class DayFragment : Fragment(), DBHelper.DBOperationsListener, AdapterView.OnIte private fun checkEvents() { val startTS = Formatter.getDayStartTS(mDayCode) val endTS = Formatter.getDayEndTS(mDayCode) - DBHelper.newInstance(activity.applicationContext, this).getEvents(startTS, endTS) + DBHelper(context, this).getEvents(startTS, endTS) } private fun updateEvents(events: MutableList) { @@ -172,7 +172,7 @@ class DayFragment : Fragment(), DBHelper.DBOperationsListener, AdapterView.OnIte fun deleteEvents() { val eventIDs = Array(mToBeDeleted.size, { i -> (mToBeDeleted[i].toString()) }) - DBHelper.newInstance(activity.applicationContext, this).deleteEvents(eventIDs) + DBHelper(activity.applicationContext, this).deleteEvents(eventIDs) } fun undoDeletion() { @@ -231,7 +231,9 @@ class DayFragment : Fragment(), DBHelper.DBOperationsListener, AdapterView.OnIte } override fun gotEvents(events: MutableList) { - updateEvents(events) + activity?.runOnUiThread { + updateEvents(events) + } } interface DeleteListener : NavigationListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index dcc9e8a90..cfa1ce20f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -70,8 +70,10 @@ class MonthFragment : Fragment(), Calendar { } override fun updateCalendar(month: String, days: List) { - mHolder.month_value.text = month - updateDays(days) + activity?.runOnUiThread { + mHolder.month_value.text = month + updateDays(days) + } } fun setListener(listener: NavigationListener) {