diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index c6638b95c..8bfe3c937 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -12,7 +12,7 @@ import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter import com.simplemobiletools.calendar.adapters.MyYearPagerAdapter import com.simplemobiletools.calendar.dialogs.ChangeViewDialog -import com.simplemobiletools.calendar.extensions.updateWidget +import com.simplemobiletools.calendar.extensions.updateWidgets import com.simplemobiletools.calendar.fragments.EventListFragment import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.Formatter @@ -39,7 +39,7 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener { override fun onResume() { super.onResume() - updateWidget() + updateWidgets() } override fun onPause() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListWidgetAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListWidgetAdapter.kt index 5605257cc..df631cd99 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListWidgetAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListWidgetAdapter.kt @@ -77,7 +77,6 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV override fun getViewTypeCount() = 2 override fun onCreate() { - } override fun getItemId(position: Int) = position.toLong() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 3a0ff9354..48a1bc4f2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -12,16 +12,29 @@ import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.models.Event import com.simplemobiletools.calendar.receivers.NotificationReceiver -fun Context.updateWidget() { +fun Context.updateWidgets() { val widgetsCnt = AppWidgetManager.getInstance(this).getAppWidgetIds(ComponentName(this, MyWidgetMonthlyProvider::class.java)) - if (widgetsCnt.isEmpty()) - return + if (widgetsCnt.isNotEmpty()) { + val ids = intArrayOf(R.xml.widget_monthly_info) + Intent(this, MyWidgetMonthlyProvider::class.java).apply { + action = AppWidgetManager.ACTION_APPWIDGET_UPDATE + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) + sendBroadcast(this) + } + } - val ids = intArrayOf(R.xml.widget_monthly_info) - Intent(this, MyWidgetMonthlyProvider::class.java).apply { - action = AppWidgetManager.ACTION_APPWIDGET_UPDATE - putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) - sendBroadcast(this) + updateListWidget() +} + +fun Context.updateListWidget() { + val widgetsCnt = AppWidgetManager.getInstance(this).getAppWidgetIds(ComponentName(this, MyWidgetListProvider::class.java)) + if (widgetsCnt.isNotEmpty()) { + val ids = intArrayOf(R.xml.widget_list_info) + Intent(this, MyWidgetListProvider::class.java).apply { + action = AppWidgetManager.ACTION_APPWIDGET_UPDATE + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) + sendBroadcast(this) + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt index f346b530b..9eeaf5d79 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt @@ -9,7 +9,7 @@ import android.database.sqlite.SQLiteQueryBuilder import android.text.TextUtils import com.simplemobiletools.calendar.extensions.getIntValue import com.simplemobiletools.calendar.extensions.getStringValue -import com.simplemobiletools.calendar.extensions.updateWidget +import com.simplemobiletools.calendar.extensions.updateWidgets import com.simplemobiletools.calendar.models.Event import org.joda.time.DateTime import java.util.* @@ -79,7 +79,7 @@ class DBHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_V mDb.insert(META_TABLE_NAME, null, metaValues) } - context?.updateWidget() + context?.updateWidgets() mEventsListener?.eventInserted(event) } @@ -97,7 +97,7 @@ class DBHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_V mDb.insertWithOnConflict(META_TABLE_NAME, null, metaValues, SQLiteDatabase.CONFLICT_REPLACE) } - context?.updateWidget() + context?.updateWidgets() mEventsListener?.eventUpdated(event) } @@ -138,7 +138,7 @@ class DBHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_V val metaSelection = "$COL_EVENT_ID IN ($args)" mDb.delete(META_TABLE_NAME, metaSelection, null) - context?.updateWidget() + context?.updateWidgets() mEventsListener?.eventsDeleted(ids.size) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetListProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetListProvider.kt index b10dcea2f..9d2c45d99 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetListProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetListProvider.kt @@ -15,7 +15,6 @@ import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.extensions.adjustAlpha import com.simplemobiletools.calendar.services.WidgetService - class MyWidgetListProvider : AppWidgetProvider() { companion object { private var mTextColor = 0 @@ -48,16 +47,18 @@ class MyWidgetListProvider : AppWidgetProvider() { val bgColor = prefs.getInt(WIDGET_BG_COLOR, Color.BLACK) mRemoteViews.setInt(R.id.widget_event_list, "setBackgroundColor", bgColor) - val intent = Intent(context, WidgetService::class.java) - intent.data = Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)) - mRemoteViews.setRemoteAdapter(R.id.widget_event_list, intent) + Intent(context, WidgetService::class.java).apply { + data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME)) + mRemoteViews.setRemoteAdapter(R.id.widget_event_list, this) + } val startActivityIntent = Intent(context, EventActivity::class.java) val startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT) mRemoteViews.setPendingIntentTemplate(R.id.widget_event_list, startActivityPendingIntent) - val thisWidget = ComponentName(mContext, MyWidgetListProvider::class.java) - mWidgetManager.updateAppWidget(thisWidget, mRemoteViews) + val appWidgetIds = mWidgetManager.getAppWidgetIds(ComponentName(context, MyWidgetListProvider::class.java)) + mWidgetManager.updateAppWidget(appWidgetIds, mRemoteViews) + mWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_event_list) } private fun initPrefs(context: Context) = context.getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt index fa84a672c..a1e84a321 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt @@ -10,6 +10,7 @@ import android.media.RingtoneManager import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.extensions.scheduleNextEvent +import com.simplemobiletools.calendar.extensions.updateListWidget import com.simplemobiletools.calendar.helpers.Config import com.simplemobiletools.calendar.helpers.DBHelper import com.simplemobiletools.calendar.helpers.EVENT_ID @@ -18,6 +19,7 @@ import com.simplemobiletools.calendar.models.Event class NotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { + context.updateListWidget() val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id = intent.getIntExtra(EVENT_ID, -1) if (id == -1) diff --git a/app/src/main/res/xml/widget_list_info.xml b/app/src/main/res/xml/widget_list_info.xml index 63bf1d318..74f05ae59 100644 --- a/app/src/main/res/xml/widget_list_info.xml +++ b/app/src/main/res/xml/widget_list_info.xml @@ -6,4 +6,4 @@ android:minWidth="@dimen/min_widget_width" android:previewImage="@mipmap/widget_preview" android:resizeMode="horizontal|vertical" - android:updatePeriodMillis="150000"/> + android:updatePeriodMillis="600000"/>