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

Commit c5dba8c3 authored by Jason Chiu's avatar Jason Chiu Committed by Nolen Johnson
Browse files

Replace getCallingActivity() with getLaunchedFromPackage()

getLaunchedFromPackage() reports who launched this Activity or built
PendingIntent used to launch it, whereas getCallingActivity() reports
who will get result of Activity.

Bug: 316891059
Test: robotest, manual
(cherry picked from commit ddc11bc0)
(cherry picked from commit 8bdbb580)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c7a8127d3bb6010617e507c03f7207dd50082953)
Merged-In: If97018c2741caef622f0596bbfeaa42ef1788b78
Change-Id: If97018c2741caef622f0596bbfeaa42ef1788b78
parent 3461210d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ public interface SearchFeatureProvider {
     * @throws IllegalArgumentException when caller is null
     * @throws SecurityException        when caller is not allowed to launch search result page
     */
    void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller)
    void verifyLaunchSearchResultPageCaller(@NonNull Context context, @NonNull String callerPackage)
            throws SecurityException, IllegalArgumentException;

    /**
+9 −11
Original line number Diff line number Diff line
@@ -17,10 +17,11 @@

package com.android.settings.search;

import android.content.ComponentName;
import android.content.Context;
import android.text.TextUtils;

import android.annotation.NonNull;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.indexing.IndexData;
@@ -32,24 +33,21 @@ import java.util.Locale;
 */
public class SearchFeatureProviderImpl implements SearchFeatureProvider {

    private static final String TAG = "SearchFeatureProvider";

    private static final String METRICS_ACTION_SETTINGS_INDEX = "search_synchronous_indexing";
    private DatabaseIndexingManager mDatabaseIndexingManager;
    private SearchIndexableResources mSearchIndexableResources;

    @Override
    public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) {
        if (caller == null) {
    public void verifyLaunchSearchResultPageCaller(@NonNull Context context,
            @NonNull String callerPackage) {
        if (TextUtils.isEmpty(callerPackage)) {
            throw new IllegalArgumentException("ExternalSettingsTrampoline intents "
                    + "must be called with startActivityForResult");
        }
        final String packageName = caller.getPackageName();
        final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName())
                || TextUtils.equals(getSettingsIntelligencePkgName(), packageName);
        final boolean isWhitelistedPackage =
                isSignatureWhitelisted(context, caller.getPackageName());
        if (isSettingsPackage || isWhitelistedPackage) {
        final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName())
                || TextUtils.equals(getSettingsIntelligencePkgName(), callerPackage);
        final boolean isAllowlistedPackage = isSignatureWhitelisted(context, callerPackage);
        if (isSettingsPackage || isAllowlistedPackage) {
            return;
        }
        throw new SecurityException("Search result intents must be called with from a "
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ public class SearchResultTrampoline extends Activity {
        // First make sure caller has privilege to launch a search result page.
        FeatureFactory.getFactory(this)
                .getSearchFeatureProvider()
                .verifyLaunchSearchResultPageCaller(this, getCallingActivity());
                .verifyLaunchSearchResultPageCaller(this, getCallingPackage());
        // Didn't crash, proceed and launch the result as a subsetting.
        final Intent intent = getIntent();

+8 −7
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.widget.Toolbar;

@@ -70,21 +69,23 @@ public class SearchFeatureProviderImplTest {

    @Test(expected = SecurityException.class)
    public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() {
        final ComponentName cn = new ComponentName("pkg", "class");
        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
        final String packageName = "pkg";

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }

    @Test
    public void verifyLaunchSearchResultPageCaller_settingsCaller_shouldNotCrash() {
        final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class");
        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
        final String packageName = mActivity.getPackageName();

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }

    @Test
    public void verifyLaunchSearchResultPageCaller_settingsIntelligenceCaller_shouldNotCrash() {
        final String packageName = mProvider.getSettingsIntelligencePkgName();
        final ComponentName cn = new ComponentName(packageName, "class");
        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }

    @Test