diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java index 7b5eaa9ecb1..6bf91040443 100644 --- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java +++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java @@ -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; } } diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java index b6146985142..39408e2fc9c 100644 --- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java +++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java @@ -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 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_nullPackageName_returnNotNull() { + fakeCallingPackage("com.android.settings"); - activity.showAddNetworksFragment(); + assertThat(mActivity.getCallingAppPackageName()).isNotNull(); + } - assertThat(activity.mBundle.getString(AddAppNetworksActivity.KEY_CALLING_PACKAGE_NAME)) - .isEqualTo(packageName); + @Test + public void getCallingAppPackageName_withPackageName_returnNull() { + fakeCallingPackage(null); + + assertThat(mActivity.getCallingAppPackageName()).isNull(); + } + + @Test + public void showAddNetworksFragment_nullPackageName_returnFalse() { + fakeCallingPackage(null); + + assertThat(mActivity.showAddNetworksFragment()).isFalse(); + } + + @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. + } } }