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 179c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratopackage com.android.launcher2; 189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 19aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chungimport java.util.ArrayList; 20aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chungimport java.util.List; 21aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chung 229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.ComponentName; 239c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.Context; 24aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chungimport android.content.Intent; 259c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.ActivityInfo; 269c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.PackageManager; 279c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.ResolveInfo; 289c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 299c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 309c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato/** 319c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Stores the list of all applications for the all apps view. 329c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoclass AllAppsList { 349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public static final int DEFAULT_APPLICATIONS_NUMBER = 42; 359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list off all apps. */ 375c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy public ArrayList<ApplicationInfo> data = 385c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy new ArrayList<ApplicationInfo>(DEFAULT_APPLICATIONS_NUMBER); 399c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been added since the last notify() call. */ 405c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy public ArrayList<ApplicationInfo> added = 415c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy new ArrayList<ApplicationInfo>(DEFAULT_APPLICATIONS_NUMBER); 429c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been removed since the last notify() call. */ 435c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy public ArrayList<ApplicationInfo> removed = new ArrayList<ApplicationInfo>(); 449c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been modified since the last notify() call. */ 455c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy public ArrayList<ApplicationInfo> modified = new ArrayList<ApplicationInfo>(); 469c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 470589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato private IconCache mIconCache; 480589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 499c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 509c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Boring constructor. 519c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 520589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato public AllAppsList(IconCache iconCache) { 530589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache = iconCache; 549c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 559c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 569c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 579c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the supplied ApplicationInfo objects to the list, and enqueue it into the 589c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * list to broadcast when notify() is called. 59d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * 60d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * If the app is already in the list, doesn't add it. 619c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 629c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void add(ApplicationInfo info) { 63d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato if (findActivity(data, info.componentName)) { 64d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return; 65d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 66054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler data.add(info); 67054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler added.add(info); 689c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 699c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 709c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void clear() { 719c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.clear(); 729c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // TODO: do we clear these too? 739c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato added.clear(); 749c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.clear(); 759c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.clear(); 769c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 779c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 789c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public int size() { 799c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.size(); 809c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 829c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public ApplicationInfo get(int index) { 839c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.get(index); 849c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 859c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 869c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 879c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the icons for the supplied apk called packageName. 889c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 899c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void addPackage(Context context, String packageName) { 909c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final List<ResolveInfo> matches = findActivitiesForPackage(context, packageName); 919c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 929c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (matches.size() > 0) { 939c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato for (ResolveInfo info : matches) { 94c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka add(new ApplicationInfo(context.getPackageManager(), info, mIconCache, null)); 959c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 969c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 979c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 989c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 999c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1009c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Remove the apps for the given apk identified by packageName. 1019c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1029c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void removePackage(String packageName) { 1039c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final List<ApplicationInfo> data = this.data; 1045c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 1059c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato ApplicationInfo info = data.get(i); 1069c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = info.intent.getComponent(); 1079c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (packageName.equals(component.getPackageName())) { 1089c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(info); 1099c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1119c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1129c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // This is more aggressive than it needs to be. 1130589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache.flush(); 1149c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1150589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 1169c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1179c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add and remove icons for this package which has been updated. 1189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1199c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void updatePackage(Context context, String packageName) { 1209c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final List<ResolveInfo> matches = findActivitiesForPackage(context, packageName); 1219c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (matches.size() > 0) { 1229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find disabled/removed activities and remove them from data and add them 1239c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // to the removed list. 1245c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 1259c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ApplicationInfo applicationInfo = data.get(i); 1269c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = applicationInfo.intent.getComponent(); 1279c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (packageName.equals(component.getPackageName())) { 1289c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (!findActivity(matches, component)) { 1299c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(applicationInfo); 1300589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache.remove(component); 1319c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1329c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find enabled activities and add them to the adapter 1379c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Also updates existing activities with new labels/icons 1389c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato int count = matches.size(); 1395c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = 0; i < count; i++) { 1409c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ResolveInfo info = matches.get(i); 1419c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato ApplicationInfo applicationInfo = findApplicationInfoLocked( 1429c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato info.activityInfo.applicationInfo.packageName, 1439c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato info.activityInfo.name); 1449c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (applicationInfo == null) { 145c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka add(new ApplicationInfo(context.getPackageManager(), info, mIconCache, null)); 1469c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } else { 1470589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache.remove(applicationInfo.componentName); 148c3eecff9043759926df124483b45fe8f4436ae7cWinson Chung mIconCache.getTitleAndIcon(applicationInfo, info, null); 1499c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.add(applicationInfo); 1509c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1519c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1522d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } else { 1532d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn // Remove all data for this package. 1542d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn for (int i = data.size() - 1; i >= 0; i--) { 1552d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn final ApplicationInfo applicationInfo = data.get(i); 1562d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn final ComponentName component = applicationInfo.intent.getComponent(); 1572d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn if (packageName.equals(component.getPackageName())) { 1582d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn removed.add(applicationInfo); 1592d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn mIconCache.remove(component); 1602d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn data.remove(i); 1612d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1622d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1639c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1649c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1659c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1669c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1679c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Query the package manager for MAIN/LAUNCHER activities in the supplied package. 1689c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1699c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato private static List<ResolveInfo> findActivitiesForPackage(Context context, String packageName) { 1709c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final PackageManager packageManager = context.getPackageManager(); 1719c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1729c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 1739c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 1742d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn mainIntent.setPackage(packageName); 1759c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1769c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0); 1772d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn return apps != null ? apps : new ArrayList<ResolveInfo>(); 1789c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1799c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1809c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 1829c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 1839c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato private static boolean findActivity(List<ResolveInfo> apps, ComponentName component) { 1849c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final String className = component.getClassName(); 1859c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato for (ResolveInfo info : apps) { 1869c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ActivityInfo activityInfo = info.activityInfo; 1879c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (activityInfo.name.equals(className)) { 1889c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return true; 1899c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1909c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1919c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return false; 1929c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1939c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1949c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 195d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 196d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato */ 197d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato private static boolean findActivity(ArrayList<ApplicationInfo> apps, ComponentName component) { 198d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato final int N = apps.size(); 199d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato for (int i=0; i<N; i++) { 200d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato final ApplicationInfo info = apps.get(i); 201d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato if (info.componentName.equals(component)) { 202d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return true; 203d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 204d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 205d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return false; 206d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 207d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato 208d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato /** 2099c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Find an ApplicationInfo object for the given packageName and className. 2109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 2119c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato private ApplicationInfo findApplicationInfoLocked(String packageName, String className) { 2129c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato for (ApplicationInfo info: data) { 2139c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = info.intent.getComponent(); 2149c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (packageName.equals(component.getPackageName()) 2159c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato && className.equals(component.getClassName())) { 2169c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return info; 2179c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2199c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return null; 2209c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2219c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato} 222