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