diff --git a/res/values/config.xml b/res/values/config.xml index 4b380446540..e29b3b27993 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -201,6 +201,9 @@ + + + diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index 872016005a3..397893e2ef7 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -29,6 +29,7 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Binder; +import android.os.Build; import android.os.StrictMode; import android.os.UserManager; import android.provider.Settings; @@ -388,19 +389,30 @@ public class SettingsSliceProvider extends SliceProvider { if (descendants == null) { Log.d(TAG, "No descendants to grant permission with, skipping."); } - final String[] allowlistPackages = + final List allowlist = new ArrayList<>(); + final String[] packages = context.getResources().getStringArray(R.array.slice_allowlist_package_names); - if (allowlistPackages == null || allowlistPackages.length == 0) { + if (packages != null) { + allowlist.addAll(Arrays.asList(packages)); + } + if (Build.IS_DEBUGGABLE) { + final String[] devPackages = context.getResources().getStringArray( + R.array.slice_allowlist_package_names_for_dev); + if (devPackages != null) { + allowlist.addAll(Arrays.asList(devPackages)); + } + } + if (allowlist.size() == 0) { Log.d(TAG, "No packages to allowlist, skipping."); return; } else { Log.d(TAG, String.format( "Allowlisting %d uris to %d pkgs.", - descendants.size(), allowlistPackages.length)); + descendants.size(), allowlist.size())); } final SliceManager sliceManager = context.getSystemService(SliceManager.class); for (Uri descendant : descendants) { - for (String toPackage : allowlistPackages) { + for (String toPackage : allowlist) { sliceManager.grantSlicePermission(toPackage, descendant); } } diff --git a/tests/robotests/res/values-mcc998/config.xml b/tests/robotests/res/values-mcc998/config.xml index 6572b1485b5..18174983a1f 100644 --- a/tests/robotests/res/values-mcc998/config.xml +++ b/tests/robotests/res/values-mcc998/config.xml @@ -17,4 +17,7 @@ + + + diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml index 2183b47a37a..c5b01c93d28 100644 --- a/tests/robotests/res/values-mcc999/config.xml +++ b/tests/robotests/res/values-mcc999/config.xml @@ -86,6 +86,11 @@ com.android.settings.slice_allowlist_package + + + com.android.settings.slice_allowlist_package_dev + + test@test.test diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java index ed2359a1df2..9a87290b881 100644 --- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java +++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java @@ -80,6 +80,7 @@ import org.robolectric.annotation.Resetter; import org.robolectric.shadow.api.Shadow; import org.robolectric.shadows.ShadowAccessibilityManager; import org.robolectric.shadows.ShadowBinder; +import org.robolectric.shadows.ShadowBuild; import org.robolectric.shadows.ShadowPackageManager; import java.util.ArrayList; @@ -647,6 +648,7 @@ public class SettingsSliceProviderTest { @Test @Config(qualifiers = "mcc999") public void grantAllowlistedPackagePermissions_hasPackageAllowlist_shouldGrant() { + ShadowBuild.setDebuggable(false); final List uris = new ArrayList<>(); uris.add(Uri.parse("content://settings/slice")); @@ -654,6 +656,23 @@ public class SettingsSliceProviderTest { verify(mManager) .grantSlicePermission("com.android.settings.slice_allowlist_package", uris.get(0)); + verify(mManager, never()) + .grantSlicePermission("com.android.settings.slice_allowlist_package_dev", + uris.get(0)); + } + + @Test + @Config(qualifiers = "mcc999") + public void grantAllowlistedPackagePermissions_hasPackageAllowlistAndDebuggable_shouldGrant() { + ShadowBuild.setDebuggable(true); + final List uris = new ArrayList<>(); + uris.add(Uri.parse("content://settings/slice")); + + SettingsSliceProvider.grantAllowlistedPackagePermissions(mContext, uris); + + verify(mManager) + .grantSlicePermission("com.android.settings.slice_allowlist_package_dev", + uris.get(0)); } @Test