Restrict SimDialogActivity

- Restrict UI if user is a guest

- Restrict UI if user has DISALLOW_CONFIG_MOBILE_NETWORKS

Bug: 262242946
Bug: 271849181
Test: manual test
atest -c SimDialogActivityTest

Change-Id: I227400aa71880895d8356f3d2961cb610ad2a357
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index dcfa983..7d39938 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -39,10 +39,12 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.network.CarrierConfigCache;
 import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.network.ims.WifiCallingQueryImsState;
+import com.android.settings.network.telephony.MobileNetworkUtils;
 import com.android.settings.network.telephony.SubscriptionActionDialogActivity;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -77,7 +79,10 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
+        if (isUiRestricted()) {
+            finish();
+            return;
+        }
         if (!SubscriptionUtil.isSimHardwareVisible(this)) {
             Log.d(TAG, "Not support on device without SIM.");
             finish();
@@ -91,6 +96,15 @@
         showOrUpdateDialog();
     }
 
+    @VisibleForTesting
+    boolean isUiRestricted() {
+        if (MobileNetworkUtils.isMobileNetworkUserRestricted(getApplicationContext())) {
+            Log.e(TAG, "This setting isn't available due to user restriction.");
+            return true;
+        }
+        return false;
+    }
+
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
diff --git a/tests/unit/src/com/android/settings/sim/SimDialogActivityTest.java b/tests/unit/src/com/android/settings/sim/SimDialogActivityTest.java
new file mode 100644
index 0000000..a232034
--- /dev/null
+++ b/tests/unit/src/com/android/settings/sim/SimDialogActivityTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.sim;
+
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.UserManager;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+@UiThreadTest
+public class SimDialogActivityTest {
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Spy
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Mock
+    private UserManager mUserManager;
+
+    private MockSimDialogActivity mActivity;
+
+    @Before
+    public void setUp() {
+        when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+        when(mUserManager.isGuestUser()).thenReturn(false);
+        when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(false);
+
+        mActivity = new MockSimDialogActivity();
+    }
+
+    @Test
+    public void isUiRestricted_normally_returnFalse() {
+        assertThat(mActivity.isUiRestricted()).isFalse();
+    }
+
+    @Test
+    public void isUiRestricted_isGuestUser_returnTrue() {
+        when(mUserManager.isGuestUser()).thenReturn(true);
+
+        assertThat(mActivity.isUiRestricted()).isTrue();
+    }
+
+    @Test
+    public void isUiRestricted_hasUserRestriction_returnTrue() {
+        when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_MOBILE_NETWORKS)).thenReturn(true);
+
+        assertThat(mActivity.isUiRestricted()).isTrue();
+    }
+
+    public class MockSimDialogActivity extends SimDialogActivity {
+        @Override
+        public Context getApplicationContext() {
+            return mContext;
+        }
+    }
+}