Fix issue #3062691: GPS enable bypass via com.android.settings.widget.SettingsAppWidgetProvider
Make the receiver private. Also fix to correctly update when sync status changes. Change-Id: I35481bf5b473196b00427da4df49aa76f691d38b
This commit is contained in:
@@ -814,15 +814,15 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</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>
|
<intent-filter>
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
|
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
|
||||||
<action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
|
<action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
|
||||||
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
|
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
|
||||||
<action android:name="android.location.PROVIDERS_CHANGED" />
|
<action android:name="android.location.PROVIDERS_CHANGED" />
|
||||||
<!-- hack: using CLOSE_SYSTEM_DIALOGS to pick up (possible) sync changes -->
|
<action android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" />
|
||||||
<action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" />
|
<meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" />
|
||||||
</receiver>
|
</receiver>
|
||||||
|
@@ -23,8 +23,8 @@ import android.bluetooth.BluetoothAdapter;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.IContentService;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SyncStorageEngine;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
@@ -538,9 +538,6 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActualStateChange(Context context, Intent unused) {
|
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));
|
setCurrentState(context, getActualState(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -713,11 +710,8 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
|
|||||||
sBluetoothState.onActualStateChange(context, intent);
|
sBluetoothState.onActualStateChange(context, intent);
|
||||||
} else if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(action)) {
|
} else if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(action)) {
|
||||||
sGpsState.onActualStateChange(context, intent);
|
sGpsState.onActualStateChange(context, intent);
|
||||||
} else if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
|
} else if (SyncStorageEngine.SYNC_CONNECTION_SETTING_CHANGED_INTENT.getAction()
|
||||||
// Sadly, for lack of a "sync settings changed" intent,
|
.equals(action)) {
|
||||||
// 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.
|
|
||||||
sSyncState.onActualStateChange(context, intent);
|
sSyncState.onActualStateChange(context, intent);
|
||||||
} else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
|
} else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
|
||||||
Uri data = intent.getData();
|
Uri data = intent.getData();
|
||||||
|
Reference in New Issue
Block a user