Only show restricted apps that belong to the user.

Filter out the restricted apps that not belong to the correct user, in
this way secondary user cannot see what apps been restricted by primary
user.

Bug: 74076658
Test: RunSettingsRoboTests
Change-Id: I8471f07be747c177f8611cdc1973a8420dc41296
This commit is contained in:
Lei Yu
2018-03-20 16:11:25 -07:00
parent 048b71a67c
commit 37d29ee6a6
4 changed files with 54 additions and 6 deletions

View File

@@ -29,11 +29,14 @@ import static org.mockito.Mockito.verify;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import org.junit.Before;
import org.junit.Test;
@@ -53,6 +56,7 @@ public class RestrictAppPreferenceControllerTest {
private static final String ALLOWED_PACKAGE_NAME = "com.android.allowed.package";
private static final int RESTRICTED_UID = 222;
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
@Mock
private AppOpsManager mAppOpsManager;
@@ -61,9 +65,13 @@ public class RestrictAppPreferenceControllerTest {
@Mock
private AppOpsManager.PackageOps mAllowedPackageOps;
@Mock
private AppOpsManager.PackageOps mOtherUserPackageOps;
@Mock
private SettingsActivity mSettingsActivity;
@Mock
private InstrumentedPreferenceFragment mFragment;
@Mock
private UserManager mUserManager;
private List<AppOpsManager.PackageOps> mPackageOpsList;
private RestrictAppPreferenceController mRestrictAppPreferenceController;
private Preference mPreference;
@@ -87,15 +95,23 @@ public class RestrictAppPreferenceControllerTest {
doReturn(RESTRICTED_UID).when(mRestrictedPackageOps).getUid();
doReturn(RESTRICTED_PACKAGE_NAME).when(mRestrictedPackageOps).getPackageName();
doReturn(restrictedOps).when(mRestrictedPackageOps).getOps();
doReturn(OTHER_USER_UID).when(mOtherUserPackageOps).getUid();
doReturn(RESTRICTED_PACKAGE_NAME).when(mOtherUserPackageOps).getPackageName();
doReturn(restrictedOps).when(mOtherUserPackageOps).getOps();
mContext = spy(RuntimeEnvironment.application);
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(mContext).when(mSettingsActivity).getApplicationContext();
mRestrictAppPreferenceController =
new RestrictAppPreferenceController(mSettingsActivity, mFragment);
mPackageOpsList = new ArrayList<>();
mPreference = new Preference(mContext);
mPreference.setKey(mRestrictAppPreferenceController.getPreferenceKey());
final List<UserHandle> userHandles = new ArrayList<>();
userHandles.add(new UserHandle(0));
doReturn(userHandles).when(mUserManager).getUserProfiles();
}
@Test
@@ -109,10 +125,11 @@ public class RestrictAppPreferenceControllerTest {
}
@Test
public void testUpdateState_twoRestrictApps_showCorrectSummary() {
public void testUpdateState_twoRestrictedAppsForPrimaryUser_showCorrectSummary() {
mPackageOpsList.add(mRestrictedPackageOps);
mPackageOpsList.add(mRestrictedPackageOps);
mPackageOpsList.add(mAllowedPackageOps);
mPackageOpsList.add(mOtherUserPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
mRestrictAppPreferenceController.updateState(mPreference);
@@ -120,6 +137,23 @@ public class RestrictAppPreferenceControllerTest {
assertThat(mPreference.getSummary()).isEqualTo("2 apps");
}
@Test
public void testUpdateState_oneRestrictedAppForTwoUsers_showSummaryAndContainCorrectApp() {
// Two packageOps share same package name but different uid.
mPackageOpsList.add(mRestrictedPackageOps);
mPackageOpsList.add(mOtherUserPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
mRestrictAppPreferenceController.updateState(mPreference);
assertThat(mPreference.getSummary()).isEqualTo("1 app");
assertThat(mRestrictAppPreferenceController.mAppInfos).containsExactly(
new AppInfo.Builder()
.setUid(RESTRICTED_UID)
.setPackageName(RESTRICTED_PACKAGE_NAME)
.build());
}
@Test
public void testUpdateState_zeroRestrictApp_disabled() {
mPackageOpsList.add(mAllowedPackageOps);