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 47 LauncherAppsCompatVL(Context context) { 48 super(context); 49 mLauncherApps = (LauncherApps) context.getSystemService("launcherapps"); 50 } 51 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 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 76 public void startActivityForProfile(ComponentName component, UserHandleCompat user, 77 Rect sourceBounds, Bundle opts) { 78 mLauncherApps.startMainActivity(component, user.getUser(), sourceBounds, opts); 79 } 80 81 public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) { 82 mLauncherApps.startAppDetailsActivity(component, user.getUser(), null, null); 83 } 84 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 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 104 public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) { 105 return mLauncherApps.isPackageEnabled(packageName, user.getUser()); 106 } 107 108 public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) { 109 return mLauncherApps.isActivityEnabled(component, user.getUser()); 110 } 111 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 119 public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { 120 mCallback = callback; 121 } 122 123 public void onPackageRemoved(String packageName, UserHandle user) { 124 mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user)); 125 } 126 127 public void onPackageAdded(String packageName, UserHandle user) { 128 mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user)); 129 } 130 131 public void onPackageChanged(String packageName, UserHandle user) { 132 mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user)); 133 } 134 135 public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) { 136 mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing); 137 } 138 139 public void onPackagesUnavailable(String[] packageNames, UserHandle user, 140 boolean replacing) { 141 mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user), 142 replacing); 143 } 144 145 public void onPackagesSuspended(String[] packageNames, UserHandle user) { 146 mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user)); 147 } 148 149 public void onPackagesUnsuspended(String[] packageNames, UserHandle user) { 150 mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user)); 151 } 152 153 @Override 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