summaryrefslogtreecommitdiff
path: root/src/com/android/launcher3/allapps/WorkProfileManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/allapps/WorkProfileManager.java')
-rw-r--r--src/com/android/launcher3/allapps/WorkProfileManager.java108
1 files changed, 40 insertions, 68 deletions
diff --git a/src/com/android/launcher3/allapps/WorkProfileManager.java b/src/com/android/launcher3/allapps/WorkProfileManager.java
index 1ac8d87a77..c430a36279 100644
--- a/src/com/android/launcher3/allapps/WorkProfileManager.java
+++ b/src/com/android/launcher3/allapps/WorkProfileManager.java
@@ -25,92 +25,56 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_CHANGE_PERMISSION;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_ENABLED;
-import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
+import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_WORK_PROFILE_QUIET_MODE_ENABLED;
-import android.os.Build;
-import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
import android.view.View;
-import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.launcher3.Flags;
import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem;
import com.android.launcher3.logging.StatsLogManager;
-import com.android.launcher3.model.data.ItemInfo;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.function.Predicate;
+import java.util.stream.Stream;
/**
* Companion class for {@link ActivityAllAppsContainerView} to manage work tab and personal tab
* related
- * logic based on {@link WorkProfileState}?
+ * logic based on {@link UserProfileState}?
*/
-public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActivePageChangedListener {
+public class WorkProfileManager extends UserProfileManager
+ implements PersonalWorkSlidingTabStrip.OnActivePageChangedListener {
private static final String TAG = "WorkProfileManager";
-
- public static final String KEY_WORK_EDU_STEP = "showed_work_profile_edu";
-
- public static final int STATE_ENABLED = 1;
- public static final int STATE_DISABLED = 2;
- public static final int STATE_TRANSITION = 3;
-
- /**
- * Work profile manager states
- */
- @IntDef(value = {
- STATE_ENABLED,
- STATE_DISABLED,
- STATE_TRANSITION
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface WorkProfileState { }
-
- private final UserManager mUserManager;
private final ActivityAllAppsContainerView<?> mAllApps;
- private final Predicate<ItemInfo> mMatcher;
- private final StatsLogManager mStatsLogManager;
-
private WorkModeSwitch mWorkModeSwitch;
-
- @WorkProfileState
- private int mCurrentState;
+ private final Predicate<UserHandle> mWorkProfileMatcher;
public WorkProfileManager(
UserManager userManager, ActivityAllAppsContainerView allApps,
- StatsLogManager statsLogManager) {
- mUserManager = userManager;
+ StatsLogManager statsLogManager, UserCache userCache) {
+ super(userManager, statsLogManager, userCache);
mAllApps = allApps;
- mMatcher = mAllApps.mPersonalMatcher.negate();
- mStatsLogManager = statsLogManager;
+ mWorkProfileMatcher = (user) -> userCache.getUserInfo(user).isWork();
}
/**
* Posts quite mode enable/disable call for work profile user
*/
- @RequiresApi(Build.VERSION_CODES.P)
public void setWorkProfileEnabled(boolean enabled) {
- updateCurrentState(STATE_TRANSITION);
- UI_HELPER_EXECUTOR.post(() -> {
- for (UserHandle userProfile : mUserManager.getUserProfiles()) {
- if (Process.myUserHandle().equals(userProfile)) {
- continue;
- }
- mUserManager.requestQuietModeEnabled(!enabled, userProfile);
- }
- });
+ setCurrentState(STATE_TRANSITION);
+ setQuietMode(!enabled);
}
@Override
@@ -122,7 +86,7 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
if (mWorkModeSwitch != null) {
if (page == MAIN || page == SEARCH) {
mWorkModeSwitch.animateVisibility(false);
- } else if (page == WORK && mCurrentState == STATE_ENABLED) {
+ } else if (page == WORK && getCurrentState() == STATE_ENABLED) {
mWorkModeSwitch.animateVisibility(true);
}
}
@@ -132,7 +96,13 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
* Requests work profile state from {@link AllAppsStore} and updates work profile related views
*/
public void reset() {
- boolean isEnabled = !mAllApps.getAppsStore().hasModelFlag(FLAG_QUIET_MODE_ENABLED);
+ int quietModeFlag;
+ if (Flags.enablePrivateSpace()) {
+ quietModeFlag = FLAG_WORK_PROFILE_QUIET_MODE_ENABLED;
+ } else {
+ quietModeFlag = FLAG_QUIET_MODE_ENABLED;
+ }
+ boolean isEnabled = !mAllApps.getAppsStore().hasModelFlag(quietModeFlag);
updateCurrentState(isEnabled ? STATE_ENABLED : STATE_DISABLED);
if (mWorkModeSwitch != null) {
// reset the position of the button and clear IME insets.
@@ -141,17 +111,17 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
}
}
- private void updateCurrentState(@WorkProfileState int currentState) {
- mCurrentState = currentState;
+ private void updateCurrentState(@UserProfileState int currentState) {
+ setCurrentState(currentState);
if (getAH() != null) {
getAH().mAppsList.updateAdapterItems();
}
if (mWorkModeSwitch != null) {
updateWorkFAB(mAllApps.getCurrentPage());
}
- if (mCurrentState == STATE_ENABLED) {
+ if (getCurrentState() == STATE_ENABLED) {
attachWorkModeSwitch();
- } else if (mCurrentState == STATE_DISABLED) {
+ } else if (getCurrentState() == STATE_DISABLED) {
detachWorkModeSwitch();
}
}
@@ -191,10 +161,6 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
mWorkModeSwitch = null;
}
- public Predicate<ItemInfo> getMatcher() {
- return mMatcher;
- }
-
@Nullable
public WorkModeSwitch getWorkModeSwitch() {
return mWorkModeSwitch;
@@ -204,25 +170,25 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
return mAllApps.mAH.get(WORK);
}
- public int getCurrentState() {
- return mCurrentState;
- }
-
/**
* returns whether or not work apps should be visible in work tab.
*/
public boolean shouldShowWorkApps() {
- return mCurrentState != WorkProfileManager.STATE_DISABLED;
+ return getCurrentState() != WorkProfileManager.STATE_DISABLED;
+ }
+
+ public boolean hasWorkApps() {
+ return Stream.of(mAllApps.getAppsStore().getApps()).anyMatch(getItemInfoMatcher());
}
/**
* Adds work profile specific adapter items to adapterItems and returns number of items added
*/
public int addWorkItems(ArrayList<AdapterItem> adapterItems) {
- if (mCurrentState == WorkProfileManager.STATE_DISABLED) {
+ if (getCurrentState() == WorkProfileManager.STATE_DISABLED) {
//add disabled card here.
adapterItems.add(new AdapterItem(VIEW_TYPE_WORK_DISABLED_CARD));
- } else if (mCurrentState == WorkProfileManager.STATE_ENABLED && !isEduSeen()) {
+ } else if (getCurrentState() == WorkProfileManager.STATE_ENABLED && !isEduSeen()) {
adapterItems.add(new AdapterItem(VIEW_TYPE_WORK_EDU_CARD));
}
return adapterItems.size();
@@ -233,8 +199,9 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
}
private void onWorkFabClicked(View view) {
- if (Utilities.ATLEAST_P && mCurrentState == STATE_ENABLED && mWorkModeSwitch.isEnabled()) {
- mStatsLogManager.logger().log(LAUNCHER_TURN_OFF_WORK_APPS_TAP);
+ if (Utilities.ATLEAST_P && getCurrentState() == STATE_ENABLED
+ && mWorkModeSwitch.isEnabled()) {
+ logEvents(LAUNCHER_TURN_OFF_WORK_APPS_TAP);
setWorkProfileEnabled(false);
}
}
@@ -265,4 +232,9 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP
}
};
}
+
+ @Override
+ public Predicate<UserHandle> getUserMatcher() {
+ return mWorkProfileMatcher;
+ }
}