• 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.graphics.Rect;
26 import android.os.Build;
27 import android.os.Bundle;
28 import android.os.UserHandle;
29 
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.HashMap;
33 import java.util.List;
34 import java.util.Map;
35 
36 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
37 public class LauncherAppsCompatVL extends LauncherAppsCompat {
38 
39     protected LauncherApps mLauncherApps;
40 
41     private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks
42             = new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>();
43 
LauncherAppsCompatVL(Context context)44     LauncherAppsCompatVL(Context context) {
45         super();
46         mLauncherApps = (LauncherApps) context.getSystemService("launcherapps");
47     }
48 
getActivityList(String packageName, UserHandleCompat user)49     public List<LauncherActivityInfoCompat> getActivityList(String packageName,
50             UserHandleCompat user) {
51         List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName,
52                 user.getUser());
53         if (list.size() == 0) {
54             return Collections.emptyList();
55         }
56         ArrayList<LauncherActivityInfoCompat> compatList =
57                 new ArrayList<LauncherActivityInfoCompat>(list.size());
58         for (LauncherActivityInfo info : list) {
59             compatList.add(new LauncherActivityInfoCompatVL(info));
60         }
61         return compatList;
62     }
63 
resolveActivity(Intent intent, UserHandleCompat user)64     public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) {
65         LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser());
66         if (activity != null) {
67             return new LauncherActivityInfoCompatVL(activity);
68         } else {
69             return null;
70         }
71     }
72 
startActivityForProfile(ComponentName component, UserHandleCompat user, Rect sourceBounds, Bundle opts)73     public void startActivityForProfile(ComponentName component, UserHandleCompat user,
74             Rect sourceBounds, Bundle opts) {
75         mLauncherApps.startMainActivity(component, user.getUser(), sourceBounds, opts);
76     }
77 
showAppDetailsForProfile(ComponentName component, UserHandleCompat user)78     public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) {
79         mLauncherApps.startAppDetailsActivity(component, user.getUser(), null, null);
80     }
81 
addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback)82     public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
83         WrappedCallback wrappedCallback = new WrappedCallback(callback);
84         synchronized (mCallbacks) {
85             mCallbacks.put(callback, wrappedCallback);
86         }
87         mLauncherApps.registerCallback(wrappedCallback);
88     }
89 
removeOnAppsChangedCallback( LauncherAppsCompat.OnAppsChangedCallbackCompat callback)90     public void removeOnAppsChangedCallback(
91             LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
92         WrappedCallback wrappedCallback = null;
93         synchronized (mCallbacks) {
94             wrappedCallback = mCallbacks.remove(callback);
95         }
96         if (wrappedCallback != null) {
97             mLauncherApps.unregisterCallback(wrappedCallback);
98         }
99     }
100 
isPackageEnabledForProfile(String packageName, UserHandleCompat user)101     public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) {
102         return mLauncherApps.isPackageEnabled(packageName, user.getUser());
103     }
104 
isActivityEnabledForProfile(ComponentName component, UserHandleCompat user)105     public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) {
106         return mLauncherApps.isActivityEnabled(component, user.getUser());
107     }
108 
isPackageSuspendedForProfile(String packageName, UserHandleCompat user)109     public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
110         return false;
111     }
112 
113     private static class WrappedCallback extends LauncherApps.Callback {
114         private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback;
115 
WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback)116         public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
117             mCallback = callback;
118         }
119 
onPackageRemoved(String packageName, UserHandle user)120         public void onPackageRemoved(String packageName, UserHandle user) {
121             mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user));
122         }
123 
onPackageAdded(String packageName, UserHandle user)124         public void onPackageAdded(String packageName, UserHandle user) {
125             mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user));
126         }
127 
onPackageChanged(String packageName, UserHandle user)128         public void onPackageChanged(String packageName, UserHandle user) {
129             mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user));
130         }
131 
onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing)132         public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) {
133             mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing);
134         }
135 
onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing)136         public void onPackagesUnavailable(String[] packageNames, UserHandle user,
137                 boolean replacing) {
138             mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user),
139                     replacing);
140         }
141 
onPackagesSuspended(String[] packageNames, UserHandle user)142         public void onPackagesSuspended(String[] packageNames, UserHandle user) {
143             mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user));
144         }
145 
onPackagesUnsuspended(String[] packageNames, UserHandle user)146         public void onPackagesUnsuspended(String[] packageNames, UserHandle user) {
147             mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user));
148         }
149     }
150 }
151 
152