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

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

Change-Id: I6fcc26d5db647b9c36b743592a8b58dda52b1847
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-03-30 20:04:20 +00:00
committed by Automerger Merge Worker
2 changed files with 62 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.util.EventLog;
import android.util.Log; import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.View; import android.view.View;
@@ -131,8 +132,14 @@ public class DataUsageList extends DataUsageBaseFragment
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(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()) { if (!isBandwidthControlEnabled()) {
Log.w(TAG, "No bandwidth control; leaving"); Log.w(TAG, "No bandwidth control; leaving");
activity.finish(); activity.finish();
@@ -234,9 +241,10 @@ public class DataUsageList extends DataUsageBaseFragment
@Override @Override
public void onDestroy() { public void onDestroy() {
mUidDetailProvider.clearCache(); if (mUidDetailProvider != null) {
mUidDetailProvider = null; mUidDetailProvider.clearCache();
mUidDetailProvider = null;
}
super.onDestroy(); 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();
}
} }

View File

@@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -31,6 +32,7 @@ import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkTemplate; import android.net.NetworkTemplate;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -60,6 +62,9 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController; 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 org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
@@ -74,6 +79,8 @@ public class DataUsageListTest {
private TemplatePreference.NetworkServices mNetworkServices; private TemplatePreference.NetworkServices mNetworkServices;
@Mock @Mock
private LoaderManager mLoaderManager; private LoaderManager mLoaderManager;
@Mock
private UserManager mUserManager;
private Activity mActivity; private Activity mActivity;
private DataUsageList mDataUsageList; private DataUsageList mDataUsageList;
@@ -90,6 +97,8 @@ public class DataUsageListTest {
mDataUsageList.mDataStateListener = mMobileDataEnabledListener; mDataUsageList.mDataStateListener = mMobileDataEnabledListener;
doReturn(mActivity).when(mDataUsageList).getContext(); doReturn(mActivity).when(mDataUsageList).getContext();
doReturn(mUserManager).when(mActivity).getSystemService(UserManager.class);
doReturn(false).when(mUserManager).isGuestUser();
ReflectionHelpers.setField(mDataUsageList, "mDataStateListener", ReflectionHelpers.setField(mDataUsageList, "mDataStateListener",
mMobileDataEnabledListener); mMobileDataEnabledListener);
ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices); ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
@@ -97,6 +106,27 @@ public class DataUsageListTest {
mDataUsageList.mLoadingViewController = mock(LoadingViewController.class); 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 @Test
public void resume_shouldListenDataStateChange() { public void resume_shouldListenDataStateChange() {
ReflectionHelpers.setField( ReflectionHelpers.setField(
@@ -241,4 +271,17 @@ public class DataUsageListTest {
final Spinner spinner = header.findViewById(R.id.filter_spinner); final Spinner spinner = header.findViewById(R.id.filter_spinner);
return spinner; return spinner;
} }
@Implements(DataUsageBaseFragment.class)
public static class ShadowDataUsageBaseFragment {
@Implementation
public void onCreate(Bundle icicle) {
// do nothing
}
@Implementation
protected boolean isBandwidthControlEnabled() {
return true;
}
}
} }