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;
+ }
+ }
}