From b4ade2ad539d8ce58debdc07a879dbbb5aee76bb Mon Sep 17 00:00:00 2001 From: Peiyong Lin Date: Thu, 20 May 2021 09:18:37 +0000 Subject: [PATCH] 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 --- .../com/android/server/app/GameManagerService.java | 10 +++++----- .../android/server/app/GameManagerServiceTests.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 1aeeda0c41882..f70b0fb1d2077 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 @@ public final class GameManagerService extends IGameManagerService.Stub { * 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 e7a4c92da15cd..4d86c8716bf1f 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 @@ public class GameManagerServiceTests { 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)); }