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

Commit 7c76a332 authored by Jon Miranda's avatar Jon Miranda Committed by Jonathan Miranda
Browse files

Add support for work profile promise icons.

- We were not getting callbacks for sessions created under work profile.
- We did not pass in the user when creating the workspace item infos.
- Added check for if app is installed before adding item to workspace
  to prevent any stale promise icons. This seems to happen when uninstalling
  and then immediately reinstalling an application.

Bug: 141556707
Change-Id: Ie0320f3ede70b6c7543cb60c3b95a2fe398eecb5
Merged-In: I2db2d8da449c37eb248a59fbc9e7b517f50855c1
parent ec72bf63
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -133,7 +133,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver {

            String pkg = getIntentPackage(info.launchIntent);
            if (!TextUtils.isEmpty(pkg)
                    && !launcherApps.isPackageEnabledForProfile(pkg, info.user)) {
                    && !launcherApps.isPackageEnabledForProfile(pkg, info.user)
                    && !info.isActivity) {
                if (DBG) {
                    Log.d(TAG, "Ignoring shortcut for absent package: " + info.launchIntent);
                }
@@ -454,6 +455,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
                    .object()
                    .key(LAUNCH_INTENT_KEY).value(launchIntent.toUri(0))
                    .key(NAME_KEY).value(name)
                    .key(USER_HANDLE_KEY).value(
                            UserManagerCompat.getInstance(mContext).getSerialNumberForUser(user))
                    .key(APP_SHORTCUT_TYPE_KEY).value(isActivity);
                if (icon != null) {
                    byte[] iconByteArray = GraphicsUtils.flattenBitmap(icon);
@@ -475,7 +478,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver {

        public Pair<ItemInfo, Object> getItemInfo() {
            if (isActivity) {
                WorkspaceItemInfo si = createWorkspaceItemInfo(data,
                WorkspaceItemInfo si = createWorkspaceItemInfo(data, user,
                        LauncherAppState.getInstance(mContext));
                si.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
                si.status |= WorkspaceItemInfo.FLAG_AUTOINSTALL_ICON;
@@ -500,7 +503,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
                return Pair.create(widgetInfo, providerInfo);
            } else {
                WorkspaceItemInfo itemInfo =
                        createWorkspaceItemInfo(data, LauncherAppState.getInstance(mContext));
                        createWorkspaceItemInfo(data, user, LauncherAppState.getInstance(mContext));
                return Pair.create(itemInfo, null);
            }
        }
@@ -618,7 +621,8 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
        return new PendingInstallShortcutInfo(info, original.mContext);
    }

    private static WorkspaceItemInfo createWorkspaceItemInfo(Intent data, LauncherAppState app) {
    private static WorkspaceItemInfo createWorkspaceItemInfo(Intent data, UserHandle user,
            LauncherAppState app) {
        if (data == null) {
            Log.e(TAG, "Can't construct WorkspaceItemInfo with null data");
            return null;
@@ -635,10 +639,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
        }

        final WorkspaceItemInfo info = new WorkspaceItemInfo();

        // Only support intents for current user for now. Intents sent from other
        // users wouldn't get here without intent forwarding anyway.
        info.user = Process.myUserHandle();
        info.user = user;

        BitmapInfo iconInfo = null;
        LauncherIcons li = LauncherIcons.obtain(app.getContext());
+2 −2
Original line number Diff line number Diff line
@@ -134,11 +134,11 @@ public class LauncherModel extends BroadcastReceiver
    /**
     * Updates the icons and label of all pending icons for the provided package name.
     */
    public void updateSessionDisplayInfo(final String packageName) {
    public void updateSessionDisplayInfo(final String packageName, final UserHandle user) {
        HashSet<String> packages = new HashSet<>();
        packages.add(packageName);
        enqueueModelUpdateTask(new CacheDataUpdatedTask(
                CacheDataUpdatedTask.OP_SESSION_UPDATE, Process.myUserHandle(), packages));
                CacheDataUpdatedTask.OP_SESSION_UPDATE, user, packages));
    }

    /**
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionCallback;
import android.content.pm.ShortcutInfo;
import android.graphics.Rect;
import android.os.Bundle;
@@ -30,6 +31,7 @@ import android.os.UserHandle;
import androidx.annotation.Nullable;

import com.android.launcher3.Utilities;
import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.PackageUserKey;

import java.util.List;
@@ -90,4 +92,8 @@ public abstract class LauncherAppsCompat {
            @Nullable PackageUserKey packageUser);

    public abstract List<PackageInstaller.SessionInfo> getAllPackageInstallerSessions();

    public abstract void registerSessionCallback(LooperExecutor executor,
                                                 SessionCallback sessionCallback);
    public abstract void unregisterSessionCallback(SessionCallback sessionCallback);
}
+14 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionCallback;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ShortcutInfo;
@@ -35,6 +36,7 @@ import android.util.Log;

import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVL;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.PackageUserKey;

import java.util.ArrayList;
@@ -212,5 +214,17 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
    public List<PackageInstaller.SessionInfo> getAllPackageInstallerSessions() {
        return mContext.getPackageManager().getPackageInstaller().getAllSessions();
    }

    @Override
    public void registerSessionCallback(LooperExecutor executor, SessionCallback sessionCallback) {
        mContext.getPackageManager().getPackageInstaller().registerSessionCallback(sessionCallback,
                executor.getHandler());
    }

    @Override
    public void unregisterSessionCallback(SessionCallback sessionCallback) {
        mContext.getPackageManager().getPackageInstaller()
                .unregisterSessionCallback(sessionCallback);
    }
}
+13 −1
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package com.android.launcher3.compat;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionCallback;

import com.android.launcher3.util.LooperExecutor;

import java.util.List;

@@ -33,4 +35,14 @@ public class LauncherAppsCompatVQ extends LauncherAppsCompatVO {
    public List<PackageInstaller.SessionInfo> getAllPackageInstallerSessions() {
        return mLauncherApps.getAllPackageInstallerSessions();
    }

    @Override
    public void registerSessionCallback(LooperExecutor executor, SessionCallback sessionCallback) {
        mLauncherApps.registerPackageInstallerSessionCallback(executor, sessionCallback);
    }

    @Override
    public void unregisterSessionCallback(SessionCallback sessionCallback) {
        mLauncherApps.unregisterPackageInstallerSessionCallback(sessionCallback);
    }
}
Loading