• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.launcher3.compat;
18 
19 import android.annotation.TargetApi;
20 import android.content.ComponentName;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.content.pm.LauncherActivityInfo;
24 import android.content.pm.LauncherApps;
25 import android.content.pm.ShortcutInfo;
26 import android.graphics.Rect;
27 import android.os.Build;
28 import android.os.Bundle;
29 import android.os.UserHandle;
30 
31 import com.android.launcher3.shortcuts.ShortcutInfoCompat;
32 
33 import java.util.ArrayList;
34 import java.util.Collections;
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38 
39 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
40 public class LauncherAppsCompatVL extends LauncherAppsCompatV16 {
41 
42     protected LauncherApps mLauncherApps;
43 
44     private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks
45             = new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>();
46 
LauncherAppsCompatVL(Context context)47     LauncherAppsCompatVL(Context context) {
48         super(context);
49         mLauncherApps = (LauncherApps) context.getSystemService("launcherapps");
50     }
51 
getActivityList(String packageName, UserHandleCompat user)52     public List<LauncherActivityInfoCompat> getActivityList(String packageName,
53             UserHandleCompat user) {
54         List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName,
55                 user.getUser());
56         if (list.size() == 0) {
57             return Collections.emptyList();
58         }
59         ArrayList<LauncherActivityInfoCompat> compatList =
60                 new ArrayList<LauncherActivityInfoCompat>(list.size());
61         for (LauncherActivityInfo info : list) {
62             compatList.add(new LauncherActivityInfoCompatVL(info));
63         }
64         return compatList;
65     }
66 
resolveActivity(Intent intent, UserHandleCompat user)67     public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) {
68         LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser());
69         if (activity != null) {
70             return new LauncherActivityInfoCompatVL(activity);
71         } else {
72             return null;
73         }
74     }
75 
startActivityForProfile(ComponentName component, UserHandleCompat user, Rect sourceBounds, Bundle opts)76     public void startActivityForProfile(ComponentName component, UserHandleCompat user,
77             Rect sourceBounds, Bundle opts) {
78         mLauncherApps.startMainActivity(component, user.getUser(), sourceBounds, opts);
79     }
80 
showAppDetailsForProfile(ComponentName component, UserHandleCompat user)81     public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) {
82         mLauncherApps.startAppDetailsActivity(component, user.getUser(), null, null);
83     }
84 
addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback)85     public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
86         WrappedCallback wrappedCallback = new WrappedCallback(callback);
87         synchronized (mCallbacks) {
88             mCallbacks.put(callback, wrappedCallback);
89         }
90         mLauncherApps.registerCallback(wrappedCallback);
91     }
92 
removeOnAppsChangedCallback( LauncherAppsCompat.OnAppsChangedCallbackCompat callback)93     public void removeOnAppsChangedCallback(
94             LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
95         WrappedCallback wrappedCallback = null;
96         synchronized (mCallbacks) {
97             wrappedCallback = mCallbacks.remove(callback);
98         }
99         if (wrappedCallback != null) {
100             mLauncherApps.unregisterCallback(wrappedCallback);
101         }
102     }
103 
isPackageEnabledForProfile(String packageName, UserHandleCompat user)104     public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) {
105         return mLauncherApps.isPackageEnabled(packageName, user.getUser());
106     }
107 
isActivityEnabledForProfile(ComponentName component, UserHandleCompat user)108     public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) {
109         return mLauncherApps.isActivityEnabled(component, user.getUser());
110     }
111 
isPackageSuspendedForProfile(String packageName, UserHandleCompat user)112     public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
113         return false;
114     }
115 
116     private static class WrappedCallback extends LauncherApps.Callback {
117         private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback;
118 
WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback)119         public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
120             mCallback = callback;
121         }
122 
onPackageRemoved(String packageName, UserHandle user)123         public void onPackageRemoved(String packageName, UserHandle user) {
124             mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user));
125         }
126 
onPackageAdded(String packageName, UserHandle user)127         public void onPackageAdded(String packageName, UserHandle user) {
128             mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user));
129         }
130 
onPackageChanged(String packageName, UserHandle user)131         public void onPackageChanged(String packageName, UserHandle user) {
132             mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user));
133         }
134 
onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing)135         public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) {
136             mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing);
137         }
138 
onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing)139         public void onPackagesUnavailable(String[] packageNames, UserHandle user,
140                 boolean replacing) {
141             mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user),
142                     replacing);
143         }
144 
onPackagesSuspended(String[] packageNames, UserHandle user)145         public void onPackagesSuspended(String[] packageNames, UserHandle user) {
146             mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user));
147         }
148 
onPackagesUnsuspended(String[] packageNames, UserHandle user)149         public void onPackagesUnsuspended(String[] packageNames, UserHandle user) {
150             mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user));
151         }
152 
153         @Override
onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts, UserHandle user)154         public void onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts,
155                 UserHandle user) {
156             List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcuts.size());
157             for (ShortcutInfo shortcutInfo : shortcuts) {
158                 shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo));
159             }
160 
161             mCallback.onShortcutsChanged(packageName, shortcutInfoCompats,
162                     UserHandleCompat.fromUser(user));
163         }
164     }
165 }
166 
167