diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-10-24 23:17:43 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-10-24 23:17:43 +0000 |
commit | 0c7b01a69495a7f495aa4dee0419e0bb46040e2d (patch) | |
tree | 83b4369f411fe1c6f2ecd2c5f8f4f098a5dc79db /src | |
parent | f13109df05cd2c19b0db78c0ad9db011b0aebf00 (diff) | |
parent | 7c76a33243a725918bb26a9bdae7e6ee1bd61962 (diff) | |
download | packages_apps_Trebuchet-0c7b01a69495a7f495aa4dee0419e0bb46040e2d.tar.gz packages_apps_Trebuchet-0c7b01a69495a7f495aa4dee0419e0bb46040e2d.tar.bz2 packages_apps_Trebuchet-0c7b01a69495a7f495aa4dee0419e0bb46040e2d.zip |
Merge "Add support for work profile promise icons." into ub-launcher3-qt-future-dev
Diffstat (limited to 'src')
7 files changed, 68 insertions, 29 deletions
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 17fbb791c..f6ed70ed0 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -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()); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index c0cf13544..a012412c5 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -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)); } /** diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index cdb5c4d2b..39f69498b 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -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); } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index 1885d8f03..281274ce0 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -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); + } } diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java b/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java index 0a1811e34..48805afa0 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVQ.java @@ -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); + } } diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index 9c57e8ab5..409b21ddc 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -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; } diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java index dfd5a708b..1b98783a7 100644 --- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java +++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java @@ -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 |