Fix DND crash from SpringboardActivity

Special case Uris need to explicitly add their intents.
This unfortunately duplicates a list of special-cased Slices,
but I have attached a bug with a plan to address this duplicity in Q.

Change-Id: I346915c32543713d33716422018d7c950cce323d
Fixes: 80065409
Test: atest SliceDeepLinkSpringBoardTest
diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
index 7f1a0f3..4f8ed96 100644
--- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
+++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java
@@ -18,8 +18,16 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.util.Log;
 
+import com.android.settings.bluetooth.BluetoothSliceBuilder;
+import com.android.settings.location.LocationSliceBuilder;
+import com.android.settings.notification.ZenModeSliceBuilder;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.wifi.WifiSliceBuilder;
+import com.android.settings.wifi.calling.WifiCallingSliceHelper;
+
 import java.net.URISyntaxException;
 
 public class SliceDeepLinkSpringBoard extends Activity {
@@ -44,11 +52,26 @@
             if (ACTION_VIEW_SLICE.equals(intent.getAction())) {
                 // This shouldn't matter since the slice is shown instead of the device
                 // index caring about the launch uri.
-                Uri slice = Uri.parse(intent.getStringExtra(EXTRA_SLICE));
-                SlicesDatabaseAccessor slicesDatabaseAccessor = new SlicesDatabaseAccessor(this);
-                // Sadly have to block here because we don't know where to go.
-                final SliceData sliceData = slicesDatabaseAccessor.getSliceDataFromUri(slice);
-                Intent launchIntent = SliceBuilderUtils.getContentIntent(this, sliceData);
+                final Uri slice = Uri.parse(intent.getStringExtra(EXTRA_SLICE));
+                final Intent launchIntent;
+
+                // TODO (b/80263568) Avoid duplicating this list of Slice Uris.
+                if (WifiSliceBuilder.WIFI_URI.equals(slice)) {
+                    launchIntent = WifiSliceBuilder.getIntent(this /* context */);
+                } else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(slice)) {
+                    launchIntent = ZenModeSliceBuilder.getIntent(this /* context */);
+                } else if (BluetoothSliceBuilder.BLUETOOTH_URI.equals(slice)) {
+                    launchIntent = BluetoothSliceBuilder.getIntent(this /* context */);
+                } else if (LocationSliceBuilder.LOCATION_URI.equals(slice)) {
+                    launchIntent = LocationSliceBuilder.getIntent(this /* context */);
+                } else {
+                    final SlicesDatabaseAccessor slicesDatabaseAccessor =
+                            new SlicesDatabaseAccessor(this /* context */);
+                    // Sadly have to block here because we don't know where to go.
+                    final SliceData sliceData = slicesDatabaseAccessor.getSliceDataFromUri(slice);
+                    launchIntent = SliceBuilderUtils.getContentIntent(this, sliceData);
+                }
+
                 startActivity(launchIntent);
             } else {
                 startActivity(intent);
@@ -57,6 +80,10 @@
         } catch (URISyntaxException e) {
             Log.e(TAG, "Error decoding uri", e);
             finish();
+        } catch (IllegalStateException e) {
+            Log.w(TAG, "Couldn't launch Slice intent", e);
+            startActivity(new Intent(Settings.ACTION_SETTINGS));
+            finish();
         }
     }