properly update the list widget when needed

This commit is contained in:
tibbi 2016-11-30 19:09:26 +01:00
parent de4df60a0e
commit 11bebdce62
7 changed files with 37 additions and 22 deletions

View File

@ -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() {

View File

@ -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()

View File

@ -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)
}
}
}

View File

@ -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)
}

View File

@ -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)

View File

@ -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)

View File

@ -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"/>