AppClone: Add new tab only if any user handle has the property set.
This will ensure that a new tab is not created for clone profile. The
existing behavior of creating work tab when managed profile is present
on device remains as-is.
Bug: 248204976
Test: manual (verfied with primary, clone and managed profile present on
device at the same time)
Test: make RunSettingsRoboTests -j
Change-Id: I116a0de69c51e90aa59fdb47e904c567e5d62102
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 8ee4eba..e57a32d 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -41,6 +41,7 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
+import android.content.pm.UserProperties;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -1163,7 +1164,7 @@
final boolean isWork = args != null ? args.getInt(ProfileSelectFragment.EXTRA_PROFILE)
== ProfileSelectFragment.ProfileType.WORK : false;
try {
- if (activity.getSystemService(UserManager.class).getUserProfiles().size() > 1
+ if (isNewTabNeeded(activity)
&& ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null
&& !isWork && !isPersonal) {
f = Fragment.instantiate(activity,
@@ -1178,6 +1179,24 @@
}
/**
+ * Checks if a new tab is needed or not for any user profile associated with the context user.
+ *
+ * <p> Checks if any user has the property {@link UserProperties#SHOW_IN_SETTINGS_SEPARATE} set.
+ */
+ public static boolean isNewTabNeeded(Activity activity) {
+ UserManager userManager = activity.getSystemService(UserManager.class);
+ List<UserHandle> profiles = userManager.getUserProfiles();
+ for (UserHandle userHandle : profiles) {
+ UserProperties userProperties = userManager.getUserProperties(userHandle);
+ if (userProperties.getShowInSettings()
+ == UserProperties.SHOW_IN_SETTINGS_SEPARATE) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Returns true if current binder uid is Settings Intelligence.
*/
public static boolean isSettingsIntelligence(Context context) {
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index b678e24..a78b332 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -478,8 +478,9 @@
mFilterAdapter.enableFilter(filterType);
if (mListType == LIST_TYPE_MAIN) {
- if (UserManager.get(getActivity()).getUserProfiles().size() > 1 && !mIsWorkOnly
- && !mIsPersonalOnly) {
+ // Apply the personal and work filter only if new tab should be added
+ // for a given user profile. Else let it use the default all apps filter.
+ if (Utils.isNewTabNeeded(getActivity()) && !mIsWorkOnly && !mIsPersonalOnly) {
mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
mFilterAdapter.enableFilter(FILTER_APPS_WORK);
}