Java tutorial
/* * Copyright (C) 2015 Kumaresan Rajeswaran * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.leanlauncher.compat; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.LauncherActivityInfo; import android.content.pm.LauncherApps; import android.graphics.Rect; import android.os.Bundle; import android.os.UserHandle; import android.support.v4.util.ArrayMap; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public class LauncherAppsCompatVL extends LauncherAppsCompat { private LauncherApps mLauncherApps; private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks = new ArrayMap<>(); LauncherAppsCompatVL(Context context) { super(); mLauncherApps = (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE); } public List<LauncherActivityInfoCompat> getActivityList(String packageName, UserHandleCompat user) { List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName, user.getUser()); if (list.size() == 0) { return Collections.EMPTY_LIST; } ArrayList<LauncherActivityInfoCompat> compatList = new ArrayList<LauncherActivityInfoCompat>(list.size()); for (LauncherActivityInfo info : list) { compatList.add(new LauncherActivityInfoCompatVL(info)); } return compatList; } public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) { LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser()); if (activity != null) { return new LauncherActivityInfoCompatVL(activity); } else { return null; } } public void startActivityForProfile(ComponentName component, UserHandleCompat user, Rect sourceBounds, Bundle opts) { mLauncherApps.startMainActivity(component, user.getUser(), sourceBounds, opts); } public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) { mLauncherApps.startAppDetailsActivity(component, user.getUser(), null, null); } public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { WrappedCallback wrappedCallback = new WrappedCallback(callback); synchronized (mCallbacks) { mCallbacks.put(callback, wrappedCallback); } mLauncherApps.registerCallback(wrappedCallback); } public void removeOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { WrappedCallback wrappedCallback = null; synchronized (mCallbacks) { wrappedCallback = mCallbacks.remove(callback); } if (wrappedCallback != null) { mLauncherApps.unregisterCallback(wrappedCallback); } } public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) { return mLauncherApps.isPackageEnabled(packageName, user.getUser()); } public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) { return mLauncherApps.isActivityEnabled(component, user.getUser()); } private static class WrappedCallback extends LauncherApps.Callback { private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback; public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { mCallback = callback; } public void onPackageRemoved(String packageName, UserHandle user) { mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user)); } public void onPackageAdded(String packageName, UserHandle user) { mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user)); } public void onPackageChanged(String packageName, UserHandle user) { // HACK!! GMS sends out this notification every few seconds // ignore and preserve battery if (!packageName.startsWith("com.google.android.gms")) { mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user)); } } public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) { mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing); } public void onPackagesUnavailable(String[] packageNames, UserHandle user, boolean replacing) { mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user), replacing); } } }