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    /**
211d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato     * Returns whether <em>apps</em> contains <em>component</em>.
212d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato     */
213ed13187a745866483139e2878037e1f8427ce567Kenny Guy    private static boolean findActivity(ArrayList<AppInfo> apps, ComponentName component,
2147c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal            UserHandle user) {
215d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato        final int N = apps.size();
216ed13187a745866483139e2878037e1f8427ce567Kenny Guy        for (int i = 0; i < N; i++) {
217eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka            final AppInfo info = apps.get(i);
218ed13187a745866483139e2878037e1f8427ce567Kenny Guy            if (info.user.equals(user) && info.componentName.equals(component)) {
219d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato                return true;
220d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato            }
221d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato        }
222d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato        return false;
223d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato    }
224d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato
225d65d08e709ec0916446100bae0a7276d0800382fJoe Onorato    /**
2269c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato     * Find an ApplicationInfo object for the given packageName and className.
2279c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato     */
2287c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal    private AppInfo findApplicationInfoLocked(String packageName, UserHandle user,
229ed13187a745866483139e2878037e1f8427ce567Kenny Guy            String className) {
230eadbfc564d84aaf1d800da3d0d6edf6312f89648Michael Jurka        for (AppInfo info: data) {
231f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal            if (user.equals(info.user) && packageName.equals(info.componentName.getPackageName())
232f0ba8b7ca1dc8fd53451d3d16e9f4fc306cddcd4Sunny Goyal                    && className.equals(info.componentName.getClassName())) {
2339c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato                return info;
2349c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato            }
2359c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato        }
2369c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato        return null;
2379c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato    }
2389c1289cb3bfb74f86e53ec7ac6dd76bb39666b2dJoe Onorato}
239