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