Merge "Add support for work profile promise icons." into ub-launcher3-qt-future-dev

This commit is contained in:
TreeHugger Robot
2019-10-24 23:17:43 +00:00
committed by Android (Google) Code Review
7 changed files with 68 additions and 29 deletions
@@ -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
View File
@@ -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));
}
/**
@@ -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);
}
@@ -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);
}
}
@@ -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);
}
}
@@ -28,7 +28,6 @@ import android.os.UserHandle;
import android.text.TextUtils;
import android.util.SparseArray;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.SessionCommitReceiver;
import com.android.launcher3.Utilities;
import com.android.launcher3.icons.IconCache;
@@ -63,8 +62,8 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat {
mAppContext = context.getApplicationContext();
mInstaller = context.getPackageManager().getPackageInstaller();
mCache = LauncherAppState.getInstance(context).getIconCache();
mInstaller.registerSessionCallback(mCallback, MODEL_EXECUTOR.getHandler());
mLauncherApps = LauncherAppsCompat.getInstance(context);
mLauncherApps.registerSessionCallback(MODEL_EXECUTOR, mCallback);
mPromiseIconIds = IntSet.wrap(IntArray.fromConcatString(
getPrefs(context).getString(PROMISE_ICON_IDS, "")));
@@ -126,7 +125,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat {
@Override
public void onStop() {
mInstaller.unregisterSessionCallback(mCallback);
mLauncherApps.unregisterSessionCallback(mCallback);
}
@Thunk void sendUpdate(PackageInstallInfo info) {
@@ -222,12 +221,14 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat {
private SessionInfo pushSessionDisplayToLauncher(int sessionId) {
SessionInfo session = verify(mInstaller.getSessionInfo(sessionId));
if (session != null && session.getAppPackageName() != null) {
UserHandle user = getUserHandle(session);
mActiveSessions.put(session.getSessionId(),
new PackageUserKey(session.getAppPackageName(), getUserHandle(session)));
addSessionInfoToCache(session, getUserHandle(session));
new PackageUserKey(session.getAppPackageName(), user));
addSessionInfoToCache(session, user);
LauncherAppState app = LauncherAppState.getInstanceNoCreate();
if (app != null) {
app.getModel().updateSessionDisplayInfo(session.getAppPackageName());
app.getModel().updateSessionDisplayInfo(session.getAppPackageName(),
user);
}
return session;
}
@@ -117,25 +117,30 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask {
}
SessionInfo sessionInfo = packageInstaller.getActiveSessionInfo(item.user,
packageName);
List<LauncherActivityInfo> activities = launcherApps
.getActivityList(packageName, item.user);
boolean hasActivity = activities != null && !activities.isEmpty();
if (sessionInfo == null) {
List<LauncherActivityInfo> activities = launcherApps
.getActivityList(packageName, item.user);
if (activities != null && !activities.isEmpty()) {
// App was installed while launcher was in the background.
itemInfo = new AppInfo(app.getContext(), activities.get(0), item.user)
.makeWorkspaceItem();
WorkspaceItemInfo wii = (WorkspaceItemInfo) itemInfo;
wii.title = "";
wii.applyFrom(app.getIconCache().getDefaultIcon(item.user));
app.getIconCache().getTitleAndIcon(wii,
((WorkspaceItemInfo) itemInfo).usingLowResIcon());
} else {
if (!hasActivity) {
// Session was cancelled, do not add.
continue;
}
} else {
workspaceInfo.setInstallProgress((int) sessionInfo.getProgress());
}
if (hasActivity) {
// App was installed while launcher was in the background,
// or app was already installed for another user.
itemInfo = new AppInfo(app.getContext(), activities.get(0), item.user)
.makeWorkspaceItem();
WorkspaceItemInfo wii = (WorkspaceItemInfo) itemInfo;
wii.title = "";
wii.applyFrom(app.getIconCache().getDefaultIcon(item.user));
app.getIconCache().getTitleAndIcon(wii,
((WorkspaceItemInfo) itemInfo).usingLowResIcon());
}
}
// Add the shortcut to the db