diff options
| author | 2024-02-26 16:01:37 +0000 | |
|---|---|---|
| committer | 2024-02-27 14:29:54 +0000 | |
| commit | abbfff37b59ef262290a8755b9cb9e107a3ccc5e (patch) | |
| tree | c1726e1f91f3f4ff986c48e1e0192af9a9c3e84a | |
| parent | 414c9bb227e37b55ef29b21b1f6d72bbfc405625 (diff) | |
Add an additional flag guard for Private Space implementation
[SettingsLib & SystemUI]
This a layer of flag guarding only for the implementation of Private Space features excluding the APIs. The MVP flag allow_private_profile still guards all the features including the APIs.
Bug: 326060689
Test: Manual - a few verifications that some feeatures are unavailable when this flag is disabled
Test: Run presubmits and verify that nothing breaks
Change-Id: I61acf8fe98756cb1055fa4f554fc37517c5342da
13 files changed, 48 insertions, 22 deletions
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 7dcbbea7df90..78f06b6bddb3 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -2655,7 +2655,8 @@ public class ResolverActivity extends Activity implements private boolean privateSpaceEnabled() { return mIsIntentPicker && android.os.Flags.allowPrivateProfile() - && android.multiuser.Flags.allowResolverSheetForPrivateSpace(); + && android.multiuser.Flags.allowResolverSheetForPrivateSpace() + && android.multiuser.Flags.enablePrivateSpaceFeatures(); } /** diff --git a/core/java/com/android/internal/app/SetScreenLockDialogActivity.java b/core/java/com/android/internal/app/SetScreenLockDialogActivity.java index 93fe37c974b2..360fcafe3318 100644 --- a/core/java/com/android/internal/app/SetScreenLockDialogActivity.java +++ b/core/java/com/android/internal/app/SetScreenLockDialogActivity.java @@ -75,7 +75,8 @@ public class SetScreenLockDialogActivity extends AlertActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!(android.os.Flags.allowPrivateProfile() - && android.multiuser.Flags.showSetScreenLockDialog())) { + && android.multiuser.Flags.showSetScreenLockDialog() + && android.multiuser.Flags.enablePrivateSpaceFeatures())) { finish(); return; } diff --git a/core/java/com/android/internal/app/UnlaunchableAppActivity.java b/core/java/com/android/internal/app/UnlaunchableAppActivity.java index 4ef0a1baa4d1..97f8084d0031 100644 --- a/core/java/com/android/internal/app/UnlaunchableAppActivity.java +++ b/core/java/com/android/internal/app/UnlaunchableAppActivity.java @@ -77,6 +77,7 @@ public class UnlaunchableAppActivity extends Activity } if (android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.enablePrivateSpaceFeatures() && !userManager.isManagedProfile(mUserId)) { Log.e(TAG, "Unlaunchable activity for target package " + targetPackageName + " called for a non-managed-profile " + mUserId); diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java index b209c7c261ba..cb8754ae9962 100644 --- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java @@ -1162,7 +1162,8 @@ public class ResolverActivityTest { @Test public void testTriggerFromPrivateProfile_withoutWorkProfile() throws RemoteException { mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE, - android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE); + android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); markPrivateProfileUserAvailable(); Intent sendIntent = createSendImageIntent(); List<ResolvedComponentInfo> privateResolvedComponentInfos = @@ -1183,7 +1184,8 @@ public class ResolverActivityTest { @Test public void testTriggerFromPrivateProfile_withWorkProfilePresent(){ mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE, - android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE); + android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); ResolverActivity.ENABLE_TABBED_VIEW = false; markPrivateProfileUserAvailable(); markWorkProfileUserAvailable(); @@ -1205,7 +1207,8 @@ public class ResolverActivityTest { @Test public void testPrivateProfile_triggerFromPrimaryUser_withWorkProfilePresent(){ mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE, - android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE); + android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); markPrivateProfileUserAvailable(); markWorkProfileUserAvailable(); Intent sendIntent = createSendImageIntent(); @@ -1228,7 +1231,8 @@ public class ResolverActivityTest { @Test public void testPrivateProfile_triggerFromWorkProfile(){ mSetFlagsRule.enableFlags(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE, - android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE); + android.multiuser.Flags.FLAG_ALLOW_RESOLVER_SHEET_FOR_PRIVATE_SPACE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); markPrivateProfileUserAvailable(); markWorkProfileUserAvailable(); Intent sendIntent = createSendImageIntent(); diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index e489bc552b25..2889ce26d65d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -1703,6 +1703,7 @@ public class ApplicationsState { public boolean isPrivateProfile() { return android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.enablePrivateSpaceFeatures() && UserManager.USER_TYPE_PROFILE_PRIVATE.equals(mProfileType); } diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java index 1ad7d4930ecc..fe83ffb094e2 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/applications/ApplicationsStateTest.java @@ -319,7 +319,8 @@ public class ApplicationsStateTest { @Test public void testPrivateProfileFilterDisplaysCorrectApps() { - mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE); + mSetFlagsRule.enableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); mEntry.showInPersonalTab = true; mEntry.mProfileType = UserManager.USER_TYPE_FULL_SYSTEM; @@ -334,7 +335,8 @@ public class ApplicationsStateTest { @Test public void testPrivateProfileFilterDisplaysCorrectAppsWhenFlagDisabled() { - mSetFlagsRule.disableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE); + mSetFlagsRule.disableFlags(Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); mEntry.showInPersonalTab = false; mEntry.mProfileType = UserManager.USER_TYPE_PROFILE_PRIVATE; diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java index d505b27a9969..7fabe3338483 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java @@ -25,6 +25,7 @@ import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_SECURE_NOTIFICATIONS; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS; import static android.app.Flags.FLAG_KEYGUARD_PRIVATE_NOTIFICATIONS; +import static android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES; import static android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE; import static android.os.UserHandle.USER_ALL; import static android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS; @@ -115,7 +116,8 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { public static List<FlagsParameterization> getParams() { return FlagsParameterization.allCombinationsOf( FLAG_ALLOW_PRIVATE_PROFILE, - FLAG_KEYGUARD_PRIVATE_NOTIFICATIONS); + FLAG_KEYGUARD_PRIVATE_NOTIFICATIONS, + FLAG_ENABLE_PRIVATE_SPACE_FEATURES); } public NotificationLockscreenUserManagerTest(FlagsParameterization flags) { @@ -872,7 +874,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { } @Test - @EnableFlags(FLAG_ALLOW_PRIVATE_PROFILE) + @EnableFlags({FLAG_ALLOW_PRIVATE_PROFILE, FLAG_ENABLE_PRIVATE_SPACE_FEATURES}) public void testProfileAvailabilityIntent() { mLockscreenUserManager.mCurrentProfiles.clear(); assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); @@ -883,7 +885,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { } @Test - @EnableFlags(FLAG_ALLOW_PRIVATE_PROFILE) + @EnableFlags({FLAG_ALLOW_PRIVATE_PROFILE, FLAG_ENABLE_PRIVATE_SPACE_FEATURES}) public void testProfileUnAvailabilityIntent() { mLockscreenUserManager.mCurrentProfiles.clear(); assertEquals(0, mLockscreenUserManager.mCurrentProfiles.size()); @@ -894,7 +896,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { } @Test - @DisableFlags(FLAG_ALLOW_PRIVATE_PROFILE) + @DisableFlags({FLAG_ALLOW_PRIVATE_PROFILE, FLAG_ENABLE_PRIVATE_SPACE_FEATURES}) public void testManagedProfileAvailabilityIntent() { mLockscreenUserManager.mCurrentProfiles.clear(); mLockscreenUserManager.mCurrentManagedProfiles.clear(); @@ -908,7 +910,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase { } @Test - @DisableFlags(FLAG_ALLOW_PRIVATE_PROFILE) + @DisableFlags({FLAG_ALLOW_PRIVATE_PROFILE, FLAG_ENABLE_PRIVATE_SPACE_FEATURES}) public void testManagedProfileUnAvailabilityIntent() { mLockscreenUserManager.mCurrentProfiles.clear(); mLockscreenUserManager.mCurrentManagedProfiles.clear(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java index 1a06eec1cb4d..0091bc5cc5c7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java @@ -420,7 +420,7 @@ public class NotificationLockscreenUserManagerImpl implements filter.addAction(Intent.ACTION_USER_UNLOCKED); filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - if (allowPrivateProfile()){ + if (privateSpaceFlagsEnabled()) { filter.addAction(Intent.ACTION_PROFILE_AVAILABLE); filter.addAction(Intent.ACTION_PROFILE_UNAVAILABLE); } @@ -813,13 +813,17 @@ public class NotificationLockscreenUserManagerImpl implements } private boolean profileAvailabilityActions(String action){ - return allowPrivateProfile()? + return privateSpaceFlagsEnabled()? Objects.equals(action,Intent.ACTION_PROFILE_AVAILABLE)|| Objects.equals(action,Intent.ACTION_PROFILE_UNAVAILABLE): Objects.equals(action,Intent.ACTION_MANAGED_PROFILE_AVAILABLE)|| Objects.equals(action,Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); } + private static boolean privateSpaceFlagsEnabled() { + return allowPrivateProfile() && android.multiuser.Flags.enablePrivateSpaceFeatures(); + } + @Override public void dump(PrintWriter pw, String[] args) { pw.println("NotificationLockscreenUserManager state:"); diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index 44c684c34587..b5efc44cff39 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java @@ -379,7 +379,9 @@ public class ThemeOverlayController implements CoreStartable, Dumpable { + " was received. Deferring... Managed profile? " + isManagedProfile); return; } - if (android.os.Flags.allowPrivateProfile() && isPrivateProfile(newUserHandle)) { + if (android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.enablePrivateSpaceFeatures() + && isPrivateProfile(newUserHandle)) { mDeferredThemeEvaluation = true; Log.i(TAG, "Deferring theme for private profile till user setup is complete"); return; diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java index c02583ae6f0b..ab28a2fc830f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -718,7 +718,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase { @Test public void onPrivateProfileAdded_ignoresUntilStartComplete() { - mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE); + mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); reset(mDeviceProvisionedController); when(mUserManager.isManagedProfile(anyInt())).thenReturn(false); mBroadcastReceiver.getValue().onReceive(null, diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 6f45f60f6dfa..72cef49b2f80 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -2415,7 +2415,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku AppWidgetProviderInfo info = createPartialProviderInfo(providerId, ri, existing); if (android.os.Flags.allowPrivateProfile() - && android.multiuser.Flags.disablePrivateSpaceItemsOnHome()) { + && android.multiuser.Flags.disablePrivateSpaceItemsOnHome() + && android.multiuser.Flags.enablePrivateSpaceFeatures()) { // Do not add widget providers for profiles with items restricted on home screen. if (info != null && mUserManager .getUserProperties(info.getProfile()).areItemsRestrictedOnHomeScreen()) { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 3a7ac0bd659d..d6f2694ce5a0 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1204,6 +1204,10 @@ public class NotificationManagerService extends SystemService { } } + private static boolean privateSpaceFlagsEnabled() { + return allowPrivateProfile() && android.multiuser.Flags.enablePrivateSpaceFeatures(); + } + private final class SavePolicyFileRunnable implements Runnable { @Override public void run() { @@ -2142,7 +2146,7 @@ public class NotificationManagerService extends SystemService { } private boolean isProfileUnavailable(String action) { - return allowPrivateProfile() ? + return privateSpaceFlagsEnabled() ? action.equals(Intent.ACTION_PROFILE_UNAVAILABLE) : action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); } @@ -2744,7 +2748,7 @@ public class NotificationManagerService extends SystemService { filter.addAction(Intent.ACTION_USER_REMOVED); filter.addAction(Intent.ACTION_USER_UNLOCKED); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); - if (allowPrivateProfile()){ + if (privateSpaceFlagsEnabled()){ filter.addAction(Intent.ACTION_PROFILE_UNAVAILABLE); } getContext().registerReceiverAsUser(mIntentReceiver, UserHandle.ALL, filter, null, null); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 715c9d4081b2..99e1b775e030 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -14092,7 +14092,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testProfileUnavailableIntent() throws RemoteException { - mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE); + mSetFlagsRule.enableFlags(FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); simulateProfileAvailabilityActions(Intent.ACTION_PROFILE_UNAVAILABLE); verify(mWorkerHandler).post(any(Runnable.class)); verify(mSnoozeHelper).clearData(anyInt()); @@ -14101,7 +14102,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testManagedProfileUnavailableIntent() throws RemoteException { - mSetFlagsRule.disableFlags(FLAG_ALLOW_PRIVATE_PROFILE); + mSetFlagsRule.disableFlags(FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); simulateProfileAvailabilityActions(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); verify(mWorkerHandler).post(any(Runnable.class)); verify(mSnoozeHelper).clearData(anyInt()); |