diff options
Diffstat (limited to 'src/com/android/launcher3/compat')
3 files changed, 35 insertions, 9 deletions
diff --git a/src/com/android/launcher3/compat/PackageInstallerCompat.java b/src/com/android/launcher3/compat/PackageInstallerCompat.java index 89a2157eb..0ae52bd23 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompat.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompat.java @@ -22,6 +22,10 @@ import com.android.launcher3.Utilities; public abstract class PackageInstallerCompat { + public static final int STATUS_INSTALLED = 0; + public static final int STATUS_INSTALLING = 1; + public static final int STATUS_FAILED = 2; + private static final Object sInstanceLock = new Object(); private static PackageInstallerCompat sInstance; @@ -38,6 +42,8 @@ public abstract class PackageInstallerCompat { } } + public abstract void updateActiveSessionCache(); + public abstract void onPause(); public abstract void onResume(); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatV16.java b/src/com/android/launcher3/compat/PackageInstallerCompatV16.java index 6a2a02e48..4cc6fc12f 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatV16.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatV16.java @@ -22,7 +22,6 @@ import android.text.TextUtils; import android.util.Log; import com.android.launcher3.LauncherAppState; -import com.android.launcher3.ShortcutInfo; import org.json.JSONException; import org.json.JSONObject; @@ -77,6 +76,9 @@ public class PackageInstallerCompatV16 extends PackageInstallerCompat { @Override public void onStop() { } + @Override + public void updateActiveSessionCache() { } + private void replayUpdates() { if (DEBUG) Log.d(TAG, "updates resumed"); LauncherAppState app = LauncherAppState.getInstanceNoCreate(); @@ -107,7 +109,7 @@ public class PackageInstallerCompatV16 extends PackageInstallerCompat { PackageInstallInfo installInfo = new PackageInstallInfo(packageName); installInfo.progress = progress; installInfo.state = state; - if (state == ShortcutInfo.PACKAGE_STATE_DEFAULT) { + if (state == STATUS_INSTALLED) { // no longer necessary to track this package editor.remove(packageName); if (DEBUG) Log.d(TAG, "no longer tracking " + packageName); @@ -123,7 +125,7 @@ public class PackageInstallerCompatV16 extends PackageInstallerCompat { if (!mUseQueue) { if (mReplayPending) { replayUpdates(); - } else { + } else if (state != STATUS_INSTALLED) { LauncherAppState app = LauncherAppState.getInstanceNoCreate(); ArrayList<PackageInstallInfo> update = new ArrayList<PackageInstallInfo>(); update.add(installInfo); diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index c78ab9900..5d016a838 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -23,8 +23,8 @@ import android.content.pm.PackageInstaller.SessionInfo; import android.util.Log; import android.util.SparseArray; +import com.android.launcher3.IconCache; import com.android.launcher3.LauncherAppState; -import com.android.launcher3.ShortcutInfo; import java.util.ArrayList; @@ -35,12 +35,14 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { private final SparseArray<SessionInfo> mPendingReplays = new SparseArray<SessionInfo>(); private final PackageInstaller mInstaller; + private final IconCache mCache; private boolean mResumed; private boolean mBound; PackageInstallerCompatVL(Context context) { mInstaller = context.getPackageManager().getPackageInstaller(); + mCache = LauncherAppState.getInstance().getIconCache(); mResumed = false; mBound = false; @@ -53,6 +55,22 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { } @Override + public void updateActiveSessionCache() { + UserHandleCompat user = UserHandleCompat.myUserHandle(); + for (SessionInfo info : mInstaller.getAllSessions()) { + addSessionInfoToCahce(info, user); + } + } + + private void addSessionInfoToCahce(SessionInfo info, UserHandleCompat user) { + String packageName = info.getAppPackageName(); + if (packageName != null) { + mCache.cachePackageInstallInfo(packageName, user, info.getAppIcon(), + info.getAppLabel()); + } + } + + @Override public void onStop() { mInstaller.removeSessionCallback(mCallback); } @@ -98,14 +116,14 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { } ArrayList<PackageInstallInfo> updates = new ArrayList<PackageInstallInfo>(); - if (newInfo != null) { + if ((newInfo != null) && (newInfo.state != STATUS_INSTALLED)) { updates.add(newInfo); } - for (int i = mPendingReplays.size() - 1; i > 0; i--) { + for (int i = mPendingReplays.size() - 1; i >= 0; i--) { SessionInfo session = mPendingReplays.valueAt(i); if (session.getAppPackageName() != null) { updates.add(new PackageInstallInfo(session.getAppPackageName(), - ShortcutInfo.PACKAGE_STATE_INSTALLING, + STATUS_INSTALLING, (int) (session.getProgress() * 100))); } } @@ -121,6 +139,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { public void onCreated(int sessionId) { SessionInfo session = mInstaller.getSessionInfo(sessionId); if (session != null) { + addSessionInfoToCahce(session, UserHandleCompat.myUserHandle()); mPendingReplays.put(sessionId, session); replayUpdates(null); } @@ -135,8 +154,7 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { // need to store this record for future updates, as the app list will get // refreshed on resume. replayUpdates(new PackageInstallInfo(session.getAppPackageName(), - success ? ShortcutInfo.PACKAGE_STATE_DEFAULT - : ShortcutInfo.PACKAGE_STATE_ERROR, 0)); + success ? STATUS_INSTALLED : STATUS_FAILED, 0)); } } |