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