From b803f7e2cb8dbaab2c1453693c61155c03fd90c8 Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Tue, 12 Jan 2021 11:40:27 -0800 Subject: [PATCH] Add UI updates for incremental app installs. 1. Changed Preload Icon UI to be grayscale while the app is not startable. 2. Added progress bar for when app is installed but still ownloading. 3. Updated Preload Icon progress and click handling to use new incremental api. Progress bar color updates will follow in a separate CL. Demo: https://drive.google.com/file/d/1H1EvtTorLeJwC1eiq10tm-TT81YZ6osk/view?usp=sharing Fixes: 176901235,176992421,176884453 Test: manual Change-Id: Ie0575dc56c33c5d6ecd6c5cbf00666b96d6dcb16 --- src/com/android/launcher3/model/AllAppsList.java | 9 +++++++-- src/com/android/launcher3/model/PackageUpdatedTask.java | 2 ++ src/com/android/launcher3/model/data/AppInfo.java | 3 +-- .../android/launcher3/model/data/ItemInfoWithIcon.java | 6 ++++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/model/AllAppsList.java b/src/com/android/launcher3/model/AllAppsList.java index 8d5cf7422f..c57c3e495a 100644 --- a/src/com/android/launcher3/model/AllAppsList.java +++ b/src/com/android/launcher3/model/AllAppsList.java @@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.LauncherActivityInfo; import android.content.pm.LauncherApps; import android.os.LocaleList; +import android.os.Process; import android.os.UserHandle; import android.util.Log; @@ -161,14 +162,18 @@ public class AllAppsList { /** Updates the given PackageInstallInfo's associated AppInfo's installation info. */ public List updatePromiseInstallInfo(PackageInstallInfo installInfo) { List updatedAppInfos = new ArrayList<>(); - UserHandle user = installInfo.user; + UserHandle user = Process.myUserHandle(); for (int i = data.size() - 1; i >= 0; i--) { final AppInfo appInfo = data.get(i); final ComponentName tgtComp = appInfo.getTargetComponent(); if (tgtComp != null && tgtComp.getPackageName().equals(installInfo.packageName) && appInfo.user.equals(user)) { if (installInfo.state == PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING - || installInfo.state == PackageInstallInfo.STATUS_INSTALLING) { + || installInfo.state == PackageInstallInfo.STATUS_INSTALLING) { + if (appInfo.isAppStartable() + && installInfo.state == PackageInstallInfo.STATUS_INSTALLING) { + continue; + } appInfo.setProgressLevel(installInfo); updatedAppInfos.add(appInfo); diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 896bfb666e..3275d59488 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -38,6 +38,7 @@ import com.android.launcher3.logging.FileLog; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; +import com.android.launcher3.pm.PackageInstallInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.shortcuts.ShortcutRequest; import com.android.launcher3.util.FlagOp; @@ -246,6 +247,7 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { if (isNewApkAvailable && si.itemType == Favorites.ITEM_TYPE_APPLICATION) { + si.setProgressLevel(100, PackageInstallInfo.STATUS_INSTALLED); iconCache.getTitleAndIcon(si, si.usingLowResIcon()); infoUpdated = true; } diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java index 39247c221f..dde0cf4674 100644 --- a/src/com/android/launcher3/model/data/AppInfo.java +++ b/src/com/android/launcher3/model/data/AppInfo.java @@ -94,8 +94,6 @@ public class AppInfo extends ItemInfoWithIcon { componentName = info.componentName; title = Utilities.trim(info.title); intent = new Intent(info.intent); - user = info.user; - runtimeStatusFlags = info.runtimeStatusFlags; } @VisibleForTesting @@ -114,6 +112,7 @@ public class AppInfo extends ItemInfoWithIcon { .setComponent(componentName) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + setProgressLevel(installInfo); user = installInfo.user; } diff --git a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java index b8a71d33e0..d95e7080de 100644 --- a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java +++ b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java @@ -129,7 +129,9 @@ public abstract class ItemInfoWithIcon extends ItemInfo { protected ItemInfoWithIcon(ItemInfoWithIcon info) { super(info); bitmap = info.bitmap; + mProgressLevel = info.mProgressLevel; runtimeStatusFlags = info.runtimeStatusFlags; + user = info.user; } @Override @@ -195,8 +197,8 @@ public abstract class ItemInfoWithIcon extends ItemInfo { : runtimeStatusFlags & ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; } else { mProgressLevel = status == PackageInstallInfo.STATUS_INSTALLED ? 100 : 0; - runtimeStatusFlags = runtimeStatusFlags & ~FLAG_INSTALL_SESSION_ACTIVE; - runtimeStatusFlags = runtimeStatusFlags & ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; + runtimeStatusFlags &= ~FLAG_INSTALL_SESSION_ACTIVE; + runtimeStatusFlags &= ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; } }