Skip to content

Commit 48f37ec

Browse files
author
John Spurlock
committed
Keep quick settings brightness icon/dialog level in sync.
We now listen for brightness changes and update the icon appropriately. Note there are still only two icon states in QS (auto-on and auto-off). We also listen for user switches, since the brightness setting is per-user. The manual brightness level is now kept in sync with level set in Settings. This change is tightly scoped to brightness only. Any other QS bugs should be triaged separately. Bug:7283805 Change-Id: Ibaf8fe94e98f65cc02efe7fcddf4f38370fdb09f
1 parent 20de160 commit 48f37ec

File tree

5 files changed

+120
-41
lines changed

5 files changed

+120
-41
lines changed

packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.android.systemui.statusbar.phone;
1818

19+
import android.app.ActivityManager;
1920
import android.bluetooth.BluetoothAdapter;
2021
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
2122
import android.content.BroadcastReceiver;
@@ -42,6 +43,7 @@
4243
import com.android.systemui.R;
4344
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
4445
import com.android.systemui.statusbar.policy.BrightnessController.BrightnessStateChangeCallback;
46+
import com.android.systemui.statusbar.policy.CurrentUserTracker;
4547
import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback;
4648
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
4749

@@ -98,16 +100,6 @@ public void onReceive(Context context, Intent intent) {
98100
}
99101
};
100102

101-
/** Broadcast receiver to act on user switches to update visuals of per-user state */
102-
private BroadcastReceiver mUserSwitchedReceiver = new BroadcastReceiver() {
103-
@Override
104-
public void onReceive(Context context, Intent intent) {
105-
if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
106-
onUserSwitched(intent);
107-
}
108-
}
109-
};
110-
111103
/** ContentObserver to determine the next alarm */
112104
private class NextAlarmObserver extends ContentObserver {
113105
public NextAlarmObserver(Handler handler) {
@@ -141,10 +133,36 @@ public void startObserving() {
141133
Settings.Secure.getUriFor(Settings.Secure.BUGREPORT_IN_POWER_MENU), false, this);
142134
}
143135
}
144-
private Context mContext;
145-
private Handler mHandler;
146-
private NextAlarmObserver mNextAlarmObserver;
147-
private BugreportObserver mBugreportObserver;
136+
137+
/** ContentObserver to watch brightness **/
138+
private class BrightnessObserver extends ContentObserver {
139+
public BrightnessObserver(Handler handler) {
140+
super(handler);
141+
}
142+
143+
@Override
144+
public void onChange(boolean selfChange) {
145+
onBrightnessLevelChanged();
146+
}
147+
148+
public void startObserving() {
149+
final ContentResolver cr = mContext.getContentResolver();
150+
cr.unregisterContentObserver(this);
151+
cr.registerContentObserver(
152+
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),
153+
false, this, mUserTracker.getCurrentUserId());
154+
cr.registerContentObserver(
155+
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
156+
false, this, mUserTracker.getCurrentUserId());
157+
}
158+
}
159+
160+
private final Context mContext;
161+
private final Handler mHandler;
162+
private final CurrentUserTracker mUserTracker;
163+
private final NextAlarmObserver mNextAlarmObserver;
164+
private final BugreportObserver mBugreportObserver;
165+
private final BrightnessObserver mBrightnessObserver;
148166

149167
private QuickSettingsTileView mUserTile;
150168
private RefreshCallback mUserCallback;
@@ -209,17 +227,24 @@ public void startObserving() {
209227
public QuickSettingsModel(Context context) {
210228
mContext = context;
211229
mHandler = new Handler();
230+
mUserTracker = new CurrentUserTracker(mContext) {
231+
@Override
232+
public void onReceive(Context context, Intent intent) {
233+
super.onReceive(context, intent);
234+
onUserSwitched();
235+
}
236+
};
237+
212238
mNextAlarmObserver = new NextAlarmObserver(mHandler);
213239
mNextAlarmObserver.startObserving();
214240
mBugreportObserver = new BugreportObserver(mHandler);
215241
mBugreportObserver.startObserving();
242+
mBrightnessObserver = new BrightnessObserver(mHandler);
243+
mBrightnessObserver.startObserving();
216244

217245
IntentFilter alarmIntentFilter = new IntentFilter();
218246
alarmIntentFilter.addAction(Intent.ACTION_ALARM_CHANGED);
219247
context.registerReceiver(mAlarmIntentReceiver, alarmIntentFilter);
220-
221-
IntentFilter userSwitchedFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
222-
context.registerReceiver(mUserSwitchedReceiver, userSwitchedFilter);
223248
}
224249

225250
void updateResources() {
@@ -625,9 +650,10 @@ void addBrightnessTile(QuickSettingsTileView view, RefreshCallback cb) {
625650
@Override
626651
public void onBrightnessLevelChanged() {
627652
Resources r = mContext.getResources();
628-
int mode = Settings.System.getInt(mContext.getContentResolver(),
653+
int mode = Settings.System.getIntForUser(mContext.getContentResolver(),
629654
Settings.System.SCREEN_BRIGHTNESS_MODE,
630-
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
655+
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL,
656+
mUserTracker.getCurrentUserId());
631657
mBrightnessState.autoBrightness =
632658
(mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
633659
mBrightnessState.iconId = mBrightnessState.autoBrightness
@@ -641,7 +667,8 @@ void refreshBrightnessTile() {
641667
}
642668

643669
// User switch: need to update visuals of all tiles known to have per-user state
644-
void onUserSwitched(Intent intent) {
670+
void onUserSwitched() {
671+
mBrightnessObserver.startObserving();
645672
onRotationLockChanged();
646673
onBrightnessLevelChanged();
647674
onNextAlarmChanged();

packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ public class BrightnessController implements ToggleSlider.Listener {
3939
private final int mMinimumBacklight;
4040
private final int mMaximumBacklight;
4141

42-
private Context mContext;
43-
private ToggleSlider mControl;
44-
private IPowerManager mPower;
42+
private final Context mContext;
43+
private final ToggleSlider mControl;
44+
private final boolean mAutomaticAvailable;
45+
private final IPowerManager mPower;
46+
private final CurrentUserTracker mUserTracker;
4547

4648
private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks =
4749
new ArrayList<BrightnessStateChangeCallback>();
@@ -53,20 +55,31 @@ public interface BrightnessStateChangeCallback {
5355
public BrightnessController(Context context, ToggleSlider control) {
5456
mContext = context;
5557
mControl = control;
58+
mUserTracker = new CurrentUserTracker(mContext);
5659

5760
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
5861
mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
5962
mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
6063

61-
boolean automaticAvailable = context.getResources().getBoolean(
64+
mAutomaticAvailable = context.getResources().getBoolean(
6265
com.android.internal.R.bool.config_automatic_brightness_available);
6366
mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
6467

65-
if (automaticAvailable) {
68+
control.setOnChangedListener(this);
69+
}
70+
71+
public void addStateChangedCallback(BrightnessStateChangeCallback cb) {
72+
mChangeCallbacks.add(cb);
73+
}
74+
75+
@Override
76+
public void onInit(ToggleSlider control) {
77+
if (mAutomaticAvailable) {
6678
int automatic;
6779
try {
68-
automatic = Settings.System.getInt(mContext.getContentResolver(),
69-
Settings.System.SCREEN_BRIGHTNESS_MODE);
80+
automatic = Settings.System.getIntForUser(mContext.getContentResolver(),
81+
Settings.System.SCREEN_BRIGHTNESS_MODE,
82+
mUserTracker.getCurrentUserId());
7083
} catch (SettingNotFoundException snfe) {
7184
automatic = 0;
7285
}
@@ -78,20 +91,15 @@ public BrightnessController(Context context, ToggleSlider control) {
7891

7992
int value;
8093
try {
81-
value = Settings.System.getInt(mContext.getContentResolver(),
82-
Settings.System.SCREEN_BRIGHTNESS);
94+
value = Settings.System.getIntForUser(mContext.getContentResolver(),
95+
Settings.System.SCREEN_BRIGHTNESS,
96+
mUserTracker.getCurrentUserId());
8397
} catch (SettingNotFoundException ex) {
8498
value = mMaximumBacklight;
8599
}
86100

87101
control.setMax(mMaximumBacklight - mMinimumBacklight);
88102
control.setValue(value - mMinimumBacklight);
89-
90-
control.setOnChangedListener(this);
91-
}
92-
93-
public void addStateChangedCallback(BrightnessStateChangeCallback cb) {
94-
mChangeCallbacks.add(cb);
95103
}
96104

97105
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
@@ -103,8 +111,9 @@ public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, in
103111
if (!tracking) {
104112
AsyncTask.execute(new Runnable() {
105113
public void run() {
106-
Settings.System.putInt(mContext.getContentResolver(),
107-
Settings.System.SCREEN_BRIGHTNESS, val);
114+
Settings.System.putIntForUser(mContext.getContentResolver(),
115+
Settings.System.SCREEN_BRIGHTNESS, val,
116+
mUserTracker.getCurrentUserId());
108117
}
109118
});
110119
}
@@ -116,8 +125,9 @@ public void run() {
116125
}
117126

118127
private void setMode(int mode) {
119-
Settings.System.putInt(mContext.getContentResolver(),
120-
Settings.System.SCREEN_BRIGHTNESS_MODE, mode);
128+
Settings.System.putIntForUser(mContext.getContentResolver(),
129+
Settings.System.SCREEN_BRIGHTNESS_MODE, mode,
130+
mUserTracker.getCurrentUserId());
121131
}
122132

123133
private void setBrightness(int brightness) {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.android.systemui.statusbar.policy;
2+
3+
import android.app.ActivityManager;
4+
import android.content.BroadcastReceiver;
5+
import android.content.Context;
6+
import android.content.Intent;
7+
import android.content.IntentFilter;
8+
9+
public class CurrentUserTracker extends BroadcastReceiver {
10+
11+
private int mCurrentUserId;
12+
13+
public CurrentUserTracker(Context context) {
14+
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
15+
context.registerReceiver(this, filter);
16+
mCurrentUserId = ActivityManager.getCurrentUser();
17+
}
18+
19+
public int getCurrentUserId() {
20+
return mCurrentUserId;
21+
}
22+
23+
@Override
24+
public void onReceive(Context context, Intent intent) {
25+
if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
26+
mCurrentUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
27+
}
28+
}
29+
}

packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class ToggleSlider extends RelativeLayout
3636
private static final String TAG = "StatusBar.ToggleSlider";
3737

3838
public interface Listener {
39+
public void onInit(ToggleSlider v);
3940
public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value);
4041
}
4142

@@ -75,6 +76,14 @@ public ToggleSlider(Context context, AttributeSet attrs, int defStyle) {
7576
a.recycle();
7677
}
7778

79+
@Override
80+
protected void onAttachedToWindow() {
81+
super.onAttachedToWindow();
82+
if (mListener != null) {
83+
mListener.onInit(this);
84+
}
85+
}
86+
7887
public void onCheckedChanged(CompoundButton toggle, boolean checked) {
7988
Drawable thumb;
8089
Drawable slider;

packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ public VolumeController(Context context, ToggleSlider control) {
5151

5252
mMute = mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
5353
mVolume = mAudioManager.getStreamVolume(STREAM);
54+
55+
control.setOnChangedListener(this);
56+
}
57+
58+
@Override
59+
public void onInit(ToggleSlider control) {
5460
control.setMax(mAudioManager.getStreamMaxVolume(STREAM));
5561
control.setValue(mVolume);
5662
control.setChecked(mMute);
57-
58-
control.setOnChangedListener(this);
5963
}
6064

6165
public void onChanged(ToggleSlider view, boolean tracking, boolean mute, int level) {

0 commit comments

Comments
 (0)