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:
Schneider Victor-tulias
2021-04-22 23:14:25 +00:00
committed by Automerger Merge Worker
5 changed files with 71 additions and 13 deletions
@@ -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);