aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorbulic <bulic@google.com>2014-11-19 20:29:24 -0800
committerbulic <bulic@google.com>2014-11-21 13:38:31 -0800
commit4e77ec5bedae0799157a50e2045d13e301e45984 (patch)
tree8fd1db0a49829d3c81d97e0aed3e2840a8a5ddc8 /apps
parent0732f1b0f59507bca3058749ef0e2f102599a300 (diff)
downloadsample-4e77ec5bedae0799157a50e2045d13e301e45984.tar.gz
Checking internet connectivity for widget
b/17916808 Change-Id: If79524e89a25c39d0339804d20d3c95b82e5dfbc
Diffstat (limited to 'apps')
-rw-r--r--apps/LeanbackWidget/AndroidManifest.xml5
-rw-r--r--apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java33
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);
+ }
+
}