Skip to content

Commit d493596

Browse files
author
Jeff Brown
committed
Handle user switched for settings changes.
Move OVERLAY_DISPLAY_DEVICES to Global. Bug: 7127417 Change-Id: I632648ac5b01408512f59424f3bb55162431bea4
1 parent 28e0b09 commit d493596

File tree

5 files changed

+115
-73
lines changed

5 files changed

+115
-73
lines changed

core/java/android/provider/Settings.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4850,25 +4850,6 @@ public static final String getBluetoothInputDevicePriorityKey(String address) {
48504850
public static final String CONTACTS_PREAUTH_URI_EXPIRATION =
48514851
"contacts_preauth_uri_expiration";
48524852

4853-
/**
4854-
* Overlay display devices setting.
4855-
* The associated value is a specially formatted string that describes the
4856-
* size and density of simulated secondary display devices.
4857-
* <p>
4858-
* Format: {width}x{height}/{dpi};...
4859-
* </p><p>
4860-
* Example:
4861-
* <ul>
4862-
* <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li>
4863-
* <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first
4864-
* at 1080p and the second at 720p.</li>
4865-
* <li>If the value is empty, then no overlay display devices are created.</li>
4866-
* </ul></p>
4867-
*
4868-
* @hide
4869-
*/
4870-
public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
4871-
48724853
/**
48734854
* This are the settings to be backed up.
48744855
*
@@ -5741,6 +5722,24 @@ public static final class Global extends NameValueTable {
57415722
*/
57425723
public static final String MODE_RINGER = "mode_ringer";
57435724

5725+
/**
5726+
* Overlay display devices setting.
5727+
* The associated value is a specially formatted string that describes the
5728+
* size and density of simulated secondary display devices.
5729+
* <p>
5730+
* Format: {width}x{height}/{dpi};...
5731+
* </p><p>
5732+
* Example:
5733+
* <ul>
5734+
* <li><code>1280x720/213</code>: make one overlay that is 1280x720 at 213dpi.</li>
5735+
* <li><code>1920x1080/320;1280x720/213</code>: make two overlays, the first
5736+
* at 1080p and the second at 720p.</li>
5737+
* <li>If the value is empty, then no overlay display devices are created.</li>
5738+
* </ul></p>
5739+
*
5740+
* @hide
5741+
*/
5742+
public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
57445743

57455744
// Populated lazily, guarded by class object:
57465745
private static NameValueCache sNameValueCache = new NameValueCache(

services/java/com/android/server/VibratorService.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import android.os.IBinder;
3232
import android.os.Binder;
3333
import android.os.SystemClock;
34+
import android.os.UserHandle;
3435
import android.os.Vibrator;
3536
import android.os.WorkSource;
3637
import android.provider.Settings;
@@ -139,14 +140,23 @@ public boolean hasLongerTimeout(long millis) {
139140

140141
public void systemReady() {
141142
mIm = (InputManager)mContext.getSystemService(Context.INPUT_SERVICE);
143+
142144
mContext.getContentResolver().registerContentObserver(
143145
Settings.System.getUriFor(Settings.System.VIBRATE_INPUT_DEVICES), true,
144146
new ContentObserver(mH) {
145147
@Override
146148
public void onChange(boolean selfChange) {
147149
updateInputDeviceVibrators();
148150
}
149-
});
151+
}, UserHandle.USER_ALL);
152+
153+
mContext.registerReceiver(new BroadcastReceiver() {
154+
@Override
155+
public void onReceive(Context context, Intent intent) {
156+
updateInputDeviceVibrators();
157+
}
158+
}, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mH);
159+
150160
updateInputDeviceVibrators();
151161
}
152162

@@ -341,8 +351,9 @@ private void updateInputDeviceVibrators() {
341351
synchronized (mInputDeviceVibrators) {
342352
mVibrateInputDevicesSetting = false;
343353
try {
344-
mVibrateInputDevicesSetting = Settings.System.getInt(mContext.getContentResolver(),
345-
Settings.System.VIBRATE_INPUT_DEVICES) > 0;
354+
mVibrateInputDevicesSetting = Settings.System.getIntForUser(
355+
mContext.getContentResolver(),
356+
Settings.System.VIBRATE_INPUT_DEVICES, UserHandle.USER_CURRENT) > 0;
346357
} catch (SettingNotFoundException snfe) {
347358
}
348359

services/java/com/android/server/display/OverlayDisplayAdapter.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919
import com.android.internal.util.DumpUtils;
2020
import com.android.internal.util.IndentingPrintWriter;
2121

22+
import android.content.BroadcastReceiver;
2223
import android.content.Context;
24+
import android.content.Intent;
25+
import android.content.IntentFilter;
2326
import android.database.ContentObserver;
2427
import android.os.Handler;
2528
import android.os.IBinder;
29+
import android.os.UserHandle;
2630
import android.provider.Settings;
2731
import android.util.DisplayMetrics;
2832
import android.util.Slog;
@@ -88,19 +92,28 @@ public void registerLocked() {
8892
@Override
8993
public void run() {
9094
getContext().getContentResolver().registerContentObserver(
91-
Settings.System.getUriFor(Settings.Secure.OVERLAY_DISPLAY_DEVICES),
92-
true, new SettingsObserver(getHandler()));
93-
94-
synchronized (getSyncRoot()) {
95-
updateOverlayDisplayDevicesLocked();
96-
}
95+
Settings.Global.getUriFor(Settings.Global.OVERLAY_DISPLAY_DEVICES),
96+
true, new ContentObserver(getHandler()) {
97+
@Override
98+
public void onChange(boolean selfChange) {
99+
updateOverlayDisplayDevices();
100+
}
101+
});
102+
103+
updateOverlayDisplayDevices();
97104
}
98105
});
99106
}
100107

108+
private void updateOverlayDisplayDevices() {
109+
synchronized (getSyncRoot()) {
110+
updateOverlayDisplayDevicesLocked();
111+
}
112+
}
113+
101114
private void updateOverlayDisplayDevicesLocked() {
102-
String value = Settings.System.getString(getContext().getContentResolver(),
103-
Settings.Secure.OVERLAY_DISPLAY_DEVICES);
115+
String value = Settings.Global.getString(getContext().getContentResolver(),
116+
Settings.Global.OVERLAY_DISPLAY_DEVICES);
104117
if (value == null) {
105118
value = "";
106119
}
@@ -171,19 +184,6 @@ private static int chooseOverlayGravity(int overlayNumber) {
171184
}
172185
}
173186

174-
private final class SettingsObserver extends ContentObserver {
175-
public SettingsObserver(Handler handler) {
176-
super(handler);
177-
}
178-
179-
@Override
180-
public void onChange(boolean selfChange) {
181-
synchronized (getSyncRoot()) {
182-
updateOverlayDisplayDevicesLocked();
183-
}
184-
}
185-
}
186-
187187
private final class OverlayDisplayDevice extends DisplayDevice {
188188
private final String mName;
189189
private final int mWidth;

services/java/com/android/server/input/InputManagerService.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,14 @@ public void start() {
241241
registerPointerSpeedSettingObserver();
242242
registerShowTouchesSettingObserver();
243243

244+
mContext.registerReceiver(new BroadcastReceiver() {
245+
@Override
246+
public void onReceive(Context context, Intent intent) {
247+
updatePointerSpeedFromSettings();
248+
updateShowTouchesFromSettings();
249+
}
250+
}, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mHandler);
251+
244252
updatePointerSpeedFromSettings();
245253
updateShowTouchesFromSettings();
246254
}
@@ -1073,14 +1081,14 @@ private void registerPointerSpeedSettingObserver() {
10731081
public void onChange(boolean selfChange) {
10741082
updatePointerSpeedFromSettings();
10751083
}
1076-
});
1084+
}, UserHandle.USER_ALL);
10771085
}
10781086

10791087
private int getPointerSpeedSetting() {
10801088
int speed = InputManager.DEFAULT_POINTER_SPEED;
10811089
try {
1082-
speed = Settings.System.getInt(mContext.getContentResolver(),
1083-
Settings.System.POINTER_SPEED);
1090+
speed = Settings.System.getIntForUser(mContext.getContentResolver(),
1091+
Settings.System.POINTER_SPEED, UserHandle.USER_CURRENT);
10841092
} catch (SettingNotFoundException snfe) {
10851093
}
10861094
return speed;
@@ -1099,14 +1107,14 @@ private void registerShowTouchesSettingObserver() {
10991107
public void onChange(boolean selfChange) {
11001108
updateShowTouchesFromSettings();
11011109
}
1102-
});
1110+
}, UserHandle.USER_ALL);
11031111
}
11041112

11051113
private int getShowTouchesSetting(int defaultValue) {
11061114
int result = defaultValue;
11071115
try {
1108-
result = Settings.System.getInt(mContext.getContentResolver(),
1109-
Settings.System.SHOW_TOUCHES);
1116+
result = Settings.System.getIntForUser(mContext.getContentResolver(),
1117+
Settings.System.SHOW_TOUCHES, UserHandle.USER_CURRENT);
11101118
} catch (SettingNotFoundException snfe) {
11111119
}
11121120
return result;

services/java/com/android/server/power/PowerManagerService.java

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import android.os.RemoteException;
4949
import android.os.ServiceManager;
5050
import android.os.SystemClock;
51+
import android.os.UserHandle;
5152
import android.os.WorkSource;
5253
import android.provider.Settings;
5354
import android.service.dreams.Dream;
@@ -357,34 +358,44 @@ public void systemReady(TwilightService twilight) {
357358
// Register for broadcasts from other components of the system.
358359
IntentFilter filter = new IntentFilter();
359360
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
360-
mContext.registerReceiver(new BatteryReceiver(), filter);
361+
mContext.registerReceiver(new BatteryReceiver(), filter, null, mHandler);
361362

362363
filter = new IntentFilter();
363364
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
364-
mContext.registerReceiver(new BootCompletedReceiver(), filter);
365+
mContext.registerReceiver(new BootCompletedReceiver(), filter, null, mHandler);
365366

366367
filter = new IntentFilter();
367368
filter.addAction(Intent.ACTION_DOCK_EVENT);
368-
mContext.registerReceiver(new DockReceiver(), filter);
369+
mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);
369370

370371
filter = new IntentFilter();
371372
filter.addAction(Dream.ACTION_DREAMING_STOPPED);
372-
mContext.registerReceiver(new DreamReceiver(), filter);
373+
mContext.registerReceiver(new DreamReceiver(), filter, null, mHandler);
374+
375+
filter = new IntentFilter();
376+
filter.addAction(Intent.ACTION_USER_SWITCHED);
377+
mContext.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler);
373378

374379
// Register for settings changes.
375380
final ContentResolver resolver = mContext.getContentResolver();
376381
resolver.registerContentObserver(Settings.Secure.getUriFor(
377-
Settings.Secure.SCREENSAVER_ENABLED), false, mSettingsObserver);
382+
Settings.Secure.SCREENSAVER_ENABLED),
383+
false, mSettingsObserver, UserHandle.USER_ALL);
378384
resolver.registerContentObserver(Settings.Secure.getUriFor(
379-
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP), false, mSettingsObserver);
385+
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP),
386+
false, mSettingsObserver, UserHandle.USER_ALL);
380387
resolver.registerContentObserver(Settings.System.getUriFor(
381-
Settings.System.SCREEN_OFF_TIMEOUT), false, mSettingsObserver);
388+
Settings.System.SCREEN_OFF_TIMEOUT),
389+
false, mSettingsObserver, UserHandle.USER_ALL);
382390
resolver.registerContentObserver(Settings.Global.getUriFor(
383-
Settings.Global.STAY_ON_WHILE_PLUGGED_IN), false, mSettingsObserver);
391+
Settings.Global.STAY_ON_WHILE_PLUGGED_IN),
392+
false, mSettingsObserver, UserHandle.USER_ALL);
384393
resolver.registerContentObserver(Settings.System.getUriFor(
385-
Settings.System.SCREEN_BRIGHTNESS), false, mSettingsObserver);
394+
Settings.System.SCREEN_BRIGHTNESS),
395+
false, mSettingsObserver, UserHandle.USER_ALL);
386396
resolver.registerContentObserver(Settings.System.getUriFor(
387-
Settings.System.SCREEN_BRIGHTNESS_MODE), false, mSettingsObserver);
397+
Settings.System.SCREEN_BRIGHTNESS_MODE),
398+
false, mSettingsObserver, UserHandle.USER_ALL);
388399

389400
// Go.
390401
readConfigurationLocked();
@@ -406,34 +417,38 @@ private void readConfigurationLocked() {
406417
private void updateSettingsLocked() {
407418
final ContentResolver resolver = mContext.getContentResolver();
408419

409-
mDreamsEnabledSetting = (Settings.Secure.getInt(resolver,
410-
Settings.Secure.SCREENSAVER_ENABLED, 0) != 0);
411-
mDreamsActivateOnSleepSetting = (Settings.Secure.getInt(resolver,
412-
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0) != 0);
413-
mScreenOffTimeoutSetting = Settings.System.getInt(resolver,
414-
Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT);
420+
mDreamsEnabledSetting = (Settings.Secure.getIntForUser(resolver,
421+
Settings.Secure.SCREENSAVER_ENABLED, 0,
422+
UserHandle.USER_CURRENT) != 0);
423+
mDreamsActivateOnSleepSetting = (Settings.Secure.getIntForUser(resolver,
424+
Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0,
425+
UserHandle.USER_CURRENT) != 0);
426+
mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,
427+
Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,
428+
UserHandle.USER_CURRENT);
415429
mStayOnWhilePluggedInSetting = Settings.Global.getInt(resolver,
416-
Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
417-
BatteryManager.BATTERY_PLUGGED_AC);
430+
Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
418431

419432
final int oldScreenBrightnessSetting = mScreenBrightnessSetting;
420-
mScreenBrightnessSetting = Settings.System.getInt(resolver,
421-
Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessSettingDefault);
433+
mScreenBrightnessSetting = Settings.System.getIntForUser(resolver,
434+
Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessSettingDefault,
435+
UserHandle.USER_CURRENT);
422436
if (oldScreenBrightnessSetting != mScreenBrightnessSetting) {
423437
mTemporaryScreenBrightnessSettingOverride = -1;
424438
}
425439

426440
final float oldScreenAutoBrightnessAdjustmentSetting =
427441
mScreenAutoBrightnessAdjustmentSetting;
428-
mScreenAutoBrightnessAdjustmentSetting = Settings.System.getFloat(resolver,
429-
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f);
442+
mScreenAutoBrightnessAdjustmentSetting = Settings.System.getFloatForUser(resolver,
443+
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f,
444+
UserHandle.USER_CURRENT);
430445
if (oldScreenAutoBrightnessAdjustmentSetting != mScreenAutoBrightnessAdjustmentSetting) {
431446
mTemporaryScreenAutoBrightnessAdjustmentSettingOverride = Float.NaN;
432447
}
433448

434-
mScreenBrightnessModeSetting = Settings.System.getInt(resolver,
449+
mScreenBrightnessModeSetting = Settings.System.getIntForUser(resolver,
435450
Settings.System.SCREEN_BRIGHTNESS_MODE,
436-
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
451+
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, UserHandle.USER_CURRENT);
437452

438453
mDirty |= DIRTY_SETTINGS;
439454
}
@@ -1962,6 +1977,15 @@ public void onReceive(Context context, Intent intent) {
19621977
}
19631978
}
19641979

1980+
private final class UserSwitchedReceiver extends BroadcastReceiver {
1981+
@Override
1982+
public void onReceive(Context context, Intent intent) {
1983+
synchronized (mLock) {
1984+
handleSettingsChangedLocked();
1985+
}
1986+
}
1987+
}
1988+
19651989
private final class SettingsObserver extends ContentObserver {
19661990
public SettingsObserver(Handler handler) {
19671991
super(handler);

0 commit comments

Comments
 (0)