Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74aacfd4 authored by Schneider Victor-tulias's avatar Schneider Victor-tulias Committed by Android (Google) Code Review
Browse files

Merge "Add logging for adding pending icons to the workspace." into sc-dev

parents 02f12006 94a36420
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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()));
+17 −1
Original line number Diff line number Diff line
@@ -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));
                }
            }
        }

+10 −3
Original line number Diff line number Diff line
@@ -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);
+35 −8
Original line number Diff line number Diff line
@@ -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);

+8 −0
Original line number Diff line number Diff line
@@ -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);