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; 21aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chungimport android.content.Intent; 229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.ActivityInfo; 239c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.PackageManager; 249c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoimport android.content.pm.ResolveInfo; 259c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 26ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.LauncherActivityInfoCompat; 27ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.LauncherAppsCompat; 28ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.UserHandleCompat; 29ed13187a745866483139e2878037e1f8427ce567Kenny Guy 3034c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurkaimport java.util.ArrayList; 3134c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurkaimport java.util.List; 3234c2e6cf7af328aba25c98158161dbad15ae986dMichael Jurka 339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato/** 359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Stores the list of all applications for the all apps view. 369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 379c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onoratoclass AllAppsList { 389c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public static final int DEFAULT_APPLICATIONS_NUMBER = 42; 396d0dde01f307051ee1849481c989d9e87774b894Chris Wren 409c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list off all apps. */ 41eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> data = 42eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER); 439c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been added since the last notify() call. */ 44eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> added = 45eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka new ArrayList<AppInfo>(DEFAULT_APPLICATIONS_NUMBER); 469c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been removed since the last notify() call. */ 47eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> removed = new ArrayList<AppInfo>(); 489c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** The list of apps that have been modified since the last notify() call. */ 49eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public ArrayList<AppInfo> modified = new ArrayList<AppInfo>(); 509c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 510589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato private IconCache mIconCache; 520589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 531307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert private AppFilter mAppFilter; 541307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 559c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 569c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Boring constructor. 579c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 581307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert public AllAppsList(IconCache iconCache, AppFilter appFilter) { 590589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato mIconCache = iconCache; 601307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert mAppFilter = appFilter; 619c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 629c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 639c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 649c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the supplied ApplicationInfo objects to the list, and enqueue it into the 659c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * list to broadcast when notify() is called. 66d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * 67d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * If the app is already in the list, doesn't add it. 689c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 69eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public void add(AppInfo info) { 701307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert if (mAppFilter != null && !mAppFilter.shouldShowApp(info.componentName)) { 711307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert return; 721307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert } 73ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (findActivity(data, info.componentName, info.user)) { 74d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return; 75d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 76054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler data.add(info); 77054019dbeafd33de4e39601e0f305926c15bad15Daniel Sandler added.add(info); 789c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 791307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 809c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public void clear() { 819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.clear(); 829c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // TODO: do we clear these too? 839c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato added.clear(); 849c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.clear(); 859c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.clear(); 869c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 879c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 889c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato public int size() { 899c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.size(); 909c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 919c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 92eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka public AppInfo get(int index) { 939c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return data.get(index); 949c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 959c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 969c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 979c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add the icons for the supplied apk called packageName. 989c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 99ed13187a745866483139e2878037e1f8427ce567Kenny Guy public void addPackage(Context context, String packageName, UserHandleCompat user) { 100ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 101ed13187a745866483139e2878037e1f8427ce567Kenny Guy final List<LauncherActivityInfoCompat> matches = launcherApps.getActivityList(packageName, 102ed13187a745866483139e2878037e1f8427ce567Kenny Guy user); 1039c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1049c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (matches.size() > 0) { 105ed13187a745866483139e2878037e1f8427ce567Kenny Guy for (LauncherActivityInfoCompat info : matches) { 106ed13187a745866483139e2878037e1f8427ce567Kenny Guy add(new AppInfo(context, info, user, mIconCache, null)); 1079c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1089c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1099c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1109c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1119c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1129c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Remove the apps for the given apk identified by packageName. 1139c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 114ed13187a745866483139e2878037e1f8427ce567Kenny Guy public void removePackage(String packageName, UserHandleCompat user) { 115eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final List<AppInfo> data = this.data; 1165c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 117eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka AppInfo info = data.get(i); 1189c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = info.intent.getComponent(); 119ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (info.user.equals(user) && packageName.equals(component.getPackageName())) { 1209c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(info); 1219c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1239c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 124ed13187a745866483139e2878037e1f8427ce567Kenny Guy mIconCache.remove(packageName, user); 1259c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1260589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato 1279c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1289c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Add and remove icons for this package which has been updated. 1299c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 130ed13187a745866483139e2878037e1f8427ce567Kenny Guy public void updatePackage(Context context, String packageName, UserHandleCompat user) { 131ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 132ed13187a745866483139e2878037e1f8427ce567Kenny Guy final List<LauncherActivityInfoCompat> matches = launcherApps.getActivityList(packageName, 133ed13187a745866483139e2878037e1f8427ce567Kenny Guy user); 1349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (matches.size() > 0) { 1359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find disabled/removed activities and remove them from data and add them 1369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // to the removed list. 1375c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = data.size() - 1; i >= 0; i--) { 138eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo applicationInfo = data.get(i); 1399c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = applicationInfo.intent.getComponent(); 140ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (user.equals(applicationInfo.user) 141ed13187a745866483139e2878037e1f8427ce567Kenny Guy && packageName.equals(component.getPackageName())) { 1429c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (!findActivity(matches, component)) { 1439c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato removed.add(applicationInfo); 144ed13187a745866483139e2878037e1f8427ce567Kenny Guy mIconCache.remove(component, user); 1459c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato data.remove(i); 1469c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1479c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1489c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1499c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1509c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Find enabled activities and add them to the adapter 1519c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato // Also updates existing activities with new labels/icons 1529c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato int count = matches.size(); 1535c16f3ecd6b47bff3abbe40deb3d39c66a3b0012Romain Guy for (int i = 0; i < count; i++) { 154ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherActivityInfoCompat info = matches.get(i); 155eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka AppInfo applicationInfo = findApplicationInfoLocked( 156ed13187a745866483139e2878037e1f8427ce567Kenny Guy info.getComponentName().getPackageName(), user, 15752a2841f6b364d6a002d33bcea5816b1bce2e30dAdam Cohen info.getComponentName().getClassName()); 1589c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato if (applicationInfo == null) { 159ed13187a745866483139e2878037e1f8427ce567Kenny Guy add(new AppInfo(context, info, user, mIconCache, null)); 1609c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } else { 161ed13187a745866483139e2878037e1f8427ce567Kenny Guy mIconCache.remove(applicationInfo.componentName, user); 162c3eecff9043759926df124483b45fe8f4436ae7cWinson Chung mIconCache.getTitleAndIcon(applicationInfo, info, null); 1639c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato modified.add(applicationInfo); 1649c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1659c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1662d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } else { 1672d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn // Remove all data for this package. 1682d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn for (int i = data.size() - 1; i >= 0; i--) { 169eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo applicationInfo = data.get(i); 1702d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn final ComponentName component = applicationInfo.intent.getComponent(); 171ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (user.equals(applicationInfo.user) 172ed13187a745866483139e2878037e1f8427ce567Kenny Guy && packageName.equals(component.getPackageName())) { 1732d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn removed.add(applicationInfo); 174ed13187a745866483139e2878037e1f8427ce567Kenny Guy mIconCache.remove(component, user); 1752d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn data.remove(i); 1762d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1772d86dfec5797bfd4fba78562032c14bd9b6cfa7aDianne Hackborn } 1789c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1799c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1809c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1819c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1829c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 1839c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 1849c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 185ed13187a745866483139e2878037e1f8427ce567Kenny Guy private static boolean findActivity(List<LauncherActivityInfoCompat> apps, 186ed13187a745866483139e2878037e1f8427ce567Kenny Guy ComponentName component) { 187ed13187a745866483139e2878037e1f8427ce567Kenny Guy for (LauncherActivityInfoCompat info : apps) { 188ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (info.getComponentName().equals(component)) { 1899c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return true; 1909c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1919c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1929c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return false; 1939c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 1949c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato 1959c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato /** 196ed13187a745866483139e2878037e1f8427ce567Kenny Guy * Query the launcher apps service for whether the supplied package has 197ed13187a745866483139e2878037e1f8427ce567Kenny Guy * MAIN/LAUNCHER activities in the supplied package. 198ed13187a745866483139e2878037e1f8427ce567Kenny Guy */ 199ed13187a745866483139e2878037e1f8427ce567Kenny Guy static boolean packageHasActivities(Context context, String packageName, 200ed13187a745866483139e2878037e1f8427ce567Kenny Guy UserHandleCompat user) { 201ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context); 202ed13187a745866483139e2878037e1f8427ce567Kenny Guy return launcherApps.getActivityList(packageName, user).size() > 0; 203ed13187a745866483139e2878037e1f8427ce567Kenny Guy } 204ed13187a745866483139e2878037e1f8427ce567Kenny Guy 205ed13187a745866483139e2878037e1f8427ce567Kenny Guy /** 206d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato * Returns whether <em>apps</em> contains <em>component</em>. 207d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato */ 208ed13187a745866483139e2878037e1f8427ce567Kenny Guy private static boolean findActivity(ArrayList<AppInfo> apps, ComponentName component, 209ed13187a745866483139e2878037e1f8427ce567Kenny Guy UserHandleCompat user) { 210d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato final int N = apps.size(); 211ed13187a745866483139e2878037e1f8427ce567Kenny Guy for (int i = 0; i < N; i++) { 212eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka final AppInfo info = apps.get(i); 213ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (info.user.equals(user) && info.componentName.equals(component)) { 214d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return true; 215d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 216d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 217d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato return false; 218d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato } 219d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato 220d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato /** 2219c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato * Find an ApplicationInfo object for the given packageName and className. 2229c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato */ 223ed13187a745866483139e2878037e1f8427ce567Kenny Guy private AppInfo findApplicationInfoLocked(String packageName, UserHandleCompat user, 224ed13187a745866483139e2878037e1f8427ce567Kenny Guy String className) { 225eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka for (AppInfo info: data) { 2269c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato final ComponentName component = info.intent.getComponent(); 227ed13187a745866483139e2878037e1f8427ce567Kenny Guy if (user.equals(info.user) && packageName.equals(component.getPackageName()) 2289c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato && className.equals(component.getClassName())) { 2299c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return info; 2309c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2319c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2329c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato return null; 2339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato } 2349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato} 235