Skip to content

Commit 7711260

Browse files
John SpurlockAndroid (Google) Code Review
authored andcommitted
Merge "Keep quick settings brightness icon/dialog level in sync." into jb-mr1-dev
2 parents fc6825b + 48f37ec commit 7711260

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() {
@@ -627,9 +652,10 @@ void addBrightnessTile(QuickSettingsTileView view, RefreshCallback cb) {
627652
@Override
628653
public void onBrightnessLevelChanged() {
629654
Resources r = mContext.getResources();
630-
int mode = Settings.System.getInt(mContext.getContentResolver(),
655+
int mode = Settings.System.getIntForUser(mContext.getContentResolver(),
631656
Settings.System.SCREEN_BRIGHTNESS_MODE,
632-
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
657+
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL,
658+
mUserTracker.getCurrentUserId());
633659
mBrightnessState.autoBrightness =
634660
(mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
635661
mBrightnessState.iconId = mBrightnessState.autoBrightness
@@ -643,7 +669,8 @@ void refreshBrightnessTile() {
643669
}
644670

645671
// User switch: need to update visuals of all tiles known to have per-user state
646-
void onUserSwitched(Intent intent) {
672+
void onUserSwitched() {
673+
mBrightnessObserver.startObserving();
647674
onRotationLockChanged();
648675
onBrightnessLevelChanged();
649676
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)