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

Commit ff98aac5 authored by Jason Chiu's avatar Jason Chiu Committed by Android (Google) Code Review
Browse files

Merge "Replace getCallingActivity() with getLaunchedFromPackage()" into main

parents 192f95ee 901880a1
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -56,7 +56,7 @@ public interface SearchFeatureProvider {
     * @throws IllegalArgumentException when caller is null
     * @throws IllegalArgumentException when caller is null
     * @throws SecurityException        when caller is not allowed to launch search result page
     * @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;
            throws SecurityException, IllegalArgumentException;


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


package com.android.settings.search;
package com.android.settings.search;


import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.net.Uri;
import android.net.Uri;
import android.provider.Settings;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.TextUtils;


import androidx.annotation.NonNull;

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


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


    private static final String TAG = "SearchFeatureProvider";

    private SearchIndexableResources mSearchIndexableResources;
    private SearchIndexableResources mSearchIndexableResources;


    @Override
    @Override
    public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) {
    public void verifyLaunchSearchResultPageCaller(@NonNull Context context,
        if (caller == null) {
            @NonNull String callerPackage) {
        if (TextUtils.isEmpty(callerPackage)) {
            throw new IllegalArgumentException("ExternalSettingsTrampoline intents "
            throw new IllegalArgumentException("ExternalSettingsTrampoline intents "
                    + "must be called with startActivityForResult");
                    + "must be called with startActivityForResult");
        }
        }
        final String packageName = caller.getPackageName();
        final boolean isSettingsPackage = TextUtils.equals(callerPackage, context.getPackageName())
        final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName())
                || TextUtils.equals(getSettingsIntelligencePkgName(context), callerPackage);
                || TextUtils.equals(getSettingsIntelligencePkgName(context), packageName);
        final boolean isAllowlistedPackage = isSignatureAllowlisted(context, callerPackage);
        final boolean isAllowlistedPackage =
                isSignatureAllowlisted(context, caller.getPackageName());
        if (isSettingsPackage || isAllowlistedPackage) {
        if (isSettingsPackage || isAllowlistedPackage) {
            return;
            return;
        }
        }
+6 −7
Original line number Original line Diff line number Diff line
@@ -21,7 +21,6 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB;
import static com.android.settings.activityembedding.EmbeddedDeepLinkUtils.getTrampolineIntent;
import static com.android.settings.activityembedding.EmbeddedDeepLinkUtils.getTrampolineIntent;


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


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


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


import android.app.settings.SettingsEnums;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
@@ -131,20 +130,22 @@ public class SearchFeatureProviderImplTest {


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

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }
    }


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

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }
    }


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

        mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
        mProvider.verifyLaunchSearchResultPageCaller(mActivity, packageName);
    }
    }
}
}