PackageInstallStateChangedTask.java revision f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4
1f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal/* 2f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * Copyright (C) 2016 The Android Open Source Project 3f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * 4f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * Licensed under the Apache License, Version 2.0 (the "License"); 5f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * you may not use this file except in compliance with the License. 6f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * You may obtain a copy of the License at 7f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * 8f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * http://www.apache.org/licenses/LICENSE-2.0 9f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * 10f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * Unless required by applicable law or agreed to in writing, software 11f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * distributed under the License is distributed on an "AS IS" BASIS, 12f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * See the License for the specific language governing permissions and 14f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * limitations under the License. 15f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal */ 16f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalpackage com.android.launcher3.model; 17f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 18f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport android.content.ComponentName; 19f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 20f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.AllAppsList; 21f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.ItemInfo; 22f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherAppState; 23f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherAppWidgetInfo; 24f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherModel.CallbackTask; 25f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherModel.Callbacks; 26f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.ShortcutInfo; 27f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.compat.PackageInstallerCompat; 28f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo; 29f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 30f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport java.util.HashSet; 31f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 32f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal/** 33f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * Handles changes due to a sessions updates for a currently installing app. 34f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal */ 35f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalpublic class PackageInstallStateChangedTask extends ExtendedModelTask { 36f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 37f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal private final PackageInstallInfo mInstallInfo; 38f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 39f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public PackageInstallStateChangedTask(PackageInstallInfo installInfo) { 40f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal mInstallInfo = installInfo; 41f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 42f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 43f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal @Override 44f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { 45f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (mInstallInfo.state == PackageInstallerCompat.STATUS_INSTALLED) { 46f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal // Ignore install success events as they are handled by Package add events. 47f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal return; 48f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 49f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 50f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal synchronized (dataModel) { 51f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal final HashSet<ItemInfo> updates = new HashSet<>(); 52f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal for (ItemInfo info : dataModel.itemsIdMap) { 53f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (info instanceof ShortcutInfo) { 54f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal ShortcutInfo si = (ShortcutInfo) info; 55f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal ComponentName cn = si.getTargetComponent(); 56f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (si.isPromise() && (cn != null) 57f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal && mInstallInfo.packageName.equals(cn.getPackageName())) { 58f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal si.setInstallProgress(mInstallInfo.progress); 59f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 60f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (mInstallInfo.state == PackageInstallerCompat.STATUS_FAILED) { 61f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal // Mark this info as broken. 62f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal si.status &= ~ShortcutInfo.FLAG_INSTALL_SESSION_ACTIVE; 63f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 64f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal updates.add(si); 65f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 66f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 67f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 68f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 69f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal for (LauncherAppWidgetInfo widget : dataModel.appWidgets) { 70f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (widget.providerName.getPackageName().equals(mInstallInfo.packageName)) { 71f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal widget.installProgress = mInstallInfo.progress; 72f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal updates.add(widget); 73f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 74f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 75f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 76f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (!updates.isEmpty()) { 77f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal scheduleCallbackTask(new CallbackTask() { 78f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal @Override 79f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public void execute(Callbacks callbacks) { 80f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal callbacks.bindRestoreItemsChange(updates); 81f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 82f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal }); 83f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 84f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 85f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 86f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal} 87