Merge "Fix the bug that user setting is removed when switching" into tm-qpr-dev am: d16866aaf3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20485639

Change-Id: I49070b9f6cbe276ba4d3ee9adc64e3cb2e3c58c6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Xiang Wang
2022-11-16 21:45:47 +00:00
committed by Automerger Merge Worker
2 changed files with 38 additions and 13 deletions

View File

@@ -1276,20 +1276,12 @@ public final class GameManagerService extends IGameManagerService.Stub {
void onUserSwitching(TargetUser from, TargetUser to) { void onUserSwitching(TargetUser from, TargetUser to) {
final int toUserId = to.getUserIdentifier(); final int toUserId = to.getUserIdentifier();
if (from != null) { // we want to re-populate the setting when switching user as the device config may have
synchronized (mLock) { // changed, which will only update for the previous user, see
final int fromUserId = from.getUserIdentifier(); // DeviceConfigListener#onPropertiesChanged.
if (mSettings.containsKey(fromUserId)) {
final Message msg = mHandler.obtainMessage(REMOVE_SETTINGS);
msg.obj = fromUserId;
mHandler.sendMessage(msg);
}
}
}
final Message msg = mHandler.obtainMessage(POPULATE_GAME_MODE_SETTINGS); final Message msg = mHandler.obtainMessage(POPULATE_GAME_MODE_SETTINGS);
msg.obj = toUserId; msg.obj = toUserId;
mHandler.sendMessage(msg); mHandler.sendMessage(msg);
if (mGameServiceController != null) { if (mGameServiceController != null) {
mGameServiceController.notifyNewForegroundUser(to); mGameServiceController.notifyNewForegroundUser(to);
} }
@@ -1429,9 +1421,10 @@ public final class GameManagerService extends IGameManagerService.Stub {
Slog.v(TAG, "Package configuration not found for " + packageName); Slog.v(TAG, "Package configuration not found for " + packageName);
return; return;
} }
} else {
updateFps(packageConfig, packageName, gameMode, userId);
updateCompatModeDownscale(packageConfig, packageName, gameMode);
} }
updateCompatModeDownscale(packageConfig, packageName, gameMode);
updateFps(packageConfig, packageName, gameMode, userId);
updateUseAngle(packageName, gameMode); updateUseAngle(packageName, gameMode);
} }

View File

@@ -1490,6 +1490,38 @@ public class GameManagerServiceTests {
} }
@Test @Test
public void testSwitchUser() {
mockManageUsersGranted();
mockModifyGameModeGranted();
mockDeviceConfigBattery();
final Context context = InstrumentationRegistry.getContext();
GameManagerService gameManagerService = new GameManagerService(mMockContext,
mTestLooper.getLooper(), context.getFilesDir());
startUser(gameManagerService, USER_ID_1);
startUser(gameManagerService, USER_ID_2);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_BATTERY, USER_ID_1);
checkReportedModes(gameManagerService, GameManager.GAME_MODE_STANDARD,
GameManager.GAME_MODE_BATTERY);
assertEquals(gameManagerService.getGameMode(mPackageName, USER_ID_1),
GameManager.GAME_MODE_BATTERY);
mockDeviceConfigAll();
switchUser(gameManagerService, USER_ID_1, USER_ID_2);
assertEquals(gameManagerService.getGameMode(mPackageName, USER_ID_2),
GameManager.GAME_MODE_STANDARD);
checkReportedModes(gameManagerService, GameManager.GAME_MODE_STANDARD,
GameManager.GAME_MODE_BATTERY, GameManager.GAME_MODE_PERFORMANCE);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_2);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_BATTERY, USER_ID_1);
switchUser(gameManagerService, USER_ID_2, USER_ID_1);
checkReportedModes(gameManagerService, GameManager.GAME_MODE_STANDARD,
GameManager.GAME_MODE_BATTERY, GameManager.GAME_MODE_PERFORMANCE);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_2);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_BATTERY, USER_ID_1);
}
public void testResetInterventions_onDeviceConfigReset() throws Exception { public void testResetInterventions_onDeviceConfigReset() throws Exception {
mockModifyGameModeGranted(); mockModifyGameModeGranted();
String configStringBefore = String configStringBefore =