diff options
author | Mario Bertschler <bmario@google.com> | 2017-03-15 11:56:47 -0700 |
---|---|---|
committer | Mario Bertschler <bmario@google.com> | 2017-03-17 09:21:35 -0700 |
commit | 817afa34472dba49b1dee0489da11f410ff09fcd (patch) | |
tree | 5fae380bbe02dc661eb1e071f87d9426c14e7da3 /src/com/android/launcher3/model | |
parent | 04030d5a449cb251fb8db2f74d054c4f3a4a608b (diff) | |
download | android_packages_apps_Trebuchet-817afa34472dba49b1dee0489da11f410ff09fcd.tar.gz android_packages_apps_Trebuchet-817afa34472dba49b1dee0489da11f410ff09fcd.tar.bz2 android_packages_apps_Trebuchet-817afa34472dba49b1dee0489da11f410ff09fcd.zip |
Show promise app icon in All Apps while installation process.
This CL only modifies the model and is behind a feature flag
which per default is set to false.
The app icon will appear as a promise icon, it reacts on icon
or label changes and the icon will be remove on finishing the
installation process. With this CL the progress of the installation
process is not visible.
Bug: 23952570
Change-Id: I510825d0b0b1b01eb14f7e50f0a2358b0d8b99b5
Diffstat (limited to 'src/com/android/launcher3/model')
-rw-r--r-- | src/com/android/launcher3/model/PackageInstallStateChangedTask.java | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/src/com/android/launcher3/model/PackageInstallStateChangedTask.java b/src/com/android/launcher3/model/PackageInstallStateChangedTask.java index 5d04325e8..9c5f18917 100644 --- a/src/com/android/launcher3/model/PackageInstallStateChangedTask.java +++ b/src/com/android/launcher3/model/PackageInstallStateChangedTask.java @@ -18,15 +18,18 @@ package com.android.launcher3.model; import android.content.ComponentName; import com.android.launcher3.AllAppsList; +import com.android.launcher3.AppInfo; import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherModel.CallbackTask; import com.android.launcher3.LauncherModel.Callbacks; +import com.android.launcher3.PromiseAppInfo; import com.android.launcher3.ShortcutInfo; import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo; +import java.util.ArrayList; import java.util.HashSet; /** @@ -47,6 +50,46 @@ public class PackageInstallStateChangedTask extends ExtendedModelTask { return; } + synchronized (apps) { + final ArrayList<AppInfo> updated = new ArrayList<>(); + final ArrayList<AppInfo> removed = new ArrayList<>(); + for (int i=0; i < apps.size(); i++) { + final AppInfo appInfo = apps.get(i); + final ComponentName tgtComp = appInfo.getTargetComponent(); + if (tgtComp != null && tgtComp.getPackageName().equals(mInstallInfo.packageName)) { + if (appInfo instanceof PromiseAppInfo) { + final PromiseAppInfo promiseAppInfo = (PromiseAppInfo) appInfo; + if (mInstallInfo.state == PackageInstallerCompat.STATUS_INSTALLING) { + promiseAppInfo.level = mInstallInfo.progress; + updated.add(appInfo); + } else if (mInstallInfo.state == PackageInstallerCompat.STATUS_FAILED + || mInstallInfo.state == PackageInstallerCompat.STATUS_INSTALLED) { + apps.removePromiseApp(appInfo); + removed.add(appInfo); + } + } + } + } + if (!updated.isEmpty()) { + scheduleCallbackTask(new CallbackTask() { + @Override + public void execute(Callbacks callbacks) { + // TODO: this currently causes unnecessary relayouts + // we need to introduce a new bindPromiseAppsChanged + callbacks.bindAppsUpdated(updated); + } + }); + } + if (!removed.isEmpty()) { + scheduleCallbackTask(new CallbackTask() { + @Override + public void execute(Callbacks callbacks) { + callbacks.bindAppInfosRemoved(removed); + } + }); + } + } + synchronized (dataModel) { final HashSet<ItemInfo> updates = new HashSet<>(); for (ItemInfo info : dataModel.itemsIdMap) { @@ -56,7 +99,6 @@ public class PackageInstallStateChangedTask extends ExtendedModelTask { if (si.isPromise() && (cn != null) && mInstallInfo.packageName.equals(cn.getPackageName())) { si.setInstallProgress(mInstallInfo.progress); - if (mInstallInfo.state == PackageInstallerCompat.STATUS_FAILED) { // Mark this info as broken. si.status &= ~ShortcutInfo.FLAG_INSTALL_SESSION_ACTIVE; |