Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d89332b8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add referrer when launching search intent."

parents e0dde6a6 beedd3ab
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings;

import android.app.ActionBar;
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -286,7 +287,7 @@ public class SettingsActivity extends SettingsBaseActivity
            final Toolbar toolbar = findViewById(R.id.search_action_bar);
            setActionBar(toolbar);
            FeatureFactory.getFactory(this).getSearchFeatureProvider()
                    .initSearchToolbar(this, toolbar);
                    .initSearchToolbar(this, toolbar, SettingsEnums.SETTINGS_HOMEPAGE);
        }

        ActionBar actionBar = getActionBar();
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.homepage;

import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
import android.util.FeatureFlagUtils;
@@ -55,7 +56,7 @@ public class SettingsHomepageActivity extends SettingsBaseActivity {

        final Toolbar toolbar = findViewById(R.id.search_action_bar);
        FeatureFactory.getFactory(this).getSearchFeatureProvider()
                .initSearchToolbar(this /* activity */, toolbar);
                .initSearchToolbar(this /* activity */, toolbar, SettingsEnums.SETTINGS_HOMEPAGE);

        final ImageView avatarView = findViewById(R.id.account_avatar);
        final AvatarViewMixin avatarViewMixin = new AvatarViewMixin(this, avatarView);
+5 −6
Original line number Diff line number Diff line
@@ -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);
}
+18 −0
Original line number Diff line number Diff line
@@ -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();
    }
}
+14 −10
Original line number Diff line number Diff line
@@ -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()) {
Loading