diff options
| -rw-r--r-- | services/core/java/com/android/server/app/GameManagerService.java | 19 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java | 32 |
2 files changed, 38 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 4013acefa366..3584f16c6de1 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1276,20 +1276,12 @@ 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)) { - final Message msg = mHandler.obtainMessage(REMOVE_SETTINGS); - msg.obj = fromUserId; - mHandler.sendMessage(msg); - } - } - } + // 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. final Message msg = mHandler.obtainMessage(POPULATE_GAME_MODE_SETTINGS); msg.obj = toUserId; mHandler.sendMessage(msg); - if (mGameServiceController != null) { mGameServiceController.notifyNewForegroundUser(to); } @@ -1429,9 +1421,10 @@ public final class GameManagerService extends IGameManagerService.Stub { Slog.v(TAG, "Package configuration not found for " + packageName); return; } + } else { + updateFps(packageConfig, packageName, gameMode, userId); + updateCompatModeDownscale(packageConfig, packageName, gameMode); } - updateCompatModeDownscale(packageConfig, packageName, gameMode); - updateFps(packageConfig, packageName, gameMode, userId); updateUseAngle(packageName, gameMode); } diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java index cfb80148f166..a47c529cd362 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -1490,6 +1490,38 @@ 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); + } + public void testResetInterventions_onDeviceConfigReset() throws Exception { mockModifyGameModeGranted(); String configStringBefore = |