diff --git a/res/values/config.xml b/res/values/config.xml index 7eb25b28691..c4b7bb931a8 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -620,4 +620,10 @@ false + + + + @string/config_settingsintelligence_package_name + android.uid.system:1000 + diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java index 76dfab8491b..8417d8b63a5 100644 --- a/src/com/android/settings/wifi/slice/WifiSlice.java +++ b/src/com/android/settings/wifi/slice/WifiSlice.java @@ -98,7 +98,7 @@ public class WifiSlice implements CustomSliceable { public Slice getSlice() { // If external calling package doesn't have Wi-Fi permission. final boolean isPermissionGranted = - Utils.isSettingsIntelligence(mContext) || isPermissionGranted(mContext); + isCallerExemptUid(mContext) || isPermissionGranted(mContext); final boolean isWifiEnabled = isWifiEnabled(); ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */, isPermissionGranted); @@ -139,6 +139,21 @@ public class WifiSlice implements CustomSliceable { return listBuilder.build(); } + private boolean isCallerExemptUid(Context context) { + final String[] allowedUidNames = context.getResources().getStringArray( + R.array.config_exempt_wifi_permission_uid_name); + final String uidName = + context.getPackageManager().getNameForUid(Binder.getCallingUid()); + Log.d(TAG, "calling uid name : " + uidName); + + for (String allowedUidName : allowedUidNames) { + if (TextUtils.equals(uidName, allowedUidName)) { + return true; + } + } + return false; + } + private static boolean isPermissionGranted(Context settingsContext) { final int callingUid = Binder.getCallingUid(); final String callingPackage = settingsContext.getPackageManager() diff --git a/tests/robotests/src/com/android/settings/wifi/slice/ContextualWifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/ContextualWifiSliceTest.java index 52dcb5282da..d9c726ab058 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/ContextualWifiSliceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/ContextualWifiSliceTest.java @@ -103,6 +103,7 @@ public class ContextualWifiSliceTest { mContext.getString(R.string.config_settingsintelligence_package_name); ShadowBinder.setCallingUid(1); when(mPackageManager.getPackagesForUid(1)).thenReturn(new String[]{siPackageName}); + when(mPackageManager.getNameForUid(1)).thenReturn(siPackageName); ShadowWifiSlice.setWifiPermissible(true); mWifiSlice = new ContextualWifiSlice(mContext); } diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java index 8e42fcd225a..67ab7b49825 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java @@ -109,6 +109,7 @@ public class WifiSliceTest { mSIPackageName = mContext.getString(R.string.config_settingsintelligence_package_name); ShadowBinder.setCallingUid(USER_ID); when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName}); + when(mPackageManager.getNameForUid(USER_ID)).thenReturn(mSIPackageName); ShadowWifiSlice.setWifiPermissible(true); mWifiSlice = new WifiSlice(mContext, mWifiRestriction); } @@ -116,6 +117,7 @@ public class WifiSliceTest { @Test public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() { when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName}); + when(mPackageManager.getNameForUid(USER_ID)).thenReturn(mSIPackageName); ShadowWifiSlice.setWifiPermissible(false); final Slice wifiSlice = mWifiSlice.getSlice(); @@ -131,6 +133,7 @@ public class WifiSliceTest { @Test public void getWifiSlice_notFromSIPackageAndWithWifiPermission_shouldHaveTitleAndToggle() { when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{"com.test"}); + when(mPackageManager.getNameForUid(USER_ID)).thenReturn("com.test"); ShadowWifiSlice.setWifiPermissible(true); final Slice wifiSlice = mWifiSlice.getSlice(); @@ -145,6 +148,7 @@ public class WifiSliceTest { @Test public void getWifiSlice_notFromSIPackageAndWithoutWifiPermission_shouldReturnNoToggle() { when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{"com.test"}); + when(mPackageManager.getNameForUid(USER_ID)).thenReturn("com.test"); ShadowWifiSlice.setWifiPermissible(false); final Slice wifiSlice = mWifiSlice.getSlice();