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

Commit ddc11bc0 authored by Jason Chiu's avatar Jason Chiu
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
Change-Id: If97018c2741caef622f0596bbfeaa42ef1788b78
Merged-In: If97018c2741caef622f0596bbfeaa42ef1788b78
(cherry picked from commit 901880a1)
parent a10cad44
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,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;

    /**
+8 −10
Original line number Diff line number Diff line
@@ -17,13 +17,14 @@

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 androidx.annotation.NonNull;

import com.android.settingslib.search.SearchIndexableResources;
import com.android.settingslib.search.SearchIndexableResourcesMobile;

@@ -32,21 +33,18 @@ import com.android.settingslib.search.SearchIndexableResourcesMobile;
 */
public class SearchFeatureProviderImpl implements SearchFeatureProvider {

    private static final String TAG = "SearchFeatureProvider";

    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(context), packageName);
        final boolean isAllowlistedPackage =
                isSignatureAllowlisted(context, caller.getPackageName());
        final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName())
                || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage);
        final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage);
        if (isSettingsPackage || isAllowlistedPackage) {
            return;
        }
+6 −7
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@@ -52,11 +51,11 @@ public class SearchResultTrampoline extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ComponentName callingActivity = getCallingActivity();
        final String callerPackage = getLaunchedFromPackage();
        // First make sure caller has privilege to launch a search result page.
        FeatureFactory.getFactory(this)
                .getSearchFeatureProvider()
                .verifyLaunchSearchResultPageCaller(this, callingActivity);
                .verifyLaunchSearchResultPageCaller(this, callerPackage);
        // Didn't crash, proceed and launch the result as a subsetting.
        Intent intent = getIntent();
        final String highlightMenuKey = intent.getStringExtra(
@@ -105,7 +104,7 @@ public class SearchResultTrampoline extends Activity {
        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)
                || ActivityEmbeddingUtils.isAlreadyEmbedded(this)) {
            startActivity(intent);
        } else if (isSettingsIntelligence(callingActivity)) {
        } else if (isSettingsIntelligence(callerPackage)) {
            if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SETTINGS_SEARCH_ALWAYS_EXPAND)) {
                startActivity(SettingsActivity.getTrampolineIntent(intent, highlightMenuKey)
                        .setClass(this, DeepLinkHomepageActivityInternal.class)
@@ -138,9 +137,9 @@ public class SearchResultTrampoline extends Activity {
        finish();
    }

    private boolean isSettingsIntelligence(ComponentName callingActivity) {
        return callingActivity != null && TextUtils.equals(
                callingActivity.getPackageName(),
    private boolean isSettingsIntelligence(String callerPackage) {
        return TextUtils.equals(
                callerPackage,
                FeatureFactory.getFactory(this).getSearchFeatureProvider()
                        .getSettingsIntelligencePkgName(this));
    }
+8 −7
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ package com.android.settings.search;
import static com.google.common.truth.Truth.assertThat;

import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
@@ -136,20 +135,22 @@ 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(mActivity);
        final ComponentName cn = new ComponentName(packageName, "class");
        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }
}