RESTRICT AUTOMERGE Make bluetooth not discoverable via SliceDeepLinkTrampoline

- Don't let device be discovered when the user launch "Connected Devices
  settings" through SliceDeepLinkTrampoline.

Bug: 228450811
Test: make -j42 RunSettingsRoboTests and use test apk to manually test
to verify the device is not discoversable when open "Connected settings"
through test apk.

Change-Id: I5490b58675b1fd9fc36305766867f65caa6ccb6c
(cherry picked from commit 205752dcf2062eb3deeb7f3b7d1eb8af7d8b2634)
(cherry picked from commit 1c4142e1aea6236b8058377ecdc9d0575fca68ee)
Merged-In: I5490b58675b1fd9fc36305766867f65caa6ccb6c
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index c8eb488..7e6eefe 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -39,6 +39,7 @@
     private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
     private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final String SLICE_ACTION = "com.android.settings.SEARCH_RESULT_TRAMPOLINE";
 
     @VisibleForTesting
     static final String KEY_CONNECTED_DEVICES = "connected_device_list";
@@ -72,8 +73,10 @@
                 SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
         String callingAppPackageName = PasswordUtils.getCallingAppPackageName(
                 getActivity().getActivityToken());
+        String action = getIntent() != null ? getIntent().getAction() : "";
         if (DEBUG) {
-            Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName);
+            Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName
+                    + ", action : " + action);
         }
         use(AvailableMediaDeviceGroupController.class).init(this);
         use(ConnectedDeviceGroupController.class).init(this);
@@ -81,9 +84,15 @@
         use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
                 ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
                 : null);
-        use(DiscoverableFooterPreferenceController.class).setAlwaysDiscoverable(
-                TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
-                        || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName));
+        use(DiscoverableFooterPreferenceController.class)
+                .setAlwaysDiscoverable(isAlwaysDiscoverable(callingAppPackageName, action));
+    }
+
+    @VisibleForTesting
+    boolean isAlwaysDiscoverable(String callingAppPackageName, String action) {
+        return TextUtils.equals(SLICE_ACTION, action) ? false
+                : TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
+                || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName);
     }
 
     /**
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
index 97d5485..5f0f2b9 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
@@ -54,16 +54,24 @@
     private static final String KEY_DISCOVERABLE_FOOTER = "discoverable_footer";
     private static final String KEY_SEE_ALL = "previously_connected_devices_see_all";
     private static final String KEY_ADD_BT_DEVICES = "add_bt_devices";
+    private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
+    private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
+    private static final String SLICE_ACTION = "com.android.settings.SEARCH_RESULT_TRAMPOLINE";
+    private static final String TEST_APP_NAME = "com.testapp.settings";
+    private static final String TEST_ACTION = "com.testapp.settings.ACTION_START";
+
 
     @Mock
     private PackageManager mPackageManager;
     private Context mContext;
+    private ConnectedDeviceDashboardFragment mFragment;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = spy(RuntimeEnvironment.application);
+        mFragment = new ConnectedDeviceDashboardFragment();
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
     }
@@ -88,6 +96,26 @@
     }
 
     @Test
+    public void isAlwaysDiscoverable_callingAppIsNotFromSystemApp_returnsFalse() {
+        assertThat(mFragment.isAlwaysDiscoverable(TEST_APP_NAME, TEST_ACTION)).isFalse();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_callingAppIsFromSettings_returnsTrue() {
+        assertThat(mFragment.isAlwaysDiscoverable(SETTINGS_PACKAGE_NAME, TEST_ACTION)).isTrue();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_callingAppIsFromSystemUI_returnsTrue() {
+        assertThat(mFragment.isAlwaysDiscoverable(SYSTEMUI_PACKAGE_NAME, TEST_ACTION)).isTrue();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_actionIsFromSlice_returnsFalse() {
+        assertThat(mFragment.isAlwaysDiscoverable(SYSTEMUI_PACKAGE_NAME, SLICE_ACTION)).isFalse();
+    }
+
+    @Test
     public void getPreferenceControllers_containSlicePrefController() {
         final List<BasePreferenceController> controllers =
                 PreferenceControllerListHelper.getPreferenceControllersFromXml(mContext,