Merge "Add support for work profile promise icons." into ub-launcher3-qt-future-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0c7b01a694
@@ -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());
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user