diff --git a/app/src/main/java/com/zulip/android/widget/ZulipWidget.java b/app/src/main/java/com/zulip/android/widget/ZulipWidget.java index d9e659cfa..294f4e0d3 100644 --- a/app/src/main/java/com/zulip/android/widget/ZulipWidget.java +++ b/app/src/main/java/com/zulip/android/widget/ZulipWidget.java @@ -3,6 +3,7 @@ import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -19,6 +20,8 @@ public class ZulipWidget extends AppWidgetProvider { + + public static String WIDGET_REFRESH = "com.zulip.android.zulipwidget.REFRESH"; private static AsyncGetEvents asyncGetEvents; private static int INTERVAL_MILLISECONDS = 0; @@ -39,6 +42,10 @@ static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, remoteViews.setRemoteAdapter(appWidgetId, R.id.widget_list, intent); remoteViews.setEmptyView(R.id.widget_list, R.id.widget_nomsg); + final Intent refreshIntent = new Intent(context, ZulipWidget.class); + refreshIntent.setAction(ZulipWidget.WIDGET_REFRESH); + final PendingIntent refreshPendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT); + remoteViews.setOnClickPendingIntent(R.id.widget_refresh, refreshPendingIntent); if (asyncGetEvents == null) { setupGetEvents(); @@ -50,6 +57,12 @@ static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); + if (action.equals(WIDGET_REFRESH)) { + final AppWidgetManager mgr = AppWidgetManager.getInstance(context); + final ComponentName cn = new ComponentName(context, ZulipWidget.class); + mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget_list); + asyncGetEvents.interrupt(); + } super.onReceive(context, intent); }