Merge "Fix the bug that user setting is removed when switching"

This commit is contained in:
Xiang Wang
2022-11-15 21:08:07 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 11 deletions

View File

@@ -1314,16 +1314,9 @@ public final class GameManagerService extends IGameManagerService.Stub {
void onUserSwitching(TargetUser from, TargetUser to) {
final int toUserId = to.getUserIdentifier();
if (from != null) {
synchronized (mLock) {
final int fromUserId = from.getUserIdentifier();
if (mSettings.containsKey(fromUserId)) {
sendUserMessage(fromUserId, REMOVE_SETTINGS, "ON_USER_SWITCHING",
0 /*delayMillis*/);
}
}
}
// we want to re-populate the setting when switching user as the device config may have
// changed, which will only update for the previous user, see
// DeviceConfigListener#onPropertiesChanged.
sendUserMessage(toUserId, POPULATE_GAME_MODE_SETTINGS, "ON_USER_SWITCHING",
0 /*delayMillis*/);
@@ -1392,8 +1385,9 @@ public final class GameManagerService extends IGameManagerService.Stub {
Slog.v(TAG, "Package configuration not found for " + packageName);
return;
}
} else {
updateFps(packageConfig, packageName, gameMode, userId);
}
updateFps(packageConfig, packageName, gameMode, userId);
updateUseAngle(packageName, gameMode);
}

View File

@@ -1506,6 +1506,39 @@ public class GameManagerServiceTests {
}
@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);
}
@Test
public void testUpdateResolutionScalingFactor() {
mockModifyGameModeGranted();