diff --git a/res/values/config.xml b/res/values/config.xml
index f510523..b9a69f1 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -106,6 +106,9 @@
         -->
     </string-array>
 
+    <!-- List of packages that should be whitelisted for slice uri access. Do not translate -->
+    <string-array name="slice_whitelist_package_names" translatable="false"/>
+
     <!-- Whether or not App & Notification screen should display recently used apps -->
     <bool name="config_display_recent_apps">true</bool>
 
diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
index 05f43f6..dc24ed0 100644
--- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java
+++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java
@@ -152,12 +152,20 @@
     }
 
     @VisibleForTesting
+    IVrManager safeGetVrManager() {
+        return IVrManager.Stub.asInterface(ServiceManager.getService(
+                Context.VR_SERVICE));
+    }
+
+    @VisibleForTesting
     boolean isInVrMode() {
-        try {
-            return IVrManager.Stub.asInterface(ServiceManager.getService(Context.VR_SERVICE))
-                    .getVrModeState();
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to check vr mode!", e);
+        IVrManager vrManager = safeGetVrManager();
+        if (vrManager != null) {
+            try {
+                return vrManager.getVrModeState();
+            } catch (RemoteException e) {
+                Log.e(TAG, "Failed to check vr mode!", e);
+            }
         }
         return false;
     }
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index f0439a8..e359477 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -20,6 +20,7 @@
 
 import android.app.slice.SliceManager;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.Uri;
@@ -36,6 +37,7 @@
 import androidx.slice.Slice;
 import androidx.slice.SliceProvider;
 
+import com.android.settings.R;
 import com.android.settings.bluetooth.BluetoothSliceBuilder;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.flashlight.FlashlightSliceBuilder;
@@ -113,6 +115,8 @@
     public static final String EXTRA_SLICE_PLATFORM_DEFINED =
             "com.android.settings.slice.extra.platform";
 
+    private static final KeyValueListParser KEY_VALUE_LIST_PARSER = new KeyValueListParser(',');
+
     @VisibleForTesting
     CustomSliceManager mCustomSliceManager;
 
@@ -125,13 +129,10 @@
     @VisibleForTesting
     Map<Uri, SliceData> mSliceDataCache;
 
-    private final KeyValueListParser mParser;
-
     final Set<Uri> mRegisteredUris = new ArraySet<>();
 
     public SettingsSliceProvider() {
         super(READ_SEARCH_INDEXABLES);
-        mParser = new KeyValueListParser(',');
     }
 
     @Override
@@ -151,6 +152,7 @@
                     SliceDeepLinkSpringBoard.parse(
                             intent.getData(), getContext().getPackageName()));
         } catch (URISyntaxException e) {
+            Log.e(TAG, "Uri syntax error, can't map intent to uri.", e);
             return null;
         }
     }
@@ -319,9 +321,33 @@
         final List<String> keys = mSlicesDatabaseAccessor.getSliceKeys(isPlatformUri);
         descendants.addAll(buildUrisFromKeys(keys, authority));
         descendants.addAll(getSpecialCaseUris(isPlatformUri));
+        grantWhitelistedPackagePermissions(getContext(), descendants);
         return descendants;
     }
 
+    @VisibleForTesting
+    static void grantWhitelistedPackagePermissions(Context context, List<Uri> descendants) {
+        if (descendants == null) {
+            Log.d(TAG, "No descendants to grant permission with, skipping.");
+        }
+        final String[] whitelistPackages =
+                context.getResources().getStringArray(R.array.slice_whitelist_package_names);
+        if (whitelistPackages == null || whitelistPackages.length == 0) {
+            Log.d(TAG, "No packages to whitelist, skipping.");
+            return;
+        } else {
+            Log.d(TAG, String.format(
+                    "Whitelisting %d uris to %d pkgs.",
+                    descendants.size(), whitelistPackages.length));
+        }
+        final SliceManager sliceManager = context.getSystemService(SliceManager.class);
+        for (Uri descendant : descendants) {
+            for (String toPackage : whitelistPackages) {
+                sliceManager.grantSlicePermission(toPackage, descendant);
+            }
+        }
+    }
+
     private List<Uri> buildUrisFromKeys(List<String> keys, String authority) {
         final List<Uri> descendants = new ArrayList<>();
 
@@ -428,7 +454,7 @@
         final Set<String> set = new ArraySet<>();
 
         try {
-            mParser.setString(value);
+            KEY_VALUE_LIST_PARSER.setString(value);
         } catch (IllegalArgumentException e) {
             Log.e(TAG, "Bad Settings Slices Whitelist flags", e);
             return set;
diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index bbbdcc2..2488882 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -67,4 +67,10 @@
     <string-array name="config_settings_slices_accessibility_components" translatable="false">
         <item>fake_package/fake_service</item>
     </string-array>
+
+    <!-- List of packages that should be whitelisted for slice uri access. Do not translate -->
+    <string-array name="slice_whitelist_package_names" translatable="false">
+        <item>com.android.settings.slice_whitelist_package</item>
+    </string-array>
+
 </resources>
diff --git a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
index 4122b14..a22a159 100644
--- a/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/BrightnessLevelPreferenceControllerTest.java
@@ -85,6 +85,12 @@
     }
 
     @Test
+    public void isInVrMode_noVrManager_shouldAlwaysReturnFalse() {
+        doReturn(null).when(mController).safeGetVrManager();
+        assertThat(mController.isInVrMode()).isFalse();
+    }
+
+    @Test
     public void onStart_shouldRegisterObserver() {
         BrightnessLevelPreferenceController controller =
                 new BrightnessLevelPreferenceController(mContext, null);
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index 1ee9230..f7c6bba 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -21,9 +21,12 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -64,6 +67,7 @@
 import org.robolectric.annotation.Implements;
 import org.robolectric.annotation.Resetter;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -477,6 +481,28 @@
         mProvider.onSlicePinned(uri);
     }
 
+    @Test
+    public void grantWhitelistedPackagePermissions_noWhitelist_shouldNotGrant() {
+        final List<Uri> uris = new ArrayList<>();
+        uris.add(Uri.parse("content://settings/slice"));
+
+        mProvider.grantWhitelistedPackagePermissions(mContext, uris);
+
+        verify(mManager, never()).grantSlicePermission(anyString(), any(Uri.class));
+    }
+
+    @Test
+    @Config(qualifiers = "mcc999")
+    public void grantWhitelistedPackagePermissions_hasPackageWhitelist_shouldGrant() {
+        final List<Uri> uris = new ArrayList<>();
+        uris.add(Uri.parse("content://settings/slice"));
+
+        mProvider.grantWhitelistedPackagePermissions(mContext, uris);
+
+        verify(mManager)
+                .grantSlicePermission("com.android.settings.slice_whitelist_package", uris.get(0));
+    }
+
     private void insertSpecialCase(String key) {
         insertSpecialCase(key, true);
     }
