Add referrer when launching search intent.

Bug: 123294739
Test: robotests
Change-Id: I600abf1d764e828d52f3b8d35ad24cdc94dfba01
This commit is contained in:
Fan Zhang
2019-01-29 13:52:12 -08:00
parent c52a581bb7
commit beedd3abe5
7 changed files with 77 additions and 29 deletions

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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()) {