From fe5690598c062643fce5992c6d4b1285d9e4384b Mon Sep 17 00:00:00 2001 From: Weng Su Date: Fri, 24 Dec 2021 09:36:26 +0800 Subject: [PATCH] Check WiFi restrictions for WiFi QR code intent - If WiFi configuration is not allowed, the WiFi QR code intent is ignored. - Add SafetyNet Logging to b/202017876. Bug: 202017876 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=WifiDppEnrolleeActivityTest Change-Id: I147d2f4f4fabe2e24d5d3eaaad701b81059e8eee --- .../wifi/dpp/WifiDppEnrolleeActivity.java | 24 ++++++- .../wifi/dpp/WifiDppEnrolleeActivityTest.java | 66 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java index c5f1e81f80d..3ce244cea30 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java +++ b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java @@ -18,11 +18,14 @@ package com.android.settings.wifi.dpp; import android.app.settings.SettingsEnums; import android.content.Intent; +import android.util.EventLog; import android.util.Log; +import androidx.annotation.VisibleForTesting; import androidx.fragment.app.FragmentTransaction; import com.android.settings.R; +import com.android.settingslib.wifi.WifiRestrictionsCache; /** * To provision "this" device with specified Wi-Fi network. @@ -37,6 +40,9 @@ public class WifiDppEnrolleeActivity extends WifiDppBaseActivity implements static final String ACTION_ENROLLEE_QR_CODE_SCANNER = "android.settings.WIFI_DPP_ENROLLEE_QR_CODE_SCANNER"; + @VisibleForTesting + protected WifiRestrictionsCache mWifiRestrictionsCache; + @Override public int getMetricsCategory() { return SettingsEnums.SETTINGS_WIFI_DPP_ENROLLEE; @@ -50,6 +56,14 @@ public class WifiDppEnrolleeActivity extends WifiDppBaseActivity implements return; } + if (!isWifiConfigAllowed()) { + Log.e(TAG, "The user is not allowed to configure Wi-Fi."); + finish(); + EventLog.writeEvent(0x534e4554, "202017876", getApplicationContext().getUserId(), + "The user is not allowed to configure Wi-Fi."); + return; + } + switch (action) { case ACTION_ENROLLEE_QR_CODE_SCANNER: String ssid = intent.getStringExtra(WifiDppUtils.EXTRA_WIFI_SSID); @@ -61,7 +75,15 @@ public class WifiDppEnrolleeActivity extends WifiDppBaseActivity implements } } - private void showQrCodeScannerFragment(String ssid) { + private boolean isWifiConfigAllowed() { + if (mWifiRestrictionsCache == null) { + mWifiRestrictionsCache = WifiRestrictionsCache.getInstance(getApplicationContext()); + } + return mWifiRestrictionsCache.isConfigWifiAllowed(); + } + + @VisibleForTesting + protected void showQrCodeScannerFragment(String ssid) { WifiDppQrCodeScannerFragment fragment = (WifiDppQrCodeScannerFragment) mFragmentManager.findFragmentByTag( WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER); diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java index 819b7f4331d..67d467803b2 100644 --- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java +++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java @@ -16,16 +16,82 @@ package com.android.settings.wifi.dpp; +import static com.android.settings.wifi.dpp.WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER; + +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Intent; + +import com.android.settingslib.wifi.WifiRestrictionsCache; + +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; @RunWith(RobolectricTestRunner.class) public class WifiDppEnrolleeActivityTest { + + private static final String WIFI_SSID = "wifi-ssid"; + + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Mock + WifiRestrictionsCache mWifiRestrictionsCache; + @Mock + Intent mIntent; + + WifiDppEnrolleeActivity mActivity; + + @Before + public void setUp() { + when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(true); + when(mIntent.getAction()).thenReturn(ACTION_ENROLLEE_QR_CODE_SCANNER); + when(mIntent.getStringExtra(WifiDppUtils.EXTRA_WIFI_SSID)).thenReturn(WIFI_SSID); + + mActivity = spy(Robolectric.setupActivity(WifiDppEnrolleeActivity.class)); + mActivity.mWifiRestrictionsCache = mWifiRestrictionsCache; + } + @Test public void launchActivity_noIntentAction_shouldNotFatalException() { WifiDppEnrolleeActivity wifiDppEnrolleeActivity = Robolectric.setupActivity(WifiDppEnrolleeActivity.class); } + + @Test + public void handleIntent_noIntentAction_shouldFinish() { + when(mIntent.getAction()).thenReturn(null); + + mActivity.handleIntent(mIntent); + + verify(mActivity).finish(); + } + + @Test + public void handleIntent_notAllowedConfigWifi_shouldFinish() { + when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(false); + + mActivity.handleIntent(mIntent); + + verify(mActivity).finish(); + } + + @Test + public void handleIntent_hasIntentDataAndAllowedConfigWifi_shouldShowFragment() { + when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(true); + doNothing().when(mActivity).showQrCodeScannerFragment(WIFI_SSID); + + mActivity.handleIntent(mIntent); + + verify(mActivity).showQrCodeScannerFragment(WIFI_SSID); + } }