Make sure all game modes are looped.
Previously when switched to use bitfield, we use bit count of 1 to check
all game modes. This patch makes sure all game modes are properly
checked.
Bug: b/188729014
Test: atest GameManagerServiceTests
Change-Id: Ia7a9cb925ba9b26f7ff7136ec60758e28a467573
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index 1aeeda0..f70b0fb 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -387,12 +387,12 @@
* Get an array of a package's available game modes.
*/
public @GameMode int[] getAvailableGameModes() {
-
- int modesBitfield = getAvailableGameModesBitfield();
- int sigBits = Integer.bitCount(modesBitfield);
- int[] modes = new int[sigBits];
+ final int modesBitfield = getAvailableGameModesBitfield();
+ int[] modes = new int[Integer.bitCount(modesBitfield)];
int i = 0;
- for (int mode = 0; mode < sigBits; ++mode) {
+ final int gameModeInHighestBit =
+ Integer.numberOfTrailingZeros(Integer.highestOneBit(modesBitfield));
+ for (int mode = 0; mode <= gameModeInHighestBit; ++mode) {
if (((modesBitfield >> mode) & 1) != 0) {
modes[i++] = mode;
}
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 e7a4c92..4d86c87 100644
--- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
@@ -412,7 +412,7 @@
reportedModes.add(mode);
}
assertEquals(requiredModes.length, reportedModes.size());
- for (int requiredMode : reportedModes) {
+ for (int requiredMode : requiredModes) {
assertTrue("Required game mode not supported: " + requiredMode,
reportedModes.contains(requiredMode));
}