Optimized unified widget update

pull/159/head
M66B 5 years ago
parent 10cd919172
commit 26f5e0d764

@ -22,7 +22,6 @@ package eu.faircode.email;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider; import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
@ -58,10 +57,4 @@ public class WidgetUnified extends AppWidgetProvider {
appWidgetManager.updateAppWidget(id, views); appWidgetManager.updateAppWidget(id, views);
} }
} }
static void update(Context context) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, WidgetUnified.class));
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.lv);
}
} }

@ -19,6 +19,7 @@ package eu.faircode.email;
Copyright 2018-2019 by Marcel Bokhorst (M66B) Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/ */
import android.appwidget.AppWidgetManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Typeface; import android.graphics.Typeface;
@ -40,11 +41,15 @@ import static android.os.Looper.getMainLooper;
public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context context; private Context context;
private int appWidgetId;
private Handler handler; private Handler handler;
private TwoStateOwner owner; private TwoStateOwner owner;
private List<EntityMessage> messages = new ArrayList<>(); private List<EntityMessage> messages = new ArrayList<>();
WidgetUnifiedRemoteViewsFactory(final Context context) { WidgetUnifiedRemoteViewsFactory(final Context context, final int appWidgetId) {
this.appWidgetId = appWidgetId;
this.context = context; this.context = context;
this.handler = new Handler(getMainLooper()); this.handler = new Handler(getMainLooper());
@ -52,7 +57,7 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot
@Override @Override
public void run() { public void run() {
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
owner = new TwoStateOwner("WidgetUnified"); owner = new TwoStateOwner("WidgetUnified:" + appWidgetId);
db.message().liveWidgetUnified().observe(owner, new Observer<List<EntityMessage>>() { db.message().liveWidgetUnified().observe(owner, new Observer<List<EntityMessage>>() {
@Override @Override
public void onChanged(List<EntityMessage> messages) { public void onChanged(List<EntityMessage> messages) {
@ -78,8 +83,11 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot
WidgetUnifiedRemoteViewsFactory.this.messages = messages; WidgetUnifiedRemoteViewsFactory.this.messages = messages;
if (changed) if (changed) {
WidgetUnified.update(context); Log.i("Widget factory notify changed id=" + appWidgetId);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.notifyAppWidgetViewDataChanged(new int[]{appWidgetId}, R.id.lv);
}
} }
}); });
} }
@ -88,7 +96,7 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot
@Override @Override
public void onCreate() { public void onCreate() {
Log.i("Widget factory create"); Log.i("Widget factory create id=" + appWidgetId);
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -99,11 +107,12 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot
@Override @Override
public void onDataSetChanged() { public void onDataSetChanged() {
Log.i("Widget factory changed id=" + appWidgetId);
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
Log.i("Widget factory destroy"); Log.i("Widget factory destroy id=" + appWidgetId);
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
public void run() { public void run() {

@ -19,12 +19,16 @@ package eu.faircode.email;
Copyright 2018-2019 by Marcel Bokhorst (M66B) Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/ */
import android.appwidget.AppWidgetManager;
import android.content.Intent; import android.content.Intent;
import android.widget.RemoteViewsService; import android.widget.RemoteViewsService;
public class WidgetUnifiedService extends RemoteViewsService { public class WidgetUnifiedService extends RemoteViewsService {
@Override @Override
public RemoteViewsFactory onGetViewFactory(Intent intent) { public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new WidgetUnifiedRemoteViewsFactory(this.getApplicationContext()); return new WidgetUnifiedRemoteViewsFactory(
this.getApplicationContext(),
intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID));
} }
} }

Loading…
Cancel
Save