summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xorg.fox.ttrss/src/main/AndroidManifest.xml1
-rwxr-xr-x[-rw-r--r--]org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java2
-rwxr-xr-x[-rw-r--r--]org.fox.ttrss/src/main/java/org/fox/ttrss/widget/SmallWidgetProvider.java117
-rwxr-xr-x[-rw-r--r--]org.fox.ttrss/src/main/java/org/fox/ttrss/widget/WidgetUpdateService.java209
-rwxr-xr-x[-rw-r--r--]org.fox.ttrss/src/main/res/layout/widget_small.xml4
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" />