diff --git a/src/com/android/settings/wifi/WifiScanModeActivity.java b/src/com/android/settings/wifi/WifiScanModeActivity.java index 9d502810d5a..d37213522aa 100644 --- a/src/com/android/settings/wifi/WifiScanModeActivity.java +++ b/src/com/android/settings/wifi/WifiScanModeActivity.java @@ -20,26 +20,30 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; import android.net.wifi.WifiManager; import android.os.Bundle; import android.text.TextUtils; import android.view.WindowManager; +import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentActivity; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settingslib.wifi.WifiPermissionChecker; /** * This activity requests users permission to allow scanning even when Wi-Fi is turned off */ public class WifiScanModeActivity extends FragmentActivity { private DialogFragment mDialog; - private String mApp; + @VisibleForTesting + String mApp; + @VisibleForTesting + WifiPermissionChecker mWifiPermissionChecker; @Override protected void onCreate(Bundle savedInstanceState) { @@ -50,13 +54,7 @@ public class WifiScanModeActivity extends FragmentActivity { if (savedInstanceState == null) { if (intent != null && WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE .equals(intent.getAction())) { - ApplicationInfo ai; - mApp = getCallingPackage(); - try { - PackageManager pm = getPackageManager(); - ai = pm.getApplicationInfo(mApp, 0); - mApp = (String)pm.getApplicationLabel(ai); - } catch (PackageManager.NameNotFoundException e) { } + refreshAppLabel(); } else { finish(); return; @@ -67,6 +65,19 @@ public class WifiScanModeActivity extends FragmentActivity { createDialog(); } + @VisibleForTesting + void refreshAppLabel() { + if (mWifiPermissionChecker == null) { + mWifiPermissionChecker = new WifiPermissionChecker(this); + } + String packageName = mWifiPermissionChecker.getLaunchedPackage(); + if (TextUtils.isEmpty(packageName)) { + mApp = null; + return; + } + mApp = Utils.getApplicationLabel(getApplicationContext(), packageName).toString(); + } + private void createDialog() { if (mDialog == null) { mDialog = AlertDialogFragment.newInstance(mApp); diff --git a/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java index 3e6ba00eff5..1e3afdbf32f 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java @@ -16,16 +16,75 @@ package com.android.settings.wifi; +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.text.TextUtils; + +import com.android.settings.testutils.shadow.ShadowUtils; +import com.android.settingslib.wifi.WifiPermissionChecker; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) +@Config(shadows = {ShadowUtils.class}) public class WifiScanModeActivityTest { + + static final String LAUNCHED_PACKAGE = "launched_package"; + static final String APP_LABEL = "app_label"; + + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Mock + WifiPermissionChecker mWifiPermissionChecker; + + WifiScanModeActivity mActivity; + + @Before + public void setUp() { + mActivity = spy(Robolectric.setupActivity(WifiScanModeActivity.class)); + mActivity.mWifiPermissionChecker = mWifiPermissionChecker; + } + + @After + public void tearDown() { + ShadowUtils.reset(); + } + @Test public void launchActivity_noIntentAction_shouldNotFatalException() { WifiScanModeActivity wifiScanModeActivity = Robolectric.setupActivity(WifiScanModeActivity.class); } + + @Test + public void refreshAppLabel_noPackageName_shouldNotFatalException() { + when(mWifiPermissionChecker.getLaunchedPackage()).thenReturn(null); + + mActivity.refreshAppLabel(); + + assertThat(TextUtils.isEmpty(mActivity.mApp)).isTrue(); + } + + @Test + public void refreshAppLabel_hasPackageName_shouldHasAppLabel() { + ShadowUtils.setApplicationLabel(LAUNCHED_PACKAGE, APP_LABEL); + when(mWifiPermissionChecker.getLaunchedPackage()).thenReturn(LAUNCHED_PACKAGE); + + mActivity.refreshAppLabel(); + + assertThat(mActivity.mApp).isEqualTo(APP_LABEL); + } }