summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java67
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java48
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CurrentUserTracker.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java8
5 files changed, 120 insertions, 41 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
index 0e5361735b37..8e891f611536 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone;
+import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
import android.content.BroadcastReceiver;
@@ -42,6 +43,7 @@ import com.android.internal.view.RotationPolicy;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.BrightnessController.BrightnessStateChangeCallback;
+import com.android.systemui.statusbar.policy.CurrentUserTracker;
import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback;
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
@@ -98,16 +100,6 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
}
};
- /** Broadcast receiver to act on user switches to update visuals of per-user state */
- private BroadcastReceiver mUserSwitchedReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
- onUserSwitched(intent);
- }
- }
- };
-
/** ContentObserver to determine the next alarm */
private class NextAlarmObserver extends ContentObserver {
public NextAlarmObserver(Handler handler) {
@@ -141,10 +133,36 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
Settings.Secure.getUriFor(Settings.Secure.BUGREPORT_IN_POWER_MENU), false, this);
}
}
- private Context mContext;
- private Handler mHandler;
- private NextAlarmObserver mNextAlarmObserver;
- private BugreportObserver mBugreportObserver;
+
+ /** ContentObserver to watch brightness **/
+ private class BrightnessObserver extends ContentObserver {
+ public BrightnessObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ onBrightnessLevelChanged();
+ }
+
+ public void startObserving() {
+ final ContentResolver cr = mContext.getContentResolver();
+ cr.unregisterContentObserver(this);
+ cr.registerContentObserver(
+ Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),
+ false, this, mUserTracker.getCurrentUserId());
+ cr.registerContentObserver(
+ Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
+ false, this, mUserTracker.getCurrentUserId());
+ }
+ }
+
+ private final Context mContext;
+ private final Handler mHandler;
+ private final CurrentUserTracker mUserTracker;
+ private final NextAlarmObserver mNextAlarmObserver;
+ private final BugreportObserver mBugreportObserver;
+ private final BrightnessObserver mBrightnessObserver;
private QuickSettingsTileView mUserTile;
private RefreshCallback mUserCallback;
@@ -209,17 +227,24 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
public QuickSettingsModel(Context context) {
mContext = context;
mHandler = new Handler();
+ mUserTracker = new CurrentUserTracker(mContext) {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ super.onReceive(context, intent);
+ onUserSwitched();
+ }
+ };
+
mNextAlarmObserver = new NextAlarmObserver(mHandler);
mNextAlarmObserver.startObserving();
mBugreportObserver = new BugreportObserver(mHandler);
mBugreportObserver.startObserving();
+ mBrightnessObserver = new BrightnessObserver(mHandler);
+ mBrightnessObserver.startObserving();
IntentFilter alarmIntentFilter = new IntentFilter();
alarmIntentFilter.addAction(Intent.ACTION_ALARM_CHANGED);
context.registerReceiver(mAlarmIntentReceiver, alarmIntentFilter);
-
- IntentFilter userSwitchedFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
- context.registerReceiver(mUserSwitchedReceiver, userSwitchedFilter);
}
void updateResources() {
@@ -625,9 +650,10 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
@Override
public void onBrightnessLevelChanged() {
Resources r = mContext.getResources();
- int mode = Settings.System.getInt(mContext.getContentResolver(),
+ int mode = Settings.System.getIntForUser(mContext.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
- Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
+ Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL,
+ mUserTracker.getCurrentUserId());
mBrightnessState.autoBrightness =
(mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
mBrightnessState.iconId = mBrightnessState.autoBrightness
@@ -641,7 +667,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
}
// User switch: need to update visuals of all tiles known to have per-user state
- void onUserSwitched(Intent intent) {
+ void onUserSwitched() {
+ mBrightnessObserver.startObserving();
onRotationLockChanged();
onBrightnessLevelChanged();
onNextAlarmChanged();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
index bb59420641db..00095037145b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
@@ -39,9 +39,11 @@ public class BrightnessController implements ToggleSlider.Listener {
private final int mMinimumBacklight;
private final int mMaximumBacklight;
- private Context mContext;
- private ToggleSlider mControl;
- private IPowerManager mPower;
+ private final Context mContext;
+ private final ToggleSlider mControl;
+ private final boolean mAutomaticAvailable;
+ private final IPowerManager mPower;
+ private final CurrentUserTracker mUserTracker;
private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks =
new ArrayList<BrightnessStateChangeCallback>();
@@ -53,20 +55,31 @@ public class BrightnessController implements ToggleSlider.Listener {
public BrightnessController(Context context, ToggleSlider control) {
mContext = context;
mControl = control;
+ mUserTracker = new CurrentUserTracker(mContext);
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
- boolean automaticAvailable = context.getResources().getBoolean(
+ mAutomaticAvailable = context.getResources().getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available);
mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
- if (automaticAvailable) {
+ control.setOnChangedListener(this);
+ }
+
+ public void addStateChangedCallback(BrightnessStateChangeCallback cb) {
+ mChangeCallbacks.add(cb);
+ }
+
+ @Override
+ public void onInit(ToggleSlider control) {
+ if (mAutomaticAvailable) {
int automatic;
try {
- automatic = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_MODE);
+ automatic = Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
+ mUserTracker.getCurrentUserId());
} catch (SettingNotFoundException snfe) {
automatic = 0;
}
@@ -78,20 +91,15 @@ public class BrightnessController implements ToggleSlider.Listener {
int value;
try {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS);
+ value = Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS,
+ mUserTracker.getCurrentUserId());
} catch (SettingNotFoundException ex) {
value = mMaximumBacklight;
}
control.setMax(mMaximumBacklight - mMinimumBacklight);
control.setValue(value - mMinimumBacklight);
-
- control.setOnChangedListener(this);
- }
-
- public void addStateChangedCallback(BrightnessStateChangeCallback cb) {
- mChangeCallbacks.add(cb);
}
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
@@ -103,8 +111,9 @@ public class BrightnessController implements ToggleSlider.Listener {
if (!tracking) {
AsyncTask.execute(new Runnable() {
public void run() {
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS, val);
+ Settings.System.putIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS, val,
+ mUserTracker.getCurrentUserId());
}
});
}
@@ -116,8 +125,9 @@ public class BrightnessController implements ToggleSlider.Listener {
}
private void setMode(int mode) {
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
+ Settings.System.putIntForUser(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_MODE, mode,
+ mUserTracker.getCurrentUserId());
}
private void setBrightness(int brightness) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CurrentUserTracker.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CurrentUserTracker.java
new file mode 100644
index 000000000000..7a2f25a8d818
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CurrentUserTracker.java
@@ -0,0 +1,29 @@
+package com.android.systemui.statusbar.policy;
+
+import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+public class CurrentUserTracker extends BroadcastReceiver {
+
+ private int mCurrentUserId;
+
+ public CurrentUserTracker(Context context) {
+ IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
+ context.registerReceiver(this, filter);
+ mCurrentUserId = ActivityManager.getCurrentUser();
+ }
+
+ public int getCurrentUserId() {
+ return mCurrentUserId;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
+ mCurrentUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
index fe2ec69bcaf3..39f8fccab1f2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
@@ -36,6 +36,7 @@ public class ToggleSlider extends RelativeLayout
private static final String TAG = "StatusBar.ToggleSlider";
public interface Listener {
+ public void onInit(ToggleSlider v);
public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value);
}
@@ -75,6 +76,14 @@ public class ToggleSlider extends RelativeLayout
a.recycle();
}
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (mListener != null) {
+ mListener.onInit(this);
+ }
+ }
+
public void onCheckedChanged(CompoundButton toggle, boolean checked) {
Drawable thumb;
Drawable slider;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java
index 43cb85ea3a56..6fee4323dc05 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java
@@ -51,11 +51,15 @@ public class VolumeController implements ToggleSlider.Listener {
mMute = mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
mVolume = mAudioManager.getStreamVolume(STREAM);
+
+ control.setOnChangedListener(this);
+ }
+
+ @Override
+ public void onInit(ToggleSlider control) {
control.setMax(mAudioManager.getStreamMaxVolume(STREAM));
control.setValue(mVolume);
control.setChecked(mMute);
-
- control.setOnChangedListener(this);
}
public void onChanged(ToggleSlider view, boolean tracking, boolean mute, int level) {