Merge "Settings: Start search result deep link in same task" into main

This commit is contained in:
Treehugger Robot
2025-03-19 01:02:31 -07:00
committed by Android (Google) Code Review
5 changed files with 114 additions and 6 deletions

View File

@@ -162,6 +162,12 @@ public class SettingsActivity extends SettingsBaseActivity
public static final String EXTRA_SHOW_FRAGMENT_TAB =
":settings:show_fragment_tab";
/**
* Whether the settings homepage activity is initiated from a search result deeplink.
*/
public static final String EXTRA_IS_DEEPLINK_HOME_STARTED_FROM_SEARCH =
":settings:is_deeplink_home_started_from_search";
public static final String META_DATA_KEY_FRAGMENT_CLASS =
"com.android.settings.FRAGMENT_CLASS";

View File

@@ -24,7 +24,9 @@ import android.content.pm.UserInfo
import android.provider.Settings
import android.util.Log
import com.android.settings.SettingsActivity
import com.android.settings.SettingsActivity.EXTRA_IS_DEEPLINK_HOME_STARTED_FROM_SEARCH
import com.android.settings.Utils
import com.android.settings.flags.Flags
import com.android.settings.homepage.DeepLinkHomepageActivityInternal
import com.android.settings.homepage.SettingsHomepageActivity
import com.android.settings.password.PasswordUtils
@@ -94,6 +96,28 @@ object EmbeddedDeepLinkUtils {
}
}
/**
* Returns the deep link trampoline intent for settings search results for large screen devices.
*/
@JvmStatic
fun getTrampolineIntentForSearchResult(
context: Context,
intent: Intent,
highlightMenuKey: String?
): Intent {
return getTrampolineIntent(intent, highlightMenuKey).apply {
if (Flags.settingsSearchResultDeepLinkInSameTask()) {
// Ensure the deep link intent does not include FLAG_ACTIVITY_NEW_TASK which
// causes the search result deep link to open in a separate window.
removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
putExtra(EXTRA_IS_DEEPLINK_HOME_STARTED_FROM_SEARCH, true)
} else {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
}
setClass(context, DeepLinkHomepageActivityInternal::class.java)
}
}
/**
* Returns whether the user is a sub profile.

View File

@@ -20,6 +20,7 @@ import static android.provider.Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY
import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY;
import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI;
import static com.android.settings.SettingsActivity.EXTRA_IS_DEEPLINK_HOME_STARTED_FROM_SEARCH;
import static com.android.settings.SettingsActivity.EXTRA_USER_HANDLE;
import android.animation.LayoutTransition;
@@ -232,7 +233,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements
}
}
if (!isTaskRoot) {
final boolean isDeepLinkStartedFromSearch = getIntent().getBooleanExtra(
EXTRA_IS_DEEPLINK_HOME_STARTED_FROM_SEARCH, false /* defaultValue */);
if (!isTaskRoot && !isDeepLinkStartedFromSearch) {
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
Log.i(TAG, "Activity has been started, finishing");
} else {

View File

@@ -19,6 +19,7 @@ package com.android.settings.search;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB;
import static com.android.settings.activityembedding.EmbeddedDeepLinkUtils.getTrampolineIntent;
import static com.android.settings.activityembedding.EmbeddedDeepLinkUtils.getTrampolineIntentForSearchResult;
import android.app.Activity;
import android.content.Intent;
@@ -35,7 +36,6 @@ import com.android.settings.SubSettings;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.core.FeatureFlags;
import com.android.settings.homepage.DeepLinkHomepageActivityInternal;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settings.overlay.FeatureFactory;
@@ -107,10 +107,7 @@ public class SearchResultTrampoline extends Activity {
startActivity(intent);
} else if (isSettingsIntelligence(callerPackage)) {
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SETTINGS_SEARCH_ALWAYS_EXPAND)) {
startActivity(getTrampolineIntent(intent, highlightMenuKey)
.setClass(this, DeepLinkHomepageActivityInternal.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));
startActivity(getTrampolineIntentForSearchResult(this, intent, highlightMenuKey));
} else {
// Register SplitPairRule for SubSettings, set clearTop false to prevent unexpected
// back navigation behavior.