diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 0edbea0dbd28e..3efd8ad0581b4 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1320,15 +1320,26 @@ public final class GameManagerService extends IGameManagerService.Stub { // Make sure after resetting the game mode is still supported. // If not, set the game mode to standard int gameMode = getGameMode(packageName, userId); - int newGameMode = gameMode; GamePackageConfiguration config = null; synchronized (mOverrideConfigLock) { config = mOverrideConfigs.get(packageName); } - synchronized (mDeviceConfigLock) { - config = mConfigs.get(packageName); + if (config == null) { + synchronized (mDeviceConfigLock) { + config = mConfigs.get(packageName); + } } + final int newGameMode = getNewGameMode(gameMode, config); + if (gameMode != newGameMode) { + setGameMode(packageName, GameManager.GAME_MODE_STANDARD, userId); + return; + } + setGameMode(packageName, gameMode, userId); + } + + private int getNewGameMode(int gameMode, GamePackageConfiguration config) { + int newGameMode = gameMode; if (config != null) { int modesBitfield = config.getAvailableGameModesBitfield(); // Remove UNSUPPORTED to simplify the logic here, since we really just @@ -1350,11 +1361,7 @@ public final class GameManagerService extends IGameManagerService.Stub { // UNSUPPORTED, then set to UNSUPPORTED newGameMode = GameManager.GAME_MODE_UNSUPPORTED; } - if (gameMode != newGameMode) { - setGameMode(packageName, GameManager.GAME_MODE_STANDARD, userId); - return; - } - setGameMode(packageName, gameMode, userId); + return newGameMode; } /** @@ -1412,7 +1419,6 @@ public final class GameManagerService extends IGameManagerService.Stub { } for (final String packageName : packageNames) { int gameMode = getGameMode(packageName, userId); - int newGameMode = gameMode; // Make sure the user settings and package configs don't conflict. // I.e. the user setting is set to a mode that no longer available due to // config/manifest changes. @@ -1421,27 +1427,7 @@ public final class GameManagerService extends IGameManagerService.Stub { synchronized (mDeviceConfigLock) { config = mConfigs.get(packageName); } - if (config != null) { - int modesBitfield = config.getAvailableGameModesBitfield(); - // Remove UNSUPPORTED to simplify the logic here, since we really just - // want to check if we support selectable game modes - modesBitfield &= ~modeToBitmask(GameManager.GAME_MODE_UNSUPPORTED); - if (!bitFieldContainsModeBitmask(modesBitfield, gameMode)) { - if (bitFieldContainsModeBitmask(modesBitfield, - GameManager.GAME_MODE_STANDARD)) { - // If the current set mode isn't supported, - // but we support STANDARD, then set the mode to STANDARD. - newGameMode = GameManager.GAME_MODE_STANDARD; - } else { - // If we don't support any game modes, then set to UNSUPPORTED - newGameMode = GameManager.GAME_MODE_UNSUPPORTED; - } - } - } else if (gameMode != GameManager.GAME_MODE_UNSUPPORTED) { - // If we have no config for the package, but the configured mode is not - // UNSUPPORTED, then set to UNSUPPORTED - newGameMode = GameManager.GAME_MODE_UNSUPPORTED; - } + final int newGameMode = getNewGameMode(gameMode, config); if (newGameMode != gameMode) { setGameMode(packageName, newGameMode, userId); }