Search experience improvement for large screen

- Support fragment and direct link in SearchResultTrampoline
- Start activity for SI case and start deep link trampoline for others
- Disable menu highlight whenever the search bar is clicked
- Don't overwrite SettingsApplication's homepage activity in
  SliceDeepLinkHomepageActivity
- Scroll to highlighted menu entry after homepage is loaded to prevent
  UI overlapping

Bug: 201724410
Test: manual, robotest build pass
Change-Id: I5115d17d829e85036000da2e80f0e5b0598c733f
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index df30d8b..9c81895 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -255,7 +255,8 @@
         // Should happen before any call to getIntent()
         getMetaData();
         final Intent intent = getIntent();
-        if (launchHomepageForTwoPaneDeepLink(intent)) {
+        if (shouldShowTwoPaneDeepLink(intent)) {
+            launchHomepageForTwoPaneDeepLink(intent);
             finishAndRemoveTask();
             return;
         }
@@ -368,16 +369,13 @@
             intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
     }
 
-    /** Returns true if the Activity is started by a deep link intent for large screen devices. */
-    private boolean launchHomepageForTwoPaneDeepLink(Intent intent) {
-        if (!shouldShowTwoPaneDeepLink(intent)) {
-            return false;
-        }
-
+    /**
+     * Returns the deep link trampoline intent for large screen devices.
+     */
+    public static Intent getTrampolineIntent(Intent intent, String highlightMenuKey) {
         final Intent detailIntent = new Intent(intent);
         // It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it.
         final Intent trampolineIntent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
-
         trampolineIntent.replaceExtras(detailIntent);
 
         // Relay detail intent data to prevent failure of Intent#ParseUri.
@@ -391,22 +389,27 @@
         trampolineIntent.putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI,
                 detailIntent.toUri(Intent.URI_INTENT_SCHEME));
 
-        if (detailIntent.getBooleanExtra(EXTRA_IS_FROM_SLICE, false)) {
-            trampolineIntent.setClass(this, SliceDeepLinkHomepageActivity.class);
+        trampolineIntent.putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY,
+                highlightMenuKey);
+        trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+        return trampolineIntent;
+    }
+
+    private void launchHomepageForTwoPaneDeepLink(Intent intent) {
+        final Intent trampolineIntent;
+        if (intent.getBooleanExtra(EXTRA_IS_FROM_SLICE, false)) {
             // Get menu key for slice deep link case.
-            final String highlightMenuKey = detailIntent.getStringExtra(
+            final String highlightMenuKey = intent.getStringExtra(
                     EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY);
             if (!TextUtils.isEmpty(highlightMenuKey)) {
                 mHighlightMenuKey = highlightMenuKey;
             }
+            trampolineIntent = getTrampolineIntent(intent, mHighlightMenuKey);
+            trampolineIntent.setClass(this, SliceDeepLinkHomepageActivity.class);
+        } else {
+            trampolineIntent = getTrampolineIntent(intent, mHighlightMenuKey);
         }
-
-        trampolineIntent.putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY,
-                mHighlightMenuKey);
-        trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         startActivity(trampolineIntent);
-
-        return true;
     }
 
     private boolean shouldShowTwoPaneDeepLink(Intent intent) {