diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 46d3ff1273ec5..d7386183e905c 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -1762,7 +1762,9 @@ public final class GameManagerService extends IGameManagerService.Stub { /** * Returns the string listing all the interventions currently set to a game. */ + @RequiresPermission(Manifest.permission.QUERY_ALL_PACKAGES) public String getInterventionList(String packageName, int userId) { + checkPermission(Manifest.permission.QUERY_ALL_PACKAGES); final GamePackageConfiguration packageConfig = getConfig(packageName, userId); final StringBuilder listStrSb = new StringBuilder(); if (packageConfig == null) { 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 d3fa92ce68d71..94cfa42868b0c 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -262,6 +262,16 @@ public class GameManagerServiceTests { mTestLooper.dispatchAll(); } + private void mockQueryAllPackageGranted() { + mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES, + PackageManager.PERMISSION_GRANTED); + } + + private void mockQueryAllPackageDenied() { + mMockContext.setPermission(Manifest.permission.QUERY_ALL_PACKAGES, + PackageManager.PERMISSION_DENIED); + } + private void mockManageUsersGranted() { mMockContext.setPermission(Manifest.permission.MANAGE_USERS, PackageManager.PERMISSION_GRANTED); @@ -2180,4 +2190,22 @@ public class GameManagerServiceTests { verify(mMockPowerManager, never()).setPowerMode(anyInt(), anyBoolean()); assertFalse(gameManagerService.mHandler.hasMessages(CANCEL_GAME_LOADING_MODE)); } + + @Test + public void testGetInterventionList_permissionDenied() throws Exception { + String configString = "mode=2,downscaleFactor=0.5"; + when(DeviceConfig.getProperty(anyString(), anyString())) + .thenReturn(configString); + mockQueryAllPackageDenied(); + GameManagerService gameManagerService = createServiceAndStartUser(USER_ID_1); + assertThrows(SecurityException.class, + () -> gameManagerService.getInterventionList(mPackageName, USER_ID_1)); + + mockQueryAllPackageGranted(); + String expectedInterventionListOutput = "\n[Name:" + mPackageName + + " Modes: {2=[Game Mode:2,Scaling:0.5,Use Angle:false," + + "Fps:,Loading Boost Duration:-1]}]"; + assertEquals(expectedInterventionListOutput, + gameManagerService.getInterventionList(mPackageName, USER_ID_1)); + } }