diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 829425c..bac0f60 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3021,16 +3021,7 @@
         <provider android:name=".slices.SettingsSliceProvider"
                   android:authorities="com.android.settings.slices;android.settings.slices"
                   android:exported="true"
-                  android:grantUriPermissions="true">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <category android:name="android.app.slice.category.SLICE" />
-                <data android:scheme="settings"
-                      android:host="com.android.settings.slices" />
-            </intent-filter>
-        </provider>
+                  android:grantUriPermissions="true" />
 
         <receiver
             android:name=".slices.SliceBroadcastReceiver"
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index 7b9acee..d1648e0 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -21,7 +21,6 @@
 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;
 import android.os.StrictMode;
@@ -46,7 +45,6 @@
 import com.android.settingslib.SliceBroadcastRelay;
 import com.android.settingslib.utils.ThreadUtils;
 
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -150,18 +148,6 @@
     }
 
     @Override
-    public Uri onMapIntentToUri(Intent intent) {
-        try {
-            return getContext().getSystemService(SliceManager.class).mapIntentToUri(
-                    SliceDeepLinkSpringBoard.parse(
-                            intent.getData(), getContext().getPackageName()));
-        } catch (URISyntaxException e) {
-            Log.e(TAG, "Uri syntax error, can't map intent to uri.", e);
-            return null;
-        }
-    }
-
-    @Override
     public void onSlicePinned(Uri sliceUri) {
         if (mCustomSliceManager.isValidUri(sliceUri)) {
             final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(sliceUri);
diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
index d633b7a..8d7f44f 100644
--- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
+++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
@@ -21,8 +21,6 @@
 import android.provider.Settings;
 import android.util.Log;
 
-import androidx.annotation.Keep;
-
 import com.android.settings.bluetooth.BluetoothSliceBuilder;
 import com.android.settings.notification.ZenModeSliceBuilder;
 import com.android.settings.overlay.FeatureFactory;
@@ -89,14 +87,6 @@
         }
     }
 
-    @Keep
-    public static Uri createDeepLink(String s) {
-        return new Uri.Builder().scheme(SETTINGS)
-                .authority(SettingsSliceProvider.SLICE_AUTHORITY)
-                .appendQueryParameter(INTENT, s)
-                .build();
-    }
-
     public static Intent parse(Uri uri, String pkg) throws URISyntaxException {
         Intent intent = Intent.parseUri(uri.getQueryParameter(INTENT),
                 Intent.URI_ANDROID_APP_SCHEME);
diff --git a/tests/unit/src/com/android/settings/slices/SliceDeepLinkSpringBoardTest.java b/tests/unit/src/com/android/settings/slices/SliceDeepLinkSpringBoardTest.java
deleted file mode 100644
index 0c5f501..0000000
--- a/tests/unit/src/com/android/settings/slices/SliceDeepLinkSpringBoardTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.slices;
-
-import static com.android.settings.slices.SliceDeepLinkSpringBoard.createDeepLink;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.MediumTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@MediumTest
-public class SliceDeepLinkSpringBoardTest {
-    private Context mContext;
-
-    @Before
-    public void setUp() {
-        mContext = InstrumentationRegistry.getTargetContext();
-    }
-
-    @Test
-    @Presubmit
-    public void launchesDeepLinkIntent_shouldNotCrash() {
-        final Intent deepLinkIntent = getSpringboardIntent(
-                "content://com.android.settings.slices/action/test_slice");
-
-        mContext.startActivity(deepLinkIntent);
-    }
-
-    @Test
-    @Presubmit
-    public void launchesDeepLinkIntent_wifiSlice_shouldNotCrash() {
-        final Intent deepLinkIntent = getSpringboardIntent(
-                CustomSliceRegistry.WIFI_SLICE_URI.toString());
-
-        mContext.startActivity(deepLinkIntent);
-    }
-
-    @Test
-    @Presubmit
-    public void launchesDeepLinkIntent_bluetoothSlice_shouldNotCrash() {
-        final Intent deepLinkIntent = getSpringboardIntent(
-                CustomSliceRegistry.BLUETOOTH_URI.toString());
-
-        mContext.startActivity(deepLinkIntent);
-    }
-
-    @Test
-    @Presubmit
-    public void launchesDeepLinkIntent_dndSlice_shouldNotCrash() {
-        final Intent deepLinkIntent = getSpringboardIntent(
-                CustomSliceRegistry.ZEN_MODE_SLICE_URI.toString());
-
-        mContext.startActivity(deepLinkIntent);
-    }
-
-    @Test
-    @Presubmit
-    public void launchesDeepLinkIntent_locationSlice_shouldNotCrash() {
-        final Intent deepLinkIntent = getSpringboardIntent(
-                CustomSliceRegistry.LOCATION_SLICE_URI.toString());
-
-        mContext.startActivity(deepLinkIntent);
-    }
-
-    private Intent getSpringboardIntent(String uriString) {
-        final Uri uri = createDeepLink(new Intent(SliceDeepLinkSpringBoard.ACTION_VIEW_SLICE)
-                .setPackage(mContext.getPackageName())
-                .putExtra(SliceDeepLinkSpringBoard.EXTRA_SLICE, uriString)
-                .toUri(Intent.URI_ANDROID_APP_SCHEME));
-
-        return new Intent(Intent.ACTION_VIEW)
-                .setData(uri)
-                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-    }
-}
