/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.allapps; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.os.UserHandle; import android.os.UserManager; import androidx.annotation.IntDef; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.pm.UserCache; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.function.Predicate; /** * A Generic User Profile Manager which abstract outs the common functionality required * by user-profiles supported by Launcher *
* Concrete impls are
* {@link WorkProfileManager} which manages work profile state
* {@link PrivateProfileManager} which manages private profile state.
*/
public abstract class UserProfileManager {
public static final int STATE_UNKNOWN = 0;
public static final int STATE_ENABLED = 1;
public static final int STATE_DISABLED = 2;
public static final int STATE_TRANSITION = 3;
@IntDef(value = {
STATE_UNKNOWN,
STATE_ENABLED,
STATE_DISABLED,
STATE_TRANSITION
})
@Retention(RetentionPolicy.SOURCE)
public @interface UserProfileState { }
protected final StatsLogManager mStatsLogManager;
protected final UserManager mUserManager;
protected final UserCache mUserCache;
@UserProfileState
private int mCurrentState;
protected UserProfileManager(UserManager userManager,
StatsLogManager statsLogManager,
UserCache userCache) {
mUserManager = userManager;
mStatsLogManager = statsLogManager;
mUserCache = userCache;
}
/** Sets quiet mode as enabled/disabled for the profile type. */
protected void setQuietMode(boolean enabled) {
UI_HELPER_EXECUTOR.post(() ->
mUserCache.getUserProfiles()
.stream()
.filter(getUserMatcher())
.findFirst()
.ifPresent(userHandle ->
mUserManager.requestQuietModeEnabled(enabled, userHandle)));
}
/** Sets current state for the profile type. */
protected void setCurrentState(int state) {
mCurrentState = state;
}
/** Returns current state for the profile type. */
public int getCurrentState() {
return mCurrentState;
}
/** Returns if user profile is enabled. */
public boolean isEnabled() {
return mCurrentState == STATE_ENABLED;
}
/** Returns the UserHandle corresponding to the profile type, null in case no matches found. */
public UserHandle getProfileUser() {
return mUserCache.getUserProfiles().stream()
.filter(getUserMatcher())
.findAny()
.orElse(null);
}
/** Logs Event to StatsLogManager. */
protected void logEvents(StatsLogManager.EventEnum event) {
mStatsLogManager.logger().log(event);
}
/** Returns the matcher corresponding to profile type. */
protected abstract Predicate