From d3ea0f098e7ddca7af7edded12775ac9bc5069b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CAnkita?= Date: Thu, 22 Sep 2022 09:33:54 +0000 Subject: [PATCH] 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 --- src/com/android/settings/Utils.java | 21 ++++++++++++++++++- .../ManageApplications.java | 5 +++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 8ee4ebac502..e57a32d6734 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -41,6 +41,7 @@ import android.content.pm.PackageManager; 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 @@ public final class Utils extends com.android.settingslib.Utils { 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, @@ -1177,6 +1178,24 @@ public final class Utils extends com.android.settingslib.Utils { return f; } + /** + * Checks if a new tab is needed or not for any user profile associated with the context user. + * + *

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 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. */ diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index b678e24b5e2..a78b3322846 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -478,8 +478,9 @@ public class ManageApplications extends InstrumentedFragment 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); }