AllAppsList.java revision 3e9be43b6ea75c8b82b57aa58508a0c3e8e1d721
19c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato/* 29c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Copyright (C) 2008 The Android Open Source Project 39c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * 49c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 59c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * you may not use this file except in compliance with the License. 69c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * You may obtain a copy of the License at 79c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * 89c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 99c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * 109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Unless required by applicable law or agreed to in writing, software 119c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 129c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * See the License for the specific language governing permissions and 149c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * limitations under the License. 159c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 169c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3; 189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 199c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.ComponentName; 209c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.Context; 213e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyalimport android.content.pm.LauncherActivityInfo; 227c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyalimport android.os.UserHandle; 239c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 24ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.LauncherAppsCompat; 253bbbabc54ac73a4451b0a862a3faac6426b1b7b4Sunny Goyalimport com.android.launcher3.util.FlagOp; 2640452cf468b44a4173338cc83000b4ad84860ebcSunny Goyalimport com.android.launcher3.util.ItemInfoMatcher; 27ed13187a745866483139e2878037e1f8427ce567Kenny Guy 2834c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurkaimport java.util.ArrayList; 2977919b93b98f5afa1b39546861197d6065847224Sunny Goyalimport java.util.HashSet; 3034c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurkaimport java.util.List; 3134c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurka 329c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato/** 349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Stores the list of all applications for the all apps view. 359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 368e0e1d76095badc58a3178917c43642065ace37cSunny Goyalpublic class AllAppsList { 379c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public static final int DEFAULT_APPLICATIONS_NUMBER = 42; 386d0dde01f307051ee1849481c989d9e87774b894Chris Wren 399c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list off all apps. */ 40eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> data = 41eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER); 429c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been added since the last notify() call. */ 43eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> added = 44eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER); 459c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been removed since the last notify() call. */ 46eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> removed = new ArrayList<AppInfo>(); 479c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been modified since the last notify() call. */ 48eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> modified = new ArrayList<AppInfo>(); 499c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 500589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato private IconCache mIconCache; 510589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 521307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert private AppFilter mAppFilter; 531307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 549c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 559c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Boring constructor. 569c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 571307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert public AllAppsList(IconCache iconCache, AppFilter appFilter) { 580589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache = iconCache; 591307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert mAppFilter = appFilter; 609c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 619c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 629c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 639c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the supplied ApplicationInfo objects to the list, and enqueue it into the 649c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * list to broadcast when notify() is called. 65d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * 66d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * If the app is already in the list, doesn't add it. 679c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 683e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal public void add(AppInfo info, LauncherActivityInfo activityInfo) { 69ab121c17159a7f655b772fa78c04a6d2479e2a8eSunny Goyal if (!mAppFilter.shouldShowApp(info.componentName)) { 701307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert return; 711307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert } 72ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (findActivity(data, info.componentName, info.user)) { 73d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return; 74d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 751cc1c9ad83014ec8af54a44112138339c52795b0Sunny Goyal mIconCache.getTitleAndIcon(info, activityInfo, true /* useLowResIcon */); 761cc1c9ad83014ec8af54a44112138339c52795b0Sunny Goyal 77054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler data.add(info); 78054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler added.add(info); 799c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 801307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void clear() { 829c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.clear(); 839c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // TODO: do we clear these too? 849c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato added.clear(); 859c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.clear(); 869c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.clear(); 879c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 889c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 899c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public int size() { 909c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.size(); 919c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 929c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 93eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public AppInfo get(int index) { 949c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.get(index); 959c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 969c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 979c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 989c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the icons for the supplied apk called packageName. 999c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1007c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public void addPackage(Context context, String packageName, UserHandle user) { 101ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 1023e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal final List<LauncherActivityInfo> matches = launcherApps.getActivityList(packageName, 103ed13187a745866483139e2878037e1f8427ce567Kenny Guy user); 1049c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1053e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal for (LauncherActivityInfo info : matches) { 1061cc1c9ad83014ec8af54a44112138339c52795b0Sunny Goyal add(new AppInfo(context, info, user), info); 1079c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1089c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1099c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1119c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Remove the apps for the given apk identified by packageName. 1129c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1137c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public void removePackage(String packageName, UserHandle user) { 114eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final List<AppInfo> data = this.data; 1155c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 116eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka AppInfo info = data.get(i); 1178e0e1d76095badc58a3178917c43642065ace37cSunny Goyal if (info.user.equals(user) && packageName.equals(info.componentName.getPackageName())) { 1189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(info); 1199c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1209c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1219c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1230589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 12444cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy /** 12540452cf468b44a4173338cc83000b4ad84860ebcSunny Goyal * Updates the disabled flags of apps matching {@param matcher} based on {@param op}. 12644cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy */ 12740452cf468b44a4173338cc83000b4ad84860ebcSunny Goyal public void updateDisabledFlags(ItemInfoMatcher matcher, FlagOp op) { 12844cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy final List<AppInfo> data = this.data; 12944cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy for (int i = data.size() - 1; i >= 0; i--) { 13044cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy AppInfo info = data.get(i); 1318e0e1d76095badc58a3178917c43642065ace37cSunny Goyal if (matcher.matches(info, info.componentName)) { 1323bbbabc54ac73a4451b0a862a3faac6426b1b7b4Sunny Goyal info.isDisabled = op.apply(info.isDisabled); 13344cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy modified.add(info); 13444cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy } 13544cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy } 13644cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy } 13744cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy 1387c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public void updateIconsAndLabels(HashSet<String> packages, UserHandle user, 13977919b93b98f5afa1b39546861197d6065847224Sunny Goyal ArrayList<AppInfo> outUpdates) { 14077919b93b98f5afa1b39546861197d6065847224Sunny Goyal for (AppInfo info : data) { 14177919b93b98f5afa1b39546861197d6065847224Sunny Goyal if (info.user.equals(user) && packages.contains(info.componentName.getPackageName())) { 14277919b93b98f5afa1b39546861197d6065847224Sunny Goyal mIconCache.updateTitleAndIcon(info); 14377919b93b98f5afa1b39546861197d6065847224Sunny Goyal outUpdates.add(info); 14477919b93b98f5afa1b39546861197d6065847224Sunny Goyal } 14577919b93b98f5afa1b39546861197d6065847224Sunny Goyal } 14677919b93b98f5afa1b39546861197d6065847224Sunny Goyal } 14777919b93b98f5afa1b39546861197d6065847224Sunny Goyal 1489c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1499c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add and remove icons for this package which has been updated. 1509c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1517c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public void updatePackage(Context context, String packageName, UserHandle user) { 152ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 1533e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal final List<LauncherActivityInfo> matches = launcherApps.getActivityList(packageName, 154ed13187a745866483139e2878037e1f8427ce567Kenny Guy user); 1559c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (matches.size() > 0) { 1569c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find disabled/removed activities and remove them from data and add them 1579c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // to the removed list. 1585c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 159eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo applicationInfo = data.get(i); 160ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (user.equals(applicationInfo.user) 161f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal && packageName.equals(applicationInfo.componentName.getPackageName())) { 162f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (!findActivity(matches, applicationInfo.componentName)) { 1639c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(applicationInfo); 1649c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1659c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1669c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1679c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1689c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1699c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find enabled activities and add them to the adapter 1709c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Also updates existing activities with new labels/icons 1713e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal for (final LauncherActivityInfo info : matches) { 172eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka AppInfo applicationInfo = findApplicationInfoLocked( 173ed13187a745866483139e2878037e1f8427ce567Kenny Guy info.getComponentName().getPackageName(), user, 17452a2841f6b364d6a002d33bcea5816b1bce2e30dAdam Cohen info.getComponentName().getClassName()); 1759c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (applicationInfo == null) { 1761cc1c9ad83014ec8af54a44112138339c52795b0Sunny Goyal add(new AppInfo(context, info, user), info); 1779c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } else { 17834b6527cefd36fbd5da78464ce9771e379158552Sunny Goyal mIconCache.getTitleAndIcon(applicationInfo, info, true /* useLowResIcon */); 1799c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.add(applicationInfo); 1809c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1822d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } else { 1832d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn // Remove all data for this package. 1842d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn for (int i = data.size() - 1; i >= 0; i--) { 185eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo applicationInfo = data.get(i); 186ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (user.equals(applicationInfo.user) 187f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal && packageName.equals(applicationInfo.componentName.getPackageName())) { 1882d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn removed.add(applicationInfo); 189f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal mIconCache.remove(applicationInfo.componentName, user); 1902d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn data.remove(i); 1912d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1922d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1939c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1949c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1959c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1969c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1979c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1989c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 1999c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 2003e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal private static boolean findActivity(List<LauncherActivityInfo> apps, 201ed13187a745866483139e2878037e1f8427ce567Kenny Guy ComponentName component) { 2023e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal for (LauncherActivityInfo info : apps) { 203ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (info.getComponentName().equals(component)) { 2049c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return true; 2059c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2069c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2079c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return false; 2089c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2099c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 2109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 211ed13187a745866483139e2878037e1f8427ce567Kenny Guy * Query the launcher apps service for whether the supplied package has 212ed13187a745866483139e2878037e1f8427ce567Kenny Guy * MAIN/LAUNCHER activities in the supplied package. 213ed13187a745866483139e2878037e1f8427ce567Kenny Guy */ 214ed13187a745866483139e2878037e1f8427ce567Kenny Guy static boolean packageHasActivities(Context context, String packageName, 2157c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal UserHandle user) { 216ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 217ed13187a745866483139e2878037e1f8427ce567Kenny Guy return launcherApps.getActivityList(packageName, user).size() > 0; 218ed13187a745866483139e2878037e1f8427ce567Kenny Guy } 219ed13187a745866483139e2878037e1f8427ce567Kenny Guy 220ed13187a745866483139e2878037e1f8427ce567Kenny Guy /** 221d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 222d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato */ 223ed13187a745866483139e2878037e1f8427ce567Kenny Guy private static boolean findActivity(ArrayList<AppInfo> apps, ComponentName component, 2247c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal UserHandle user) { 225d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato final int N = apps.size(); 226ed13187a745866483139e2878037e1f8427ce567Kenny Guy for (int i = 0; i < N; i++) { 227eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo info = apps.get(i); 228ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (info.user.equals(user) && info.componentName.equals(component)) { 229d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return true; 230d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 231d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 232d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return false; 233d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 234d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato 235d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato /** 2369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Find an ApplicationInfo object for the given packageName and className. 2379c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 2387c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal private AppInfo findApplicationInfoLocked(String packageName, UserHandle user, 239ed13187a745866483139e2878037e1f8427ce567Kenny Guy String className) { 240eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka for (AppInfo info: data) { 241f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal if (user.equals(info.user) && packageName.equals(info.componentName.getPackageName()) 242f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal && className.equals(info.componentName.getClassName())) { 2439c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return info; 2449c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2459c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2469c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return null; 2479c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2489c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato} 249