Listen to LauncherUserInfo config changes and hide/unhide private space

entrypoint accordingly

Flag: android.multiuser.add_launcher_user_config

Bug: 346553745
Test: Manual - verified on device
Test: atest LauncherAppsTests

Change-Id: I202c4c76af4f96d5b3226daffcfebc2f9b9703b1
This commit is contained in:
Olivier Nshimiye
2024-09-10 19:20:42 +00:00
parent be17fb8a63
commit 39dee43e12
7 changed files with 80 additions and 24 deletions
+25 -8
View File
@@ -16,8 +16,11 @@
package com.android.launcher3.util;
import static android.multiuser.Flags.addLauncherUserConfig;
import static com.android.launcher3.LauncherConstants.ActivityCodes.REQUEST_HOME_ROLE;
import android.annotation.SuppressLint;
import android.app.ActivityOptions;
import android.app.Person;
import android.app.role.RoleManager;
@@ -25,9 +28,12 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherUserInfo;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
@@ -45,6 +51,7 @@ import com.android.launcher3.dagger.LauncherAppSingleton;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.inject.Inject;
@@ -85,22 +92,32 @@ public class ApiWrapper {
/**
* Returns a map of all users on the device to their corresponding UI properties
*/
@SuppressLint("NewApi")
public Map<UserHandle, UserIconInfo> queryAllUsers() {
UserManager um = mContext.getSystemService(UserManager.class);
Map<UserHandle, UserIconInfo> users = new ArrayMap<>();
List<UserHandle> usersActual = um.getUserProfiles();
if (usersActual != null) {
for (UserHandle user : usersActual) {
long serial = um.getSerialNumberForUser(user);
// Simple check to check if the provided user is work profile
// TODO: Migrate to a better platform API
NoopDrawable d = new NoopDrawable();
boolean isWork = (d != mContext.getPackageManager().getUserBadgedIcon(d, user));
UserIconInfo info = new UserIconInfo(
user,
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN,
serial);
UserIconInfo info;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
LauncherUserInfo userInfo = Objects.requireNonNull(
mContext.getSystemService(LauncherApps.class)).getLauncherUserInfo(
user);
long serial = Objects.requireNonNull(userInfo).getUserSerialNumber();
info = addLauncherUserConfig() ? new UserIconInfo(user,
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN, serial,
userInfo.getUserConfig()) : new UserIconInfo(user,
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN, serial);
} else {
long serial = um.getSerialNumberForUser(user);
// Simple check to check if the provided user is work profile
// TODO: Migrate to a better platform API
info = new UserIconInfo(user,
isWork ? UserIconInfo.TYPE_WORK : UserIconInfo.TYPE_MAIN, serial);
}
users.put(user, info);
}
}