Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d34b2dab authored by Olivier Nshimiye's avatar Olivier Nshimiye
Browse files

Add support for LauncherUersInfo config

This is a bundle that contains additional configurations for this user
in launchers. For now, this has a boolean key
'private_space_entrypoint_hidden' indicating whether private space
should be hidden in launcher when locked.

Flag: android.multiuser.add_launcher_user_config

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

Change-Id: I9c88bb6bfbbd0d7d01a3bcb0335201f1a89517e4
parent 3c6c3f7c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -12675,6 +12675,7 @@ package android.content.pm {
    method public abstract void onPackagesUnavailable(String[], android.os.UserHandle, boolean);
    method public void onPackagesUnsuspended(String[], android.os.UserHandle);
    method public void onShortcutsChanged(@NonNull String, @NonNull java.util.List<android.content.pm.ShortcutInfo>, @NonNull android.os.UserHandle);
    method @FlaggedApi("android.multiuser.add_launcher_user_config") public void onUserConfigChanged(@NonNull android.content.pm.LauncherUserInfo);
  }
  public static final class LauncherApps.PinItemRequest implements android.os.Parcelable {
@@ -12710,10 +12711,12 @@ package android.content.pm {
  @FlaggedApi("android.os.allow_private_profile") public final class LauncherUserInfo implements android.os.Parcelable {
    method @FlaggedApi("android.os.allow_private_profile") public int describeContents();
    method @FlaggedApi("android.multiuser.add_launcher_user_config") @NonNull public android.os.Bundle getUserConfig();
    method @FlaggedApi("android.os.allow_private_profile") public int getUserSerialNumber();
    method @FlaggedApi("android.os.allow_private_profile") @NonNull public String getUserType();
    method @FlaggedApi("android.os.allow_private_profile") public void writeToParcel(@NonNull android.os.Parcel, int);
    field @FlaggedApi("android.os.allow_private_profile") @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherUserInfo> CREATOR;
    field @FlaggedApi("android.multiuser.add_launcher_user_config") public static final String PRIVATE_SPACE_ENTRYPOINT_HIDDEN = "private_space_entrypoint_hidden";
  }
  public final class ModuleInfo implements android.os.Parcelable {
+2 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.content.pm;

import android.content.pm.LauncherUserInfo;
import android.content.pm.ParceledListSlice;
import android.os.Bundle;
import android.os.UserHandle;
@@ -34,4 +35,5 @@ oneway interface IOnAppsChangedListener {
    void onPackagesUnsuspended(in UserHandle user, in String[] packageNames);
    void onShortcutChanged(in UserHandle user, String packageName, in ParceledListSlice shortcuts);
    void onPackageLoadingProgressChanged(in UserHandle user, String packageName, float progress);
    void onUserConfigChanged(in LauncherUserInfo launcherUserInfo);
}
+46 −0
Original line number Diff line number Diff line
@@ -182,6 +182,8 @@ public class LauncherApps {
     */
    public static final int FLAG_CACHE_PEOPLE_TILE_SHORTCUTS = 2;

    private static final String LAUNCHER_USER_INFO_EXTRA_KEY = "launcher_user_info";

    /** @hide */
    @IntDef(flag = false, prefix = { "FLAG_CACHE_" }, value = {
            FLAG_CACHE_NOTIFICATION_SHORTCUTS,
@@ -349,6 +351,19 @@ public class LauncherApps {
         */
        public void onPackageLoadingProgressChanged(@NonNull String packageName,
                @NonNull UserHandle user, float progress) {}

        /**
         * Indicates {@link LauncherUserInfo} configs for a user have changed. The new
         * {@link LauncherUserInfo} is given as a parameter.
         *
         * {@link LauncherUserInfo#getUserConfig} to get the updated user configs.
         *
         * @param launcherUserInfo The LauncherUserInfo of the user/profile whose configs have
         *                         changed.
         */
        @FlaggedApi(android.multiuser.Flags.FLAG_ADD_LAUNCHER_USER_CONFIG)
        public void onUserConfigChanged(@NonNull LauncherUserInfo launcherUserInfo) {
        }
    }

    /**
@@ -2168,6 +2183,21 @@ public class LauncherApps {
                }
            }
        }

        public void onUserConfigChanged(LauncherUserInfo launcherUserInfo) {
            if (DEBUG) {
                if (Flags.allowPrivateProfile()
                        && android.multiuser.Flags.addLauncherUserConfig()) {
                    Log.d(TAG, "OnUserConfigChanged for user type " + launcherUserInfo.getUserType()
                            + ", new userConfig: " + launcherUserInfo.getUserConfig());
                }
            }
            synchronized (LauncherApps.this) {
                for (CallbackMessageHandler callback : mCallbacks) {
                    callback.postOnUserConfigChanged(launcherUserInfo);
                }
            }
        }
    };

    /**
@@ -2224,6 +2254,7 @@ public class LauncherApps {
        private static final int MSG_UNSUSPENDED = 7;
        private static final int MSG_SHORTCUT_CHANGED = 8;
        private static final int MSG_LOADING_PROGRESS_CHANGED = 9;
        private static final int MSG_USER_CONFIG_CHANGED = 10;

        private final LauncherApps.Callback mCallback;

@@ -2278,6 +2309,14 @@ public class LauncherApps {
                    mCallback.onPackageLoadingProgressChanged(info.packageName, info.user,
                            info.mLoadingProgress);
                    break;
                case MSG_USER_CONFIG_CHANGED:
                    if (Flags.allowPrivateProfile()
                            && android.multiuser.Flags.addLauncherUserConfig()) {
                        mCallback.onUserConfigChanged(Objects.requireNonNull(
                                info.launcherExtras.getParcelable(LAUNCHER_USER_INFO_EXTRA_KEY,
                                        LauncherUserInfo.class)));
                    }
                    break;
            }
        }

@@ -2353,6 +2392,13 @@ public class LauncherApps {
            info.mLoadingProgress = progress;
            obtainMessage(MSG_LOADING_PROGRESS_CHANGED, info).sendToTarget();
        }

        public void postOnUserConfigChanged(LauncherUserInfo launcherUserInfo) {
            CallbackInfo info = new CallbackInfo();
            info.launcherExtras = new Bundle();
            info.launcherExtras.putParcelable(LAUNCHER_USER_INFO_EXTRA_KEY, launcherUserInfo);
            obtainMessage(MSG_USER_CONFIG_CHANGED, info).sendToTarget();
        }
    }

    /**
+44 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.content.pm;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.os.Bundle;
import android.os.Flags;
import android.os.Parcel;
import android.os.Parcelable;
@@ -31,11 +32,25 @@ import android.os.UserManager;
@FlaggedApi(Flags.FLAG_ALLOW_PRIVATE_PROFILE)
public final class LauncherUserInfo implements Parcelable {

    /**
     * A boolean extra indicating whether the private space entrypoint should be hidden when locked.
     *
     * @see #getUserConfig
     */
    @FlaggedApi(android.multiuser.Flags.FLAG_ADD_LAUNCHER_USER_CONFIG)
    public static final String PRIVATE_SPACE_ENTRYPOINT_HIDDEN =
            "private_space_entrypoint_hidden";

    private final String mUserType;

    // Serial number for the user, should be same as in the {@link UserInfo} object.
    private final int mUserSerialNumber;

    // Additional configs for the user, e.g., whether to hide the private space entrypoint when
    // locked.
    private final Bundle mUserConfig;


    /**
     * Returns type of the user as defined in {@link UserManager}. e.g.,
     * {@link UserManager.USER_TYPE_PROFILE_MANAGED} or {@link UserManager.USER_TYPE_PROFILE_ClONE}
@@ -49,6 +64,17 @@ public final class LauncherUserInfo implements Parcelable {
        return mUserType;
    }

    /**
     * Returns additional configs for this launcher user
     *
     * @see #PRIVATE_SPACE_ENTRYPOINT_HIDDEN
     */
    @FlaggedApi(android.multiuser.Flags.FLAG_ADD_LAUNCHER_USER_CONFIG)
    @NonNull
    public Bundle getUserConfig() {
        return mUserConfig;
    }

    /**
     * Returns serial number of user as returned by
     * {@link UserManager#getSerialNumberForUser(UserHandle)}
@@ -63,6 +89,7 @@ public final class LauncherUserInfo implements Parcelable {
    private LauncherUserInfo(@NonNull Parcel in) {
        mUserType = in.readString16NoHelper();
        mUserSerialNumber = in.readInt();
        mUserConfig = in.readBundle(Bundle.class.getClassLoader());
    }

    @Override
@@ -70,6 +97,7 @@ public final class LauncherUserInfo implements Parcelable {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString16NoHelper(mUserType);
        dest.writeInt(mUserSerialNumber);
        dest.writeBundle(mUserConfig);
    }

    @Override
@@ -99,23 +127,36 @@ public final class LauncherUserInfo implements Parcelable {
        private final String mUserType;

        private final int mUserSerialNumber;
        private final Bundle mUserConfig;


        @FlaggedApi(android.multiuser.Flags.FLAG_ADD_LAUNCHER_USER_CONFIG)
        public Builder(@NonNull String userType, int userSerialNumber, @NonNull Bundle config) {
            this.mUserType = userType;
            this.mUserSerialNumber = userSerialNumber;
            this.mUserConfig = config;
        }

        public Builder(@NonNull String userType, int userSerialNumber) {
            this.mUserType = userType;
            this.mUserSerialNumber = userSerialNumber;
            this.mUserConfig = new Bundle();
        }

        /**
         * Builds the LauncherUserInfo object
         */
        @NonNull public LauncherUserInfo build() {
            return new LauncherUserInfo(this.mUserType, this.mUserSerialNumber);
        @NonNull
        public LauncherUserInfo build() {
            return new LauncherUserInfo(this.mUserType, this.mUserSerialNumber, this.mUserConfig);
        }

    } // End builder

    private LauncherUserInfo(@NonNull  String userType, int userSerialNumber) {
    private LauncherUserInfo(@NonNull String userType, int userSerialNumber,
            @NonNull Bundle config) {
        this.mUserType = userType;
        this.mUserSerialNumber = userSerialNumber;
        this.mUserConfig = config;
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -543,3 +543,10 @@ flag {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
    name: "add_launcher_user_config"
    namespace: "profile_experiences"
    description: "Add support for LauncherUserInfo configs"
    bug: "346553745"
}
Loading