Merge "Restrict DataUsageSummary for guest user" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2023-03-29 19:52:27 +00:00
committed by Android (Google) Code Review
2 changed files with 57 additions and 7 deletions

View File

@@ -19,6 +19,7 @@ import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.net.NetworkTemplate; import android.net.NetworkTemplate;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.text.BidiFormatter; import android.text.BidiFormatter;
@@ -27,6 +28,8 @@ import android.text.SpannableString;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.format.Formatter; import android.text.format.Formatter;
import android.text.style.RelativeSizeSpan; import android.text.style.RelativeSizeSpan;
import android.util.EventLog;
import android.util.Log;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -83,6 +86,12 @@ public class DataUsageSummary extends DataUsageBaseFragment implements DataUsage
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
Context context = getContext(); Context context = getContext();
if (isGuestUser(context)) {
Log.e(TAG, "This setting isn't available due to user restriction.");
EventLog.writeEvent(0x534e4554, "262243574", -1 /* UID */, "Guest user");
finish();
return;
}
if (!isSimHardwareVisible(context)) { if (!isSimHardwareVisible(context)) {
finish(); finish();
@@ -282,4 +291,11 @@ public class DataUsageSummary extends DataUsageBaseFragment implements DataUsage
updateState(); updateState();
mSummaryController.updateState(mSummaryPreference); mSummaryController.updateState(mSummaryPreference);
} }
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

@@ -31,13 +31,14 @@ import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.NetworkPolicyManager; import android.net.NetworkPolicyManager;
import android.os.UserManager;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowDashboardFragment; import com.android.settings.testutils.shadow.ShadowDashboardFragment;
import com.android.settings.testutils.shadow.ShadowDataUsageUtils; import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -45,13 +46,15 @@ import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows; import org.robolectric.Shadows;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
@@ -66,16 +69,22 @@ import org.robolectric.shadows.ShadowTelephonyManager;
}) })
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class DataUsageSummaryTest { public class DataUsageSummaryTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Spy
Context mContext = ApplicationProvider.getApplicationContext();
@Mock
private UserManager mUserManager;
@Mock @Mock
private NetworkPolicyManager mNetworkPolicyManager; private NetworkPolicyManager mNetworkPolicyManager;
@Mock @Mock
private NetworkStatsManager mNetworkStatsManager; private NetworkStatsManager mNetworkStatsManager;
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
private Context mContext;
private Resources mResources; private Resources mResources;
private FragmentActivity mActivity; private FragmentActivity mActivity;
private DataUsageSummary mDataUsageSummary;
/** /**
* This set up is contrived to get a passing test so that the build doesn't block without tests. * This set up is contrived to get a passing test so that the build doesn't block without tests.
* These tests should be updated as code gets refactored to improve testability. * These tests should be updated as code gets refactored to improve testability.
@@ -83,12 +92,13 @@ public class DataUsageSummaryTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(false).when(mUserManager).isGuestUser();
ShadowApplication shadowContext = ShadowApplication.getInstance(); ShadowApplication shadowContext = ShadowApplication.getInstance();
ShadowUserManager.getShadow().setIsAdminUser(true); ShadowUserManager.getShadow().setIsAdminUser(true);
shadowContext.setSystemService(Context.NETWORK_POLICY_SERVICE, mNetworkPolicyManager); shadowContext.setSystemService(Context.NETWORK_POLICY_SERVICE, mNetworkPolicyManager);
mContext = spy(RuntimeEnvironment.application);
mTelephonyManager = mContext.getSystemService(TelephonyManager.class); mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(mTelephonyManager); final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(mTelephonyManager);
shadowTelephonyManager.setTelephonyManagerForSubscriptionId( shadowTelephonyManager.setTelephonyManagerForSubscriptionId(
@@ -101,6 +111,12 @@ public class DataUsageSummaryTest {
doReturn(true).when(mResources).getBoolean(R.bool.config_show_sim_info); doReturn(true).when(mResources).getBoolean(R.bool.config_show_sim_info);
doReturn(mNetworkStatsManager).when(mActivity).getSystemService(NetworkStatsManager.class); doReturn(mNetworkStatsManager).when(mActivity).getSystemService(NetworkStatsManager.class);
mDataUsageSummary = spy(new DataUsageSummary());
doReturn(mContext).when(mDataUsageSummary).getContext();
doNothing().when(mDataUsageSummary).enableProxySubscriptionManager(any());
doReturn(true).when(mDataUsageSummary).removePreference(anyString());
doNothing().when(mDataUsageSummary).addWifiSection();
} }
@Test @Test
@@ -201,4 +217,22 @@ public class DataUsageSummaryTest {
verify(dataUsageSummary).addWifiSection(); verify(dataUsageSummary).addWifiSection();
verify(dataUsageSummary, never()).addMobileSection(anyInt()); verify(dataUsageSummary, never()).addMobileSection(anyInt());
} }
@Test
public void onCreate_isNotGuestUser_shouldNotFinish() {
doReturn(false).when(mUserManager).isGuestUser();
mDataUsageSummary.onCreate(null);
verify(mDataUsageSummary, never()).finish();
}
@Test
public void onCreate_isGuestUser_shouldFinish() {
doReturn(true).when(mUserManager).isGuestUser();
mDataUsageSummary.onCreate(null);
verify(mDataUsageSummary).finish();
}
} }