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; 197c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyalimport android.os.UserHandle; 20f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 21f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.AllAppsList; 22f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.AppInfo; 23f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.IconCache; 24f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.ItemInfo; 25f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherAppState; 26f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherModel.CallbackTask; 27f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherModel.Callbacks; 28f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.LauncherSettings; 291cd01b023acc123b771765b7297d8aaedac224e0Sunny Goyalimport com.android.launcher3.LauncherSettings.Favorites; 30f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport com.android.launcher3.ShortcutInfo; 31f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 32f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport java.util.ArrayList; 33f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalimport java.util.HashSet; 34f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 35f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal/** 36f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal * Handles changes due to cache updates. 37f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal */ 38f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyalpublic class CacheDataUpdatedTask extends ExtendedModelTask { 39f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 40f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public static final int OP_CACHE_UPDATE = 1; 41f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public static final int OP_SESSION_UPDATE = 2; 42f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 43f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal private final int mOp; 447c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal private final UserHandle mUser; 45f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal private final HashSet<String> mPackages; 46f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 477c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public CacheDataUpdatedTask(int op, UserHandle user, HashSet<String> packages) { 48f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal mOp = op; 49f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal mUser = user; 50f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal mPackages = packages; 51f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 52f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 53f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal @Override 54f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { 55f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal IconCache iconCache = app.getIconCache(); 56f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 57f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal final ArrayList<AppInfo> updatedApps = new ArrayList<>(); 58f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 59f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal ArrayList<ShortcutInfo> updatedShortcuts = new ArrayList<>(); 60f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal synchronized (dataModel) { 61f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal for (ItemInfo info : dataModel.itemsIdMap) { 62f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (info instanceof ShortcutInfo && mUser.equals(info.user)) { 63f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal ShortcutInfo si = (ShortcutInfo) info; 64f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal ComponentName cn = si.getTargetComponent(); 651cd01b023acc123b771765b7297d8aaedac224e0Sunny Goyal if (si.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION 661cd01b023acc123b771765b7297d8aaedac224e0Sunny Goyal && isValidShortcut(si) && cn != null 671cd01b023acc123b771765b7297d8aaedac224e0Sunny Goyal && mPackages.contains(cn.getPackageName())) { 683fe4a146cf774261ab3552dd8ab392439c771e54Sunny Goyal iconCache.getTitleAndIcon(si, si.usingLowResIcon); 69f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal updatedShortcuts.add(si); 70f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 71f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 72f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 73f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal apps.updateIconsAndLabels(mPackages, mUser, updatedApps); 74f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 75f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal bindUpdatedShortcuts(updatedShortcuts, mUser); 76f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 77f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (!updatedApps.isEmpty()) { 78f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal scheduleCallbackTask(new CallbackTask() { 79f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal @Override 80f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public void execute(Callbacks callbacks) { 81f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal callbacks.bindAppsUpdated(updatedApps); 82f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 83f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal }); 84f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 85f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 86f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal 87f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal public boolean isValidShortcut(ShortcutInfo si) { 88f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal switch (mOp) { 89f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal case OP_CACHE_UPDATE: 901cd01b023acc123b771765b7297d8aaedac224e0Sunny Goyal return true; 91f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal case OP_SESSION_UPDATE: 92f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal return si.isPromise(); 93f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal default: 94f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal return false; 95f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 96f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal } 97f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal} 98