OSDN Git Service

Fix issue #3062691: GPS enable bypass via com.android.settings.widget.SettingsAppWidg...
authorDianne Hackborn <hackbod@google.com>
Wed, 6 Oct 2010 21:28:23 +0000 (14:28 -0700)
committerDianne Hackborn <hackbod@google.com>
Wed, 6 Oct 2010 21:28:23 +0000 (14:28 -0700)
Make the receiver private.  Also fix to correctly update when sync
status changes.

Change-Id: I35481bf5b473196b00427da4df49aa76f691d38b

AndroidManifest.xml
src/com/android/settings/widget/SettingsAppWidgetProvider.java

index 34be57e..2c8cfe0 100644 (file)
             </intent-filter>
         </activity>
 
-        <receiver android:name=".widget.SettingsAppWidgetProvider" android:label="@string/gadget_title">
+        <receiver android:name=".widget.SettingsAppWidgetProvider"
+                android:label="@string/gadget_title" android:exported="false">
             <intent-filter>
                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                 <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                 <action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
                 <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                 <action android:name="android.location.PROVIDERS_CHANGED" />
-                <!-- hack: using CLOSE_SYSTEM_DIALOGS to pick up (possible) sync changes -->
-                <action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
+                <action android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" />
             </intent-filter>
             <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" />
         </receiver>
index 533b5e4..8f17e05 100644 (file)
@@ -23,8 +23,8 @@ import android.bluetooth.BluetoothAdapter;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.IContentService;
 import android.content.Intent;
+import android.content.SyncStorageEngine;
 import android.content.pm.PackageManager;
 import android.location.LocationManager;
 import android.net.ConnectivityManager;
@@ -538,9 +538,6 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
 
         @Override
         public void onActualStateChange(Context context, Intent unused) {
-            // Well, ACTION_CLOSE_SYSTEM_DIALOGS fired.  So _maybe_
-            // the Sync settings changed.
-            // TODO: find something more reliable.
             setCurrentState(context, getActualState(context));
         }
 
@@ -713,11 +710,8 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
             sBluetoothState.onActualStateChange(context, intent);
         } else if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(action)) {
             sGpsState.onActualStateChange(context, intent);
-        } else if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
-            // Sadly, for lack of a "sync settings changed" intent,
-            // this is where we check where sync is enabled or not.
-            // It's not 100% reliable though as there are paths where
-            // this doesn't fire.
+        } else if (SyncStorageEngine.SYNC_CONNECTION_SETTING_CHANGED_INTENT.getAction()
+                .equals(action)) {
             sSyncState.onActualStateChange(context, intent);
         } else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
             Uri data = intent.getData();