1ed13187a745866483139e2878037e1f8427ce567Kenny Guy/*
2ed13187a745866483139e2878037e1f8427ce567Kenny Guy * Copyright (C) 2014 The Android Open Source Project
3ed13187a745866483139e2878037e1f8427ce567Kenny Guy *
4ed13187a745866483139e2878037e1f8427ce567Kenny Guy * Licensed under the Apache License, Version 2.0 (the "License");
5ed13187a745866483139e2878037e1f8427ce567Kenny Guy * you may not use this file except in compliance with the License.
6ed13187a745866483139e2878037e1f8427ce567Kenny Guy * You may obtain a copy of the License at
7ed13187a745866483139e2878037e1f8427ce567Kenny Guy *
8ed13187a745866483139e2878037e1f8427ce567Kenny Guy *      http://www.apache.org/licenses/LICENSE-2.0
9ed13187a745866483139e2878037e1f8427ce567Kenny Guy *
10ed13187a745866483139e2878037e1f8427ce567Kenny Guy * Unless required by applicable law or agreed to in writing, software
11ed13187a745866483139e2878037e1f8427ce567Kenny Guy * distributed under the License is distributed on an "AS IS" BASIS,
12ed13187a745866483139e2878037e1f8427ce567Kenny Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ed13187a745866483139e2878037e1f8427ce567Kenny Guy * See the License for the specific language governing permissions and
14ed13187a745866483139e2878037e1f8427ce567Kenny Guy * limitations under the License.
15ed13187a745866483139e2878037e1f8427ce567Kenny Guy */
16ed13187a745866483139e2878037e1f8427ce567Kenny Guy
17ed13187a745866483139e2878037e1f8427ce567Kenny Guypackage com.android.launcher3.compat;
18ed13187a745866483139e2878037e1f8427ce567Kenny Guy
19ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.content.ComponentName;
20ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.content.Context;
21ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.content.Intent;
223ff9047221820a01c6510503466f8c78b43fdc6dCharles Heimport android.content.pm.ApplicationInfo;
233e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyalimport android.content.pm.LauncherActivityInfo;
24ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.graphics.Rect;
25ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport android.os.Bundle;
267c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyalimport android.os.UserHandle;
27dec3a908bfa395095e80e4a532cff98612b624deSunny Goyalimport android.support.annotation.Nullable;
28782f0c9a896db58aeaa60d15f291831b8d7b4c93Sunny Goyalimport com.android.launcher3.Utilities;
29bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickhamimport com.android.launcher3.shortcuts.ShortcutInfoCompat;
3086222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickhamimport com.android.launcher3.util.PackageUserKey;
31ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport java.util.List;
32ed13187a745866483139e2878037e1f8427ce567Kenny Guy
33ed13187a745866483139e2878037e1f8427ce567Kenny Guypublic abstract class LauncherAppsCompat {
34ed13187a745866483139e2878037e1f8427ce567Kenny Guy
35c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy    public interface OnAppsChangedCallbackCompat {
367c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackageRemoved(String packageName, UserHandle user);
377c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackageAdded(String packageName, UserHandle user);
387c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackageChanged(String packageName, UserHandle user);
397c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing);
407c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing);
417c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackagesSuspended(String[] packageNames, UserHandle user);
427c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        void onPackagesUnsuspended(String[] packageNames, UserHandle user);
43bfbf7f9f4a0b300613f0ff27a4eb592d88c08325Tony Wickham        void onShortcutsChanged(String packageName, List<ShortcutInfoCompat> shortcuts,
447c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal                UserHandle user);
45ed13187a745866483139e2878037e1f8427ce567Kenny Guy    }
46ed13187a745866483139e2878037e1f8427ce567Kenny Guy
47ed13187a745866483139e2878037e1f8427ce567Kenny Guy    protected LauncherAppsCompat() {
48ed13187a745866483139e2878037e1f8427ce567Kenny Guy    }
49ed13187a745866483139e2878037e1f8427ce567Kenny Guy
50c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy    private static LauncherAppsCompat sInstance;
51bf3366f0d9d5f3c99907cc3f74d41b3ec628dcd4Rajeev Kumar    private static final Object sInstanceLock = new Object();
52c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy
53ed13187a745866483139e2878037e1f8427ce567Kenny Guy    public static LauncherAppsCompat getInstance(Context context) {
54c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy        synchronized (sInstanceLock) {
55c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy            if (sInstance == null) {
56e24cb63b811e2885a69e7df794e9972cdf5a57b9Hyunyoung Song                if (Utilities.ATLEAST_OREO) {
57782f0c9a896db58aeaa60d15f291831b8d7b4c93Sunny Goyal                    sInstance = new LauncherAppsCompatVO(context.getApplicationContext());
58782f0c9a896db58aeaa60d15f291831b8d7b4c93Sunny Goyal                } else {
59782f0c9a896db58aeaa60d15f291831b8d7b4c93Sunny Goyal                    sInstance = new LauncherAppsCompatVL(context.getApplicationContext());
60782f0c9a896db58aeaa60d15f291831b8d7b4c93Sunny Goyal                }
61ed13187a745866483139e2878037e1f8427ce567Kenny Guy            }
62c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy            return sInstance;
63ed13187a745866483139e2878037e1f8427ce567Kenny Guy        }
64ed13187a745866483139e2878037e1f8427ce567Kenny Guy    }
65ed13187a745866483139e2878037e1f8427ce567Kenny Guy
663e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal    public abstract List<LauncherActivityInfo> getActivityList(String packageName,
677c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal            UserHandle user);
683e9be43b6ea75c8b82b57aa58508a0c3e8e1d721Sunny Goyal    public abstract LauncherActivityInfo resolveActivity(Intent intent,
697c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal            UserHandle user);
707c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal    public abstract void startActivityForProfile(ComponentName component, UserHandle user,
71c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy            Rect sourceBounds, Bundle opts);
72ad2e91a216edae0f25bce83a2b058c81953981afSunny Goyal    public abstract ApplicationInfo getApplicationInfo(
73ad2e91a216edae0f25bce83a2b058c81953981afSunny Goyal            String packageName, int flags, UserHandle user);
74e3c59256794448c67e01333a9f5036559b1bd502Tony    public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user,
75e3c59256794448c67e01333a9f5036559b1bd502Tony            Rect sourceBounds, Bundle opts);
76c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy    public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
77c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy    public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
787c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal    public abstract boolean isPackageEnabledForProfile(String packageName, UserHandle user);
79ed13187a745866483139e2878037e1f8427ce567Kenny Guy    public abstract boolean isActivityEnabledForProfile(ComponentName component,
807c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal            UserHandle user);
8186222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham    public abstract List<ShortcutConfigActivityInfo> getCustomShortcutActivityList(
8286222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham            @Nullable PackageUserKey packageUser);
83dec3a908bfa395095e80e4a532cff98612b624deSunny Goyal
84e3c59256794448c67e01333a9f5036559b1bd502Tony    public void showAppDetailsForProfile(ComponentName component, UserHandle user) {
85e3c59256794448c67e01333a9f5036559b1bd502Tony        showAppDetailsForProfile(component, user, null, null);
86e3c59256794448c67e01333a9f5036559b1bd502Tony    }
8744cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy}
88