/* * 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.allapps.ActivityAllAppsContainerView.AdapterHolder.MAIN; import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_PRIVATE_SPACE_HEADER; import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.UserHandle; import android.os.UserManager; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.pm.UserCache; import com.android.launcher3.util.Preconditions; import java.util.ArrayList; import java.util.function.Predicate; /** * Companion class for {@link ActivityAllAppsContainerView} to manage private space section related * logic in the Personal tab. */ public class PrivateProfileManager extends UserProfileManager { private static final String SAFETY_CENTER_INTENT = Intent.ACTION_SAFETY_CENTER; private static final String PS_SETTINGS_FRAGMENT_KEY = ":settings:fragment_args_key"; private static final String PS_SETTINGS_FRAGMENT_VALUE = "AndroidPrivateSpace_personal"; private final ActivityAllAppsContainerView mAllApps; private final Predicate mPrivateProfileMatcher; public PrivateProfileManager(UserManager userManager, UserCache userCache, ActivityAllAppsContainerView allApps, StatsLogManager statsLogManager) { super(userManager, statsLogManager, userCache); mAllApps = allApps; mPrivateProfileMatcher = (user) -> userCache.getUserInfo(user).isPrivate(); } /** Adds Private Space Header to the layout. */ public int addPrivateSpaceHeader(ArrayList adapterItems) { adapterItems.add(new BaseAllAppsAdapter.AdapterItem(VIEW_TYPE_PRIVATE_SPACE_HEADER)); mAllApps.mAH.get(MAIN).mAdapter.notifyItemInserted(adapterItems.size() - 1); return adapterItems.size(); } /** Disables quiet mode for Private Space User Profile. */ public void unlockPrivateProfile() { // TODO (b/302666597): Log this event to WW. enableQuietMode(false); } /** Enables quiet mode for Private Space User Profile. */ public void lockPrivateProfile() { // TODO (b/302666597): Log this event to WW. enableQuietMode(true); } /** Whether private profile should be hidden on Launcher. */ public boolean isPrivateSpaceHidden() { // TODO (b/289223923): Update this when we are able to read PsSettingsFlag // from SettingsProvider. return false; } /** Resets the current state of Private Profile, w.r.t. to Launcher. */ public void reset() { boolean isEnabled = !mAllApps.getAppsStore() .hasModelFlag(FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED); int updatedState = isEnabled ? STATE_ENABLED : STATE_DISABLED; setCurrentState(updatedState); } /** Opens the Private Space Settings Entry Point. */ public void openPrivateSpaceSettings() { // TODO (b/302666597): Log this event to WW. Intent psSettingsIntent = new Intent(SAFETY_CENTER_INTENT); psSettingsIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE); mAllApps.getContext().startActivity(psSettingsIntent); } /** * Whether Private Space Settings Entry Point should be made visible. */ public boolean isPrivateSpaceSettingsButtonVisible() { Preconditions.assertNonUiThread(); Intent psSettingsIntent = new Intent(SAFETY_CENTER_INTENT); psSettingsIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE); ResolveInfo resolveInfo = mAllApps.getContext().getPackageManager() .resolveActivity(psSettingsIntent, PackageManager.MATCH_SYSTEM_ONLY); return resolveInfo != null; } /** Posts quiet mode enable/disable call for private profile. */ private void enableQuietMode(boolean enable) { setQuietMode(enable); } @Override public Predicate getUserMatcher() { return mPrivateProfileMatcher; } }