From 4e77ec5bedae0799157a50e2045d13e301e45984 Mon Sep 17 00:00:00 2001 From: bulic Date: Wed, 19 Nov 2014 20:29:24 -0800 Subject: Checking internet connectivity for widget b/17916808 Change-Id: If79524e89a25c39d0339804d20d3c95b82e5dfbc --- apps/LeanbackWidget/AndroidManifest.xml | 5 +--- .../partnerwidget/ClockWidgetProvider.java | 33 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 8 deletions(-) (limited to 'apps') 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 @@ - + - - - 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); + } + } -- cgit v1.2.3