Add referrer when launching search intent.
Bug: 123294739 Test: robotests Change-Id: I600abf1d764e828d52f3b8d35ad24cdc94dfba01
This commit is contained in:
@@ -25,7 +25,6 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toolbar;
|
||||
@@ -40,7 +39,6 @@ import com.android.settingslib.search.SearchIndexableResources;
|
||||
*/
|
||||
public interface SearchFeatureProvider {
|
||||
|
||||
Intent SEARCH_UI_INTENT = new Intent(Settings.ACTION_APP_SEARCH_SETTINGS);
|
||||
int REQUEST_CODE = 0;
|
||||
|
||||
/**
|
||||
@@ -64,7 +62,7 @@ public interface SearchFeatureProvider {
|
||||
/**
|
||||
* Initializes the search toolbar.
|
||||
*/
|
||||
default void initSearchToolbar(Activity activity, Toolbar toolbar) {
|
||||
default void initSearchToolbar(Activity activity, Toolbar toolbar, int pageId) {
|
||||
if (activity == null || toolbar == null) {
|
||||
return;
|
||||
}
|
||||
@@ -87,9 +85,8 @@ public interface SearchFeatureProvider {
|
||||
navView.setBackground(null);
|
||||
|
||||
toolbar.setOnClickListener(tb -> {
|
||||
final Intent intent = SEARCH_UI_INTENT;
|
||||
intent.setPackage(getSettingsIntelligencePkgName(activity));
|
||||
final Context context = activity.getApplicationContext();
|
||||
final Intent intent = buildSearchIntent(context, pageId);
|
||||
|
||||
if (activity.getPackageManager().queryIntentActivities(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
|
||||
@@ -97,10 +94,12 @@ public interface SearchFeatureProvider {
|
||||
}
|
||||
|
||||
FeatureFactory.getFactory(context).getSlicesFeatureProvider()
|
||||
.indexSliceDataAsync(activity.getApplicationContext());
|
||||
.indexSliceDataAsync(context);
|
||||
FeatureFactory.getFactory(context).getMetricsFeatureProvider()
|
||||
.action(context, SettingsEnums.ACTION_SEARCH_RESULTS);
|
||||
activity.startActivityForResult(intent, REQUEST_CODE);
|
||||
});
|
||||
}
|
||||
|
||||
Intent buildSearchIntent(Context context, int pageId);
|
||||
}
|
||||
|
@@ -19,6 +19,9 @@ package com.android.settings.search;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.settingslib.search.SearchIndexableResources;
|
||||
@@ -59,7 +62,22 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
|
||||
return mSearchIndexableResources;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Intent buildSearchIntent(Context context, int pageId) {
|
||||
return new Intent(Settings.ACTION_APP_SEARCH_SETTINGS)
|
||||
.setPackage(getSettingsIntelligencePkgName(context))
|
||||
.putExtra(Intent.EXTRA_REFERRER, buildReferrer(context, pageId));
|
||||
}
|
||||
|
||||
protected boolean isSignatureWhitelisted(Context context, String callerPackage) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Uri buildReferrer(Context context, int pageId) {
|
||||
return new Uri.Builder()
|
||||
.scheme("android-app")
|
||||
.authority(context.getPackageName())
|
||||
.path(String.valueOf(pageId))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@@ -30,11 +30,10 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.core.InstrumentedFragment;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.search.SearchFeatureProvider;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
import com.android.settingslib.core.lifecycle.ObservableFragment;
|
||||
import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment;
|
||||
import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
|
||||
|
||||
public class SearchMenuController implements LifecycleObserver, OnCreateOptionsMenu {
|
||||
@@ -42,17 +41,21 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM
|
||||
public static final String NEED_SEARCH_ICON_IN_ACTION_BAR = "need_search_icon_in_action_bar";
|
||||
|
||||
private final Fragment mHost;
|
||||
private final int mPageId;
|
||||
|
||||
public static void init(@NonNull ObservablePreferenceFragment host) {
|
||||
host.getSettingsLifecycle().addObserver(new SearchMenuController(host));
|
||||
public static void init(@NonNull InstrumentedPreferenceFragment host) {
|
||||
host.getSettingsLifecycle().addObserver(
|
||||
new SearchMenuController(host, host.getMetricsCategory()));
|
||||
}
|
||||
|
||||
public static void init(@NonNull ObservableFragment host) {
|
||||
host.getSettingsLifecycle().addObserver(new SearchMenuController(host));
|
||||
public static void init(@NonNull InstrumentedFragment host) {
|
||||
host.getSettingsLifecycle().addObserver(
|
||||
new SearchMenuController(host, host.getMetricsCategory()));
|
||||
}
|
||||
|
||||
private SearchMenuController(@NonNull Fragment host) {
|
||||
private SearchMenuController(@NonNull Fragment host, int pageId) {
|
||||
mHost = host;
|
||||
mPageId = pageId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -79,8 +82,9 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM
|
||||
searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
|
||||
searchItem.setOnMenuItemClickListener(target -> {
|
||||
final Intent intent = SearchFeatureProvider.SEARCH_UI_INTENT;
|
||||
intent.setPackage(SettingsIntelligencePkgName);
|
||||
final Intent intent = FeatureFactory.getFactory(context)
|
||||
.getSearchFeatureProvider()
|
||||
.buildSearchIntent(context, mPageId);
|
||||
|
||||
if (context.getPackageManager().queryIntentActivities(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
|
||||
|
Reference in New Issue
Block a user