Merge "Add logging for adding pending icons to the workspace." into sc-dev am: 74aacfd407
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/14235968 Change-Id: Ic5d9506c597c49e16dde47113caf1ca08e1590dd
This commit is contained in:
committed by
Automerger Merge Worker
commit
c23fe8cbdd
@@ -71,7 +71,7 @@ public class SessionCommitReceiver extends BroadcastReceiver {
|
||||
return;
|
||||
}
|
||||
|
||||
Log.i(LOG,
|
||||
Log.d(LOG,
|
||||
"Adding package name to install queue. Package name: " + info.getAppPackageName()
|
||||
+ ", has app icon: " + (info.getAppIcon() != null)
|
||||
+ ", has app label: " + !TextUtils.isEmpty(info.getAppLabel()));
|
||||
|
||||
@@ -32,11 +32,13 @@ import com.android.launcher3.model.BgDataModel.Callbacks;
|
||||
import com.android.launcher3.model.data.AppInfo;
|
||||
import com.android.launcher3.model.data.FolderInfo;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.model.data.ItemInfoWithIcon;
|
||||
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
||||
import com.android.launcher3.model.data.WorkspaceItemInfo;
|
||||
import com.android.launcher3.pm.InstallSessionHelper;
|
||||
import com.android.launcher3.pm.PackageInstallInfo;
|
||||
import com.android.launcher3.util.GridOccupancy;
|
||||
import com.android.launcher3.util.IOUtils;
|
||||
import com.android.launcher3.util.IntArray;
|
||||
import com.android.launcher3.util.PackageManagerHelper;
|
||||
|
||||
@@ -126,6 +128,12 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask {
|
||||
}
|
||||
SessionInfo sessionInfo = packageInstaller.getActiveSessionInfo(item.user,
|
||||
packageName);
|
||||
|
||||
if (!packageInstaller.verifySessionInfo(sessionInfo)) {
|
||||
Log.d(LOG, "Item info failed session info verification: "
|
||||
+ workspaceInfo);
|
||||
}
|
||||
|
||||
List<LauncherActivityInfo> activities = launcherApps
|
||||
.getActivityList(packageName, item.user);
|
||||
boolean hasActivity = activities != null && !activities.isEmpty();
|
||||
@@ -171,7 +179,15 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask {
|
||||
// Save the WorkspaceItemInfo for binding in the workspace
|
||||
addedItemsFinal.add(itemInfo);
|
||||
|
||||
Log.i(LOG, "Adding item info to workspace: " + itemInfo);
|
||||
// log bitmap and label
|
||||
Log.d(LOG, "Adding item info to workspace: " + itemInfo);
|
||||
if (itemInfo instanceof ItemInfoWithIcon) {
|
||||
ItemInfoWithIcon infoWithIcon = (ItemInfoWithIcon) itemInfo;
|
||||
|
||||
Log.d(LOG, "Item info icon base 64 string: "
|
||||
+ infoWithIcon.bitmap.icon == null
|
||||
? "null" : IOUtils.toBase64String(infoWithIcon.bitmap.icon));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -130,6 +130,7 @@ public class ItemInstallQueue {
|
||||
|
||||
// Add the items and clear queue
|
||||
if (!installQueue.isEmpty()) {
|
||||
// add log
|
||||
launcher.getModel().addAndBindAddedWorkspaceItems(installQueue);
|
||||
}
|
||||
mItems.clear();
|
||||
@@ -184,14 +185,20 @@ public class ItemInstallQueue {
|
||||
}
|
||||
|
||||
private void queuePendingShortcutInfo(PendingInstallShortcutInfo info) {
|
||||
final Exception stackTrace = new Exception();
|
||||
|
||||
// Queue the item up for adding if launcher has not loaded properly yet
|
||||
MODEL_EXECUTOR.post(() -> {
|
||||
Pair<ItemInfo, Object> itemInfo = info.getItemInfo(mContext);
|
||||
if (itemInfo == null) {
|
||||
Log.i(LOG, "Adding PendingInstallShortcutInfo with no attached info to queue.");
|
||||
Log.d(LOG,
|
||||
"Adding PendingInstallShortcutInfo with no attached info to queue.",
|
||||
stackTrace);
|
||||
} else {
|
||||
Log.i(LOG, "Adding PendingInstallShortcutInfo to queue. Attached info: "
|
||||
+ itemInfo.first);
|
||||
Log.d(LOG,
|
||||
"Adding PendingInstallShortcutInfo to queue. Attached info: "
|
||||
+ itemInfo.first,
|
||||
stackTrace);
|
||||
}
|
||||
|
||||
addToQueue(info);
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.content.pm.LauncherApps;
|
||||
import android.content.pm.PackageInstaller;
|
||||
import android.content.pm.PackageInstaller.SessionInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Build;
|
||||
import android.os.Process;
|
||||
import android.os.UserHandle;
|
||||
@@ -40,6 +41,7 @@ import com.android.launcher3.SessionCommitReceiver;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.model.ItemInstallQueue;
|
||||
import com.android.launcher3.util.IOUtils;
|
||||
import com.android.launcher3.util.IntArray;
|
||||
import com.android.launcher3.util.IntSet;
|
||||
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||
@@ -215,14 +217,8 @@ public class InstallSessionHelper {
|
||||
void tryQueuePromiseAppIcon(PackageInstaller.SessionInfo sessionInfo) {
|
||||
if (FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get()
|
||||
&& SessionCommitReceiver.isEnabled(mAppContext)
|
||||
&& verify(sessionInfo) != null
|
||||
&& sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER
|
||||
&& sessionInfo.getAppIcon() != null
|
||||
&& !TextUtils.isEmpty(sessionInfo.getAppLabel())
|
||||
&& !promiseIconAddedForId(sessionInfo.getSessionId())
|
||||
&& !new PackageManagerHelper(mAppContext).isAppInstalled(
|
||||
sessionInfo.getAppPackageName(), getUserHandle(sessionInfo))) {
|
||||
Log.i(LOG, "Adding package name to install queue: "
|
||||
&& verifySessionInfo(sessionInfo)) {
|
||||
Log.d(LOG, "Adding package name to install queue: "
|
||||
+ sessionInfo.getAppPackageName());
|
||||
|
||||
ItemInstallQueue.INSTANCE.get(mAppContext)
|
||||
@@ -233,6 +229,37 @@ public class InstallSessionHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean verifySessionInfo(PackageInstaller.SessionInfo sessionInfo) {
|
||||
boolean validSessionInfo = verify(sessionInfo) != null
|
||||
&& sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER
|
||||
&& sessionInfo.getAppIcon() != null
|
||||
&& !TextUtils.isEmpty(sessionInfo.getAppLabel())
|
||||
&& !promiseIconAddedForId(sessionInfo.getSessionId())
|
||||
&& !new PackageManagerHelper(mAppContext).isAppInstalled(
|
||||
sessionInfo.getAppPackageName(), getUserHandle(sessionInfo));
|
||||
|
||||
if (sessionInfo != null) {
|
||||
Bitmap appIcon = sessionInfo.getAppIcon();
|
||||
|
||||
Log.d(LOG, String.format(
|
||||
"Verifying session info. Valid: %b, Session verified: %b, Install reason valid:"
|
||||
+ " %b, App icon: %s, App label: %s, Promise icon added: %b, "
|
||||
+ "App installed: %b.",
|
||||
validSessionInfo,
|
||||
verify(sessionInfo) != null,
|
||||
sessionInfo.getInstallReason() == PackageManager.INSTALL_REASON_USER,
|
||||
appIcon == null ? "null" : IOUtils.toBase64String(appIcon),
|
||||
sessionInfo.getAppLabel(),
|
||||
promiseIconAddedForId(sessionInfo.getSessionId()),
|
||||
new PackageManagerHelper(mAppContext).isAppInstalled(
|
||||
sessionInfo.getAppPackageName(), getUserHandle(sessionInfo))));
|
||||
} else {
|
||||
Log.d(LOG, "Verifying session info failed: session info null.");
|
||||
}
|
||||
|
||||
return validSessionInfo;
|
||||
}
|
||||
|
||||
public InstallSessionTracker registerInstallTracker(InstallSessionTracker.Callback callback) {
|
||||
InstallSessionTracker tracker = new InstallSessionTracker(this, callback);
|
||||
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
package com.android.launcher3.util;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.FileUtils;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
@@ -50,6 +52,12 @@ public class IOUtils {
|
||||
return out.toByteArray();
|
||||
}
|
||||
|
||||
public static String toBase64String(Bitmap bitmap) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
|
||||
return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT);
|
||||
}
|
||||
|
||||
public static long copy(InputStream from, OutputStream to) throws IOException {
|
||||
if (Utilities.ATLEAST_Q) {
|
||||
return FileUtils.copy(from, to);
|
||||
|
||||
Reference in New Issue
Block a user