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

Commit 631c67dc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add package name check for the calling app" into sc-v2-dev am: 12b7fd54

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16062219

Change-Id: I248616eaed0c9c3d19612d702b97e851f1847e2a
parents d7bd3863 12b7fd54
Loading
Loading
Loading
Loading
+37 −4
Original line number Diff line number Diff line
@@ -16,9 +16,14 @@

package com.android.settings.wifi.addappnetworks;

import android.app.ActivityManager;
import android.app.IActivityManager;
import android.content.Intent;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
@@ -48,12 +53,17 @@ public class AddAppNetworksActivity extends FragmentActivity {

    @VisibleForTesting
    final Bundle mBundle = new Bundle();
    @VisibleForTesting
    IActivityManager mActivityManager = ActivityManager.getService();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_panel);
        showAddNetworksFragment();
        if (!showAddNetworksFragment()) {
            finish();
            return;
        }
        getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));

        // Move the window to the bottom of screen, and make it take up the entire screen width.
@@ -67,13 +77,22 @@ public class AddAppNetworksActivity extends FragmentActivity {
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        showAddNetworksFragment();
        if (!showAddNetworksFragment()) {
            finish();
            return;
        }
    }

    @VisibleForTesting
    void showAddNetworksFragment() {
    protected boolean showAddNetworksFragment() {
        String packageName = getCallingAppPackageName();
        if (TextUtils.isEmpty(packageName)) {
            Log.d(TAG, "Package name is null");
            return false;
        }

        // TODO: Check the new intent status.
        mBundle.putString(KEY_CALLING_PACKAGE_NAME, getCallingPackage());
        mBundle.putString(KEY_CALLING_PACKAGE_NAME, packageName);
        mBundle.putParcelableArrayList(Settings.EXTRA_WIFI_NETWORK_LIST,
                getIntent().getParcelableArrayListExtra(Settings.EXTRA_WIFI_NETWORK_LIST));

@@ -86,5 +105,19 @@ public class AddAppNetworksActivity extends FragmentActivity {
        } else {
            ((AddAppNetworksFragment) fragment).createContent(mBundle);
        }

        return true;
    }

    @VisibleForTesting
    protected String getCallingAppPackageName() {
        String packageName;
        try {
            packageName = mActivityManager.getLaunchedFromPackage(getActivityToken());
        } catch (RemoteException e) {
            Log.e(TAG, "Can not get the package from activity manager");
            return null;
        }
        return packageName;
    }
}
+53 −10
Original line number Diff line number Diff line
@@ -18,27 +18,70 @@ package com.android.settings.wifi.addappnetworks;

import static com.google.common.truth.Truth.assertThat;

import static org.robolectric.Shadows.shadowOf;
import android.annotation.Nullable;
import android.app.IActivityManager;
import android.os.RemoteException;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

@RunWith(RobolectricTestRunner.class)
public class AddAppNetworksActivityTest {

    @Mock
    private IActivityManager mIActivityManager;

    private AddAppNetworksActivity mActivity;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mActivity = Robolectric.buildActivity(AddAppNetworksActivity.class).create().get();
        mActivity.mActivityManager = mIActivityManager;
    }

    @Test
    public void getCallingAppPackageName_nullPackageName_returnNotNull() {
        fakeCallingPackage("com.android.settings");

        assertThat(mActivity.getCallingAppPackageName()).isNotNull();
    }

    @Test
    public void startActivity_withPackageName_bundleShouldHaveRightPackageName() {
        final String packageName = RuntimeEnvironment.application.getPackageName();
        final AddAppNetworksActivity activity =
                Robolectric.buildActivity(AddAppNetworksActivity.class).create().get();
        shadowOf(activity).setCallingPackage(packageName);
    public void getCallingAppPackageName_withPackageName_returnNull()  {
        fakeCallingPackage(null);

        activity.showAddNetworksFragment();
        assertThat(mActivity.getCallingAppPackageName()).isNull();
    }

    @Test
    public void showAddNetworksFragment_nullPackageName_returnFalse()  {
        fakeCallingPackage(null);

        assertThat(mActivity.showAddNetworksFragment()).isFalse();
    }

        assertThat(activity.mBundle.getString(AddAppNetworksActivity.KEY_CALLING_PACKAGE_NAME))
                .isEqualTo(packageName);
    @Test
    public void showAddNetworksFragment_withPackageName_returnTrue()  {
        fakeCallingPackage("com.android.settings");

        assertThat(mActivity.showAddNetworksFragment()).isTrue();
    }

    private void fakeCallingPackage(@Nullable String packageName) {
        try {
            when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName);
        } catch (RemoteException e) {
            // Do nothing.
        }
    }
}