diff options
author | Andrew Dolgov <[email protected]> | 2015-02-13 14:09:26 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2015-02-13 14:09:26 +0300 |
commit | 697586c3a9397586c1708d1c83756d03162d68b2 (patch) | |
tree | cad56f3ce86689f6fbb3894c47bcab7569c4f112 /org.fox.ttrss/src/main | |
parent | f3a3b021dd27408e699e0255c2ecc31a4cc9c09c (diff) |
fix widget not working correctly after device reboot
Diffstat (limited to 'org.fox.ttrss/src/main')
-rwxr-xr-x | org.fox.ttrss/src/main/AndroidManifest.xml | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java | 117 | ||||
-rwxr-xr-x[-rw-r--r--] | org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java | 209 | ||||
-rwxr-xr-x[-rw-r--r--] | org.fox.ttrss/src/main/res/layout/widget_small.xml | 4 |
5 files changed, 156 insertions, 177 deletions
diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml index 66cd88ba..8dc79938 100755 --- a/org.fox.ttrss/src/main/AndroidManifest.xml +++ b/org.fox.ttrss/src/main/AndroidManifest.xml @@ -219,6 +219,7 @@ <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="org.fox.ttrss.WIDGET_FORCE_UPDATE" /> + <action android:name="org.fox.ttrss.WIDGET_UPDATE_RESULT" /> </intent-filter> <meta-data 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 index 2dba0862..9963db2a 100644..100755 --- 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 index e90ffbe7..6c2261a8 100644..100755 --- 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<N; i++) { - int appWidgetId = appWidgetIds[i]; + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + ComponentName thisAppWidget = new ComponentName(context.getPackageName(), SmallWidgetProvider.class.getName()); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); - // Create an Intent to launch ExampleActivity - Intent intent = new Intent(context, OnlineActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); + if (ACTION_REQUEST_UPDATE.equals(intent.getAction())) { + Log.d(TAG, "onReceive: got update request"); - // Get the layout for the App Widget and attach an on-click listener - // to the button - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_small); - views.setOnClickPendingIntent(R.id.widget_main, pendingIntent); + onUpdate(context, appWidgetManager, appWidgetIds); + + } else if (ACTION_UPDATE_RESULT.equals(intent.getAction())) { + int unread = intent.getIntExtra("unread", -1); + int resultCode = intent.getIntExtra("resultCode", WidgetUpdateService.UPDATE_RESULT_ERROR_OTHER); - // Tell the AppWidgetManager to perform an update on the current app widget - appWidgetManager.updateAppWidget(appWidgetId, views); + Log.d(TAG, "onReceive: got update result from service: " + unread + " " + resultCode); + + updateWidgetsText(context, appWidgetManager, appWidgetIds, unread, resultCode); + } else { + super.onReceive(context, intent); } + } - /* Intent updateIntent = new Intent(context, org.fox.ttrss.widget.WidgetUpdateService.class); - PendingIntent updatePendingIntent = PendingIntent.getService(context, 0, updateIntent, 0); + private void updateWidgetsText(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, int unread, int resultCode) { - Intent intent = new Intent(context, org.fox.ttrss.OnlineActivity.class); + 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); + String viewText; + + switch (resultCode) { + case WidgetUpdateService.UPDATE_RESULT_OK: + viewText = String.valueOf(unread); + break; + case WidgetUpdateService.UPDATE_IN_PROGRESS: + viewText = "..."; + break; + default: + viewText = "?"; + } - try { - updatePendingIntent.send(); - } catch (CanceledException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } */ - - //RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_small); - - /* final int N = appWidgetIds.length; - - for (int i=0; i < N; i++) { - int appWidgetId = appWidgetIds[i]; - - Intent updateIntent = new Intent(context, org.fox.ttrss.widget.WidgetUpdateService.class); - PendingIntent updatePendingIntent = PendingIntent.getService(context, 0, updateIntent, 0); - - Intent intent = new Intent(context, org.fox.ttrss.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(appWidgetId, views); - - try { - updatePendingIntent.send(); - } catch (CanceledException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } */ - } - - @Override - public void onReceive(Context context, Intent intent) { - super.onReceive(context, intent); + views.setTextViewText(R.id.widget_unread_counter, viewText); - Log.d(TAG, "onReceive"); - - if (FORCE_UPDATE_ACTION.equals(intent.getAction())) { - - AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - ComponentName thisAppWidget = new ComponentName(context.getPackageName(), SmallWidgetProvider.class.getName()); - int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); + appWidgetManager.updateAppWidget(appWidgetIds, views); + } - onUpdate(context, appWidgetManager, appWidgetIds); - } - } - } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java index 1169cdb3..d1cc1310 100644..100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java @@ -1,138 +1,131 @@ package org.fox.ttrss.widget; import android.app.Service; -import android.appwidget.AppWidgetManager; -import android.content.ComponentName; import android.content.Intent; import android.content.SharedPreferences; import android.os.IBinder; import android.preference.PreferenceManager; import android.util.Log; -import android.widget.RemoteViews; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.fox.ttrss.ApiRequest; -import org.fox.ttrss.R; import org.fox.ttrss.util.SimpleLoginManager; import java.util.HashMap; public class WidgetUpdateService extends Service { - private final String TAG = this.getClass().getSimpleName(); + private final String TAG = this.getClass().getSimpleName(); + private SharedPreferences m_prefs; - @Override + public static final int UPDATE_RESULT_OK = 0; + public static final int UPDATE_RESULT_ERROR_LOGIN = 1; + public static final int UPDATE_RESULT_ERROR_OTHER = 2; + public static final int UPDATE_RESULT_ERROR_NEED_CONF = 3; + public static final int UPDATE_IN_PROGRESS = 4; + + @Override public IBinder onBind(Intent intent) { Log.d(TAG, "onBind"); - - // TODO Auto-generated method stub + return null; } - - /* @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Log.d(TAG, "onStartCommand"); - - return super.onStartCommand(intent, flags, startId); - } */ - - public void update() { - - - } - + @Override public void onStart(Intent intent, int startId) { - final RemoteViews view = new RemoteViews(getPackageName(), R.layout.widget_small); - - final ComponentName thisWidget = new ComponentName(this, SmallWidgetProvider.class); - final AppWidgetManager manager = AppWidgetManager.getInstance(this); - - try { - view.setTextViewText(R.id.counter, String.valueOf("...")); - - manager.updateAppWidget(thisWidget, view); - - final SharedPreferences m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - if (m_prefs.getString("ttrss_url", "").trim().length() == 0) { - - // Toast: need configure - - } else { + Log.d(TAG, "onStart"); + + try { + sendResultIntent(-1, UPDATE_IN_PROGRESS); + + m_prefs = PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()); + + if (m_prefs.getString("ttrss_url", "").trim().length() == 0) { + + sendResultIntent(-1, UPDATE_RESULT_ERROR_NEED_CONF); + + } else { final int feedId = m_prefs.getBoolean("widget_show_fresh", true) ? -3 : 0; - 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(); - - view.setTextViewText(R.id.counter, String.valueOf(unread)); - manager.updateAppWidget(thisWidget, view); - - return; - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - view.setTextViewText(R.id.counter, "?"); - manager.updateAppWidget(thisWidget, view); - } - }; - - final String fSessionId = sessionId; - - HashMap<String, String> umap = new HashMap<String, String>() { - { - 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<String, String> umap = new HashMap<String, String>() { + { + 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(); + } } diff --git a/org.fox.ttrss/src/main/res/layout/widget_small.xml b/org.fox.ttrss/src/main/res/layout/widget_small.xml index c40ead6b..f1a90491 100644..100755 --- a/org.fox.ttrss/src/main/res/layout/widget_small.xml +++ b/org.fox.ttrss/src/main/res/layout/widget_small.xml @@ -19,13 +19,13 @@ android:src="@drawable/ic_launcher" /> <TextView - android:id="@+id/counter" + android:id="@+id/widget_unread_counter" android:layout_weight="0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:gravity="center_horizontal" - android:text="\?" + android:text="" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@android:color/primary_text_dark" android:textSize="13sp" /> |