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
This commit is contained in:
Schneider Victor-tulias 2021-01-12 11:40:27 -08:00
parent 6a5f431a7b
commit b803f7e2cb
4 changed files with 14 additions and 6 deletions

View File

@ -26,6 +26,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo; import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps; import android.content.pm.LauncherApps;
import android.os.LocaleList; import android.os.LocaleList;
import android.os.Process;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Log; import android.util.Log;
@ -161,14 +162,18 @@ public class AllAppsList {
/** Updates the given PackageInstallInfo's associated AppInfo's installation info. */ /** Updates the given PackageInstallInfo's associated AppInfo's installation info. */
public List<AppInfo> updatePromiseInstallInfo(PackageInstallInfo installInfo) { public List<AppInfo> updatePromiseInstallInfo(PackageInstallInfo installInfo) {
List<AppInfo> updatedAppInfos = new ArrayList<>(); List<AppInfo> updatedAppInfos = new ArrayList<>();
UserHandle user = installInfo.user; UserHandle user = Process.myUserHandle();
for (int i = data.size() - 1; i >= 0; i--) { for (int i = data.size() - 1; i >= 0; i--) {
final AppInfo appInfo = data.get(i); final AppInfo appInfo = data.get(i);
final ComponentName tgtComp = appInfo.getTargetComponent(); final ComponentName tgtComp = appInfo.getTargetComponent();
if (tgtComp != null && tgtComp.getPackageName().equals(installInfo.packageName) if (tgtComp != null && tgtComp.getPackageName().equals(installInfo.packageName)
&& appInfo.user.equals(user)) { && appInfo.user.equals(user)) {
if (installInfo.state == PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING 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); appInfo.setProgressLevel(installInfo);
updatedAppInfos.add(appInfo); updatedAppInfos.add(appInfo);

View File

@ -38,6 +38,7 @@ import com.android.launcher3.logging.FileLog;
import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.pm.PackageInstallInfo;
import com.android.launcher3.pm.UserCache; import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutRequest; import com.android.launcher3.shortcuts.ShortcutRequest;
import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.FlagOp;
@ -246,6 +247,7 @@ public class PackageUpdatedTask extends BaseModelUpdateTask {
if (isNewApkAvailable if (isNewApkAvailable
&& si.itemType == Favorites.ITEM_TYPE_APPLICATION) { && si.itemType == Favorites.ITEM_TYPE_APPLICATION) {
si.setProgressLevel(100, PackageInstallInfo.STATUS_INSTALLED);
iconCache.getTitleAndIcon(si, si.usingLowResIcon()); iconCache.getTitleAndIcon(si, si.usingLowResIcon());
infoUpdated = true; infoUpdated = true;
} }

View File

@ -94,8 +94,6 @@ public class AppInfo extends ItemInfoWithIcon {
componentName = info.componentName; componentName = info.componentName;
title = Utilities.trim(info.title); title = Utilities.trim(info.title);
intent = new Intent(info.intent); intent = new Intent(info.intent);
user = info.user;
runtimeStatusFlags = info.runtimeStatusFlags;
} }
@VisibleForTesting @VisibleForTesting
@ -114,6 +112,7 @@ public class AppInfo extends ItemInfoWithIcon {
.setComponent(componentName) .setComponent(componentName)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
setProgressLevel(installInfo);
user = installInfo.user; user = installInfo.user;
} }

View File

@ -129,7 +129,9 @@ public abstract class ItemInfoWithIcon extends ItemInfo {
protected ItemInfoWithIcon(ItemInfoWithIcon info) { protected ItemInfoWithIcon(ItemInfoWithIcon info) {
super(info); super(info);
bitmap = info.bitmap; bitmap = info.bitmap;
mProgressLevel = info.mProgressLevel;
runtimeStatusFlags = info.runtimeStatusFlags; runtimeStatusFlags = info.runtimeStatusFlags;
user = info.user;
} }
@Override @Override
@ -195,8 +197,8 @@ public abstract class ItemInfoWithIcon extends ItemInfo {
: runtimeStatusFlags & ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; : runtimeStatusFlags & ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE;
} else { } else {
mProgressLevel = status == PackageInstallInfo.STATUS_INSTALLED ? 100 : 0; mProgressLevel = status == PackageInstallInfo.STATUS_INSTALLED ? 100 : 0;
runtimeStatusFlags = runtimeStatusFlags & ~FLAG_INSTALL_SESSION_ACTIVE; runtimeStatusFlags &= ~FLAG_INSTALL_SESSION_ACTIVE;
runtimeStatusFlags = runtimeStatusFlags & ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; runtimeStatusFlags &= ~FLAG_INCREMENTAL_DOWNLOAD_ACTIVE;
} }
} }