Merge "Restrict DataUsageList for guest user" into tm-qpr-dev am: 5bde972e4e am: f02d69dd4f

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/22323478

Change-Id: Ibfe01c87ea15467a736ccaf7d812c8eaffaefa76
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index b1661e1..c0ccb76 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -37,6 +37,7 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.util.EventLog;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.View;
@@ -134,8 +135,14 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        final Activity activity = getActivity();
+        if (isGuestUser(getContext())) {
+            Log.e(TAG, "This setting isn't available for guest user");
+            EventLog.writeEvent(0x534e4554, "262741858", -1 /* UID */, "Guest user");
+            finish();
+            return;
+        }
 
+        final Activity activity = getActivity();
         if (!isBandwidthControlEnabled()) {
             Log.w(TAG, "No bandwidth control; leaving");
             activity.finish();
@@ -251,9 +258,10 @@
 
     @Override
     public void onDestroy() {
-        mUidDetailProvider.clearCache();
-        mUidDetailProvider = null;
-
+        if (mUidDetailProvider != null) {
+            mUidDetailProvider.clearCache();
+            mUidDetailProvider = null;
+        }
         super.onDestroy();
     }
 
@@ -646,4 +654,11 @@
             }
         }
     };
+
+    private static boolean isGuestUser(Context context) {
+        if (context == null) return false;
+        final UserManager userManager = context.getSystemService(UserManager.class);
+        if (userManager == null) return false;
+        return userManager.isGuestUser();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index 3a10132..f7db0d5 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -31,6 +32,7 @@
 import android.net.ConnectivityManager;
 import android.net.NetworkTemplate;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.provider.Settings;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -60,6 +62,9 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.android.controller.ActivityController;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
@@ -74,6 +79,8 @@
     private TemplatePreference.NetworkServices mNetworkServices;
     @Mock
     private LoaderManager mLoaderManager;
+    @Mock
+    private UserManager mUserManager;
 
     private Activity mActivity;
     private DataUsageList mDataUsageList;
@@ -90,6 +97,8 @@
         mDataUsageList.mDataStateListener = mMobileDataEnabledListener;
 
         doReturn(mActivity).when(mDataUsageList).getContext();
+        doReturn(mUserManager).when(mActivity).getSystemService(UserManager.class);
+        doReturn(false).when(mUserManager).isGuestUser();
         ReflectionHelpers.setField(mDataUsageList, "mDataStateListener",
                 mMobileDataEnabledListener);
         ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
@@ -97,6 +106,27 @@
     }
 
     @Test
+    @Config(shadows = ShadowDataUsageBaseFragment.class)
+    public void onCreate_isNotGuestUser_shouldNotFinish() {
+        doReturn(false).when(mUserManager).isGuestUser();
+        doNothing().when(mDataUsageList).processArgument();
+
+        mDataUsageList.onCreate(null);
+
+        verify(mDataUsageList, never()).finish();
+    }
+
+    @Test
+    @Config(shadows = ShadowDataUsageBaseFragment.class)
+    public void onCreate_isGuestUser_shouldFinish() {
+        doReturn(true).when(mUserManager).isGuestUser();
+
+        mDataUsageList.onCreate(null);
+
+        verify(mDataUsageList).finish();
+    }
+
+    @Test
     public void resume_shouldListenDataStateChange() {
         ReflectionHelpers.setField(
                 mDataUsageList, "mVisibilityLoggerMixin", mock(VisibilityLoggerMixin.class));
@@ -239,4 +269,17 @@
         }
         return pinnedHeader.findViewById(R.id.filter_spinner);
     }
+
+    @Implements(DataUsageBaseFragment.class)
+    public static class ShadowDataUsageBaseFragment {
+        @Implementation
+        public void onCreate(Bundle icicle) {
+            // do nothing
+        }
+
+        @Implementation
+        protected boolean isBandwidthControlEnabled() {
+            return true;
+        }
+    }
 }