From 697586c3a9397586c1708d1c83756d03162d68b2 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 13 Feb 2015 14:09:26 +0300 Subject: fix widget not working correctly after device reboot --- .../main/java/org/fox/ttrss/OnlineActivity.java | 2 +- .../org/fox/ttrss/widget/SmallWidgetProvider.java | 117 +++++------- .../org/fox/ttrss/widget/WidgetUpdateService.java | 209 ++++++++++----------- 3 files changed, 153 insertions(+), 175 deletions(-) mode change 100644 => 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java mode change 100644 => 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java mode change 100644 => 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java (limited to 'org.fox.ttrss/src/main/java/org/fox') diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java old mode 100644 new mode 100755 index 2dba0862..9963db2a --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -314,7 +314,7 @@ public class OnlineActivity extends CommonActivity { public void onStop() { super.onStop(); - Intent initialUpdateIntent = new Intent(SmallWidgetProvider.FORCE_UPDATE_ACTION); + Intent initialUpdateIntent = new Intent(SmallWidgetProvider.ACTION_REQUEST_UPDATE); sendBroadcast(initialUpdateIntent); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java old mode 100644 new mode 100755 index e90ffbe7..6c2261a8 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java @@ -15,90 +15,75 @@ import org.fox.ttrss.R; public class SmallWidgetProvider extends AppWidgetProvider { private final String TAG = this.getClass().getSimpleName(); - public static final String FORCE_UPDATE_ACTION = "org.fox.ttrss.WIDGET_FORCE_UPDATE"; + public static final String ACTION_REQUEST_UPDATE = "org.fox.ttrss.WIDGET_FORCE_UPDATE"; + public static final String ACTION_UPDATE_RESULT = "org.fox.ttrss.WIDGET_UPDATE_RESULT"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d(TAG, "onUpdate"); - final int N = appWidgetIds.length; + Intent intent = new Intent(context, OnlineActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); + + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_small); + views.setOnClickPendingIntent(R.id.widget_main, pendingIntent); + + appWidgetManager.updateAppWidget(appWidgetIds, views); + + Intent serviceIntent = new Intent(context.getApplicationContext(), WidgetUpdateService.class); + context.startService(serviceIntent); + } + + + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "onReceive"); - // Perform this loop procedure for each App Widget that belongs to this provider - for (int i=0; i umap = new HashMap() { - { - put("op", "getUnread"); - put("feed_id", String.valueOf(feedId)); - put("sid", fSessionId); - } - }; - - aru.execute(umap); - } - - @Override - protected void onLoginFailed(int requestId, ApiRequest ar) { - - view.setTextViewText(R.id.counter, "?"); - manager.updateAppWidget(thisWidget, view); - } - - @Override - protected void onLoggingIn(int requestId) { - - - } - }; - - String login = m_prefs.getString("login", "").trim(); - String password = m_prefs.getString("password", "").trim(); - - loginManager.logIn(getApplicationContext(), 1, login, password); - } - } catch (Exception e) { - e.printStackTrace(); - - view.setTextViewText(R.id.counter, "?"); - manager.updateAppWidget(thisWidget, view); - - } + SimpleLoginManager loginManager = new SimpleLoginManager() { + + @Override + protected void onLoginSuccess(int requestId, String sessionId, int apiLevel) { + + ApiRequest aru = new ApiRequest(getApplicationContext()) { + @Override + protected void onPostExecute(JsonElement result) { + if (result != null) { + try { + JsonObject content = result.getAsJsonObject(); + + if (content != null) { + int unread = content.get("unread").getAsInt(); + sendResultIntent(unread, UPDATE_RESULT_OK); + + return; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER); + } + }; + + final String fSessionId = sessionId; + + HashMap umap = new HashMap() { + { + put("op", "getUnread"); + put("feed_id", String.valueOf(feedId)); + put("sid", fSessionId); + } + }; + + aru.execute(umap); + } + + @Override + protected void onLoginFailed(int requestId, ApiRequest ar) { + sendResultIntent(-1, UPDATE_RESULT_ERROR_LOGIN); + } + + @Override + protected void onLoggingIn(int requestId) { + + + } + }; + + String login = m_prefs.getString("login", "").trim(); + String password = m_prefs.getString("password", "").trim(); + + loginManager.logIn(getApplicationContext(), 1, login, password); + } + } catch (Exception e) { + e.printStackTrace(); + + sendResultIntent(-1, UPDATE_RESULT_ERROR_OTHER); + } + + stopSelf(); + + super.onStart(intent, startId); } + + public void sendResultIntent(int unread, int resultCode) { + Intent intent = new Intent(); + intent.setAction(SmallWidgetProvider.ACTION_UPDATE_RESULT); + intent.putExtra("resultCode", resultCode); + intent.putExtra("unread", unread); + + sendBroadcast(intent); + + if (resultCode != UPDATE_IN_PROGRESS) stopSelf(); + } } -- cgit v1.2.3-54-g00ecf