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
This commit is contained in:
Jason Chiu
2021-10-25 14:11:16 +08:00
parent 6821b6be32
commit e427cc6752
9 changed files with 176 additions and 57 deletions

View File

@@ -19,7 +19,6 @@ package com.android.settings.search;
import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO;
import android.annotation.NonNull;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.ComponentName;
import android.content.Context;
@@ -30,8 +29,12 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toolbar;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.search.SearchIndexableResources;
@@ -66,7 +69,7 @@ public interface SearchFeatureProvider {
/**
* Initializes the search toolbar.
*/
default void initSearchToolbar(Activity activity, Toolbar toolbar, int pageId) {
default void initSearchToolbar(FragmentActivity activity, Toolbar toolbar, int pageId) {
if (activity == null || toolbar == null) {
return;
}
@@ -91,7 +94,8 @@ public interface SearchFeatureProvider {
toolbar.setOnClickListener(tb -> {
final Context context = activity.getApplicationContext();
final Intent intent = buildSearchIntent(context, pageId);
final Intent intent = buildSearchIntent(context, pageId)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (activity.getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
@@ -103,8 +107,19 @@ public interface SearchFeatureProvider {
FeatureFactory.getFactory(context).getMetricsFeatureProvider()
.logSettingsTileClick(KEY_HOMEPAGE_SEARCH_BAR, pageId);
final Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(activity).toBundle();
activity.startActivity(intent, bundle);
if (ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
final TopLevelSettings fragment = (TopLevelSettings) activity
.getSupportFragmentManager().findFragmentById(R.id.main_content);
if (fragment != null) {
fragment.disableMenuHighlight();
}
activity.startActivity(intent);
} else {
final Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(activity)
.toBundle();
activity.startActivity(intent, bundle);
}
});
}