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
diff --git a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
index c5f1e81..3ce244c 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
@@ -18,11 +18,14 @@
 
 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 @@
     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 @@
             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 @@
         }
     }
 
-    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 819b7f4..67d4678 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);
+    }
 }