diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/LeanbackWidget/AndroidManifest.xml | 5 | ||||
-rw-r--r-- | apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java | 33 |
2 files changed, 30 insertions, 8 deletions
diff --git a/apps/LeanbackWidget/AndroidManifest.xml b/apps/LeanbackWidget/AndroidManifest.xml index 8a0f819..9474560 100644 --- a/apps/LeanbackWidget/AndroidManifest.xml +++ b/apps/LeanbackWidget/AndroidManifest.xml @@ -11,11 +11,8 @@ <application android:label="@string/app_label"> <receiver android:name=".ClockWidgetProvider" > <intent-filter> - <!-- broadcasts that could indicate our internet connection status has changed --> + <action android:name="android.net.conn.INET_CONDITION_ACTION" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> - <action android:name="android.net.wifi.RSSI_CHANGED" /> - <action android:name="com.google.android.gcm.CONNECTED" /> - <action android:name="com.google.android.gcm.DISCONNECTED" /> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> diff --git a/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java b/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java index 9928ca8..2bc0d57 100644 --- a/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java +++ b/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java @@ -8,14 +8,26 @@ import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; -import android.os.Bundle; -import android.text.TextUtils; import android.widget.RemoteViews; public class ClockWidgetProvider extends AppWidgetProvider { + private static final String SHARED_PREFS = "widget-prefs"; + private static final int INET_CONDITION_THRESHOLD = 50; + private static final String INET_CONDITION_ACTION = "android.net.conn.INET_CONDITION_ACTION"; + private static final String EXTRA_INET_CONDITION = "inetCondition"; + @Override public void onReceive(Context context, Intent intent) { + String intentAction = intent.getAction(); + if (INET_CONDITION_ACTION.equals(intentAction)) { + // a broadcast with this intent action is only fired when we are actually connected + // (i.e connectionStatus = 100). So, clearing connectivity status when changing + // networks is required + int connectionStatus = intent.getIntExtra(EXTRA_INET_CONDITION, -551); + writeConnectivity(context, connectionStatus > INET_CONDITION_THRESHOLD); + } + update(context); super.onReceive(context, intent); } @@ -45,9 +57,11 @@ public class ClockWidgetProvider extends AppWidgetProvider { NetworkInfo info = cm.getActiveNetworkInfo(); int resId = 0; - if (info == null || !info.isAvailable()) { + if (info == null || !info.isAvailable() || !info.isConnected()) { + // can't have Internet access with no network + writeConnectivity(context, false); resId = R.drawable.ic_widget_wifi_not_connected; - } else if (!info.isConnected()) { + } else if (!readConnectivity(context)) { resId = R.drawable.ic_widget_wifi_no_internet; } else { // internet is connected and working, show nothing @@ -56,4 +70,15 @@ public class ClockWidgetProvider extends AppWidgetProvider { return resId; } + + private static void writeConnectivity(Context context, boolean inetConnected) { + context.getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE).edit() + .putBoolean(EXTRA_INET_CONDITION, inetConnected).apply(); + } + + private static boolean readConnectivity(Context context) { + return context.getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE).getBoolean( + EXTRA_INET_CONDITION, false); + } + } |