Power widget - track brightness changes.

Also, don't change background data setting when changing auto-sync state.

Bug: 3030482
Change-Id: Iad19cac8375d2d38004dbe401ceaec5402e11989
This commit is contained in:
Amith Yamasani
2011-08-17 18:55:53 -07:00
parent e1246c5263
commit 49c3ef901b

View File

@@ -26,11 +26,13 @@ import android.content.Context;
import android.content.Intent;
import android.content.SyncStorageEngine;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -103,6 +105,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
private static final StateTracker sBluetoothState = new BluetoothStateTracker();
private static final StateTracker sGpsState = new GpsStateTracker();
private static final StateTracker sSyncState = new SyncStateTracker();
private static SettingsObserver sSettingsObserver;
/**
* The state machine for a setting's toggling, tracking reality
@@ -533,8 +536,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
@Override
public int getActualState(Context context) {
boolean on = getBackgroundDataState(context) &&
ContentResolver.getMasterSyncAutomatically();
boolean on = ContentResolver.getMasterSyncAutomatically();
return on ? STATE_ENABLED : STATE_DISABLED;
}
@@ -547,7 +549,6 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
public void requestStateChange(final Context context, final boolean desiredState) {
final ConnectivityManager connManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final boolean backgroundData = getBackgroundDataState(context);
final boolean sync = ContentResolver.getMasterSyncAutomatically();
new AsyncTask<Void, Void, Boolean>() {
@@ -555,9 +556,6 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
protected Boolean doInBackground(Void... args) {
// Turning sync on.
if (desiredState) {
if (!backgroundData) {
connManager.setBackgroundDataSetting(true);
}
if (!sync) {
ContentResolver.setMasterSyncAutomatically(true);
}
@@ -600,6 +598,11 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
if (sSettingsObserver == null) {
sSettingsObserver = new SettingsObserver(new Handler(),
context.getApplicationContext());
sSettingsObserver.startObserving();
}
}
@Override
@@ -610,6 +613,10 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
new ComponentName("com.android.settings", ".widget.SettingsAppWidgetProvider"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
if (sSettingsObserver != null) {
sSettingsObserver.stopObserving();
sSettingsObserver = null;
}
}
/**
@@ -739,18 +746,6 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
updateWidget(context);
}
/**
* Gets the state of background data.
*
* @param context
* @return true if enabled
*/
private static boolean getBackgroundDataState(Context context) {
ConnectivityManager connManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return connManager.getBackgroundDataSetting();
}
/**
* Gets state of brightness.
*
@@ -849,4 +844,34 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
Log.d(TAG, "toggleBrightness: " + e);
}
}
/** Observer to watch for changes to the BRIGHTNESS setting */
private static class SettingsObserver extends ContentObserver {
private Context mContext;
SettingsObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
void startObserving() {
ContentResolver resolver = mContext.getContentResolver();
// Listen to brightness and brightness mode
resolver.registerContentObserver(Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS), false, this);
resolver.registerContentObserver(Settings.System
.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), false, this);
}
void stopObserving() {
mContext.getContentResolver().unregisterContentObserver(this);
}
@Override
public void onChange(boolean selfChange) {
updateWidget(mContext);
}
}
}