diff options
| -rw-r--r-- | services/core/java/com/android/server/app/GameManagerService.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 1c1d72685cf4..3a789741842f 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -121,7 +121,10 @@ public final class GameManagerService extends IGameManagerService.Stub { static final int REMOVE_SETTINGS = 2; static final int POPULATE_GAME_MODE_SETTINGS = 3; static final int SET_GAME_STATE = 4; + static final int CANCEL_GAME_LOADING_MODE = 5; static final int WRITE_SETTINGS_DELAY = 10 * 1000; // 10 seconds + static final int LOADING_BOOST_MAX_DURATION = 5 * 1000; // 5 seconds + static final PackageOverride COMPAT_ENABLED = new PackageOverride.Builder().setEnabled(true) .build(); static final PackageOverride COMPAT_DISABLED = new PackageOverride.Builder().setEnabled(false) @@ -299,6 +302,10 @@ public final class GameManagerService extends IGameManagerService.Stub { } break; } + case CANCEL_GAME_LOADING_MODE: { + mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, false); + break; + } } } } @@ -1028,9 +1035,22 @@ public final class GameManagerService extends IGameManagerService.Stub { if (gameMode == GameManager.GAME_MODE_UNSUPPORTED) { return; } - final int loadingBoostDuration = getLoadingBoostDuration(packageName, userId); + int loadingBoostDuration = getLoadingBoostDuration(packageName, userId); if (loadingBoostDuration != -1) { - mPowerManagerInternal.setPowerBoost(Mode.GAME_LOADING, loadingBoostDuration); + if (loadingBoostDuration == 0 || loadingBoostDuration > LOADING_BOOST_MAX_DURATION) { + loadingBoostDuration = LOADING_BOOST_MAX_DURATION; + } + if (mHandler.hasMessages(CANCEL_GAME_LOADING_MODE)) { + // The loading mode has already been set and is waiting to be unset. It is not + // required to set the mode again and we should replace the queued cancel + // instruction. + mHandler.removeMessages(CANCEL_GAME_LOADING_MODE); + } else { + mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, true); + } + + mHandler.sendMessageDelayed( + mHandler.obtainMessage(CANCEL_GAME_LOADING_MODE), loadingBoostDuration); } } |