diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java index 9d8fbb14162..844525d1d17 100644 --- a/src/com/android/settings/datausage/DataUsageList.java +++ b/src/com/android/settings/datausage/DataUsageList.java @@ -37,6 +37,7 @@ import android.os.UserManager; 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; @@ -131,8 +132,14 @@ public class DataUsageList extends DataUsageBaseFragment @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(); @@ -234,9 +241,10 @@ public class DataUsageList extends DataUsageBaseFragment @Override public void onDestroy() { - mUidDetailProvider.clearCache(); - mUidDetailProvider = null; - + if (mUidDetailProvider != null) { + mUidDetailProvider.clearCache(); + mUidDetailProvider = null; + } super.onDestroy(); } @@ -614,4 +622,11 @@ public class DataUsageList extends DataUsageBaseFragment } } }; + + 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 a13cf6c7c8f..951829b1738 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.ArgumentMatchers.anyInt; 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.content.Intent; 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.mockito.MockitoAnnotations; 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 @@ public class DataUsageListTest { private TemplatePreference.NetworkServices mNetworkServices; @Mock private LoaderManager mLoaderManager; + @Mock + private UserManager mUserManager; private Activity mActivity; private DataUsageList mDataUsageList; @@ -90,6 +97,8 @@ public class DataUsageListTest { 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 @@ public class DataUsageListTest { mDataUsageList.mLoadingViewController = mock(LoadingViewController.class); } + @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( @@ -241,4 +271,17 @@ public class DataUsageListTest { final Spinner spinner = header.findViewById(R.id.filter_spinner); return spinner; } + + @Implements(DataUsageBaseFragment.class) + public static class ShadowDataUsageBaseFragment { + @Implementation + public void onCreate(Bundle icicle) { + // do nothing + } + + @Implementation + protected boolean isBandwidthControlEnabled() { + return true; + } + } }