diff options
author | Kenny Guy <kennyguy@google.com> | 2014-06-24 10:29:28 +0100 |
---|---|---|
committer | Kenny Guy <kennyguy@google.com> | 2014-06-24 11:43:19 +0100 |
commit | 7bc272a11b701a32d2ed91277341c382cbd84aeb (patch) | |
tree | dd38c26e211acf7988f4cdccdca9f46958b56044 /src/com/android/launcher3/compat/LauncherAppsCompatVL.java | |
parent | 01453e855fa87ee19f61223b2b1a6965071ee95a (diff) | |
download | android_packages_apps_Trebuchet-7bc272a11b701a32d2ed91277341c382cbd84aeb.tar.gz android_packages_apps_Trebuchet-7bc272a11b701a32d2ed91277341c382cbd84aeb.tar.bz2 android_packages_apps_Trebuchet-7bc272a11b701a32d2ed91277341c382cbd84aeb.zip |
Revert Cls stopping now-master running on googlefood
This reverts commits 01453e855fa87ee19f61223b2b1a6965071ee95a.
and 242bbe1b72e4978dde8a662d164cd186305e14a7.
"Add content description to bagded icons."
"Remove reflection now we are building against L"
Bug: 15833449
Change-Id: I81a5316f5619a9cd3b6ab9fd03b2ba96657b7f68
Diffstat (limited to 'src/com/android/launcher3/compat/LauncherAppsCompatVL.java')
-rw-r--r-- | src/com/android/launcher3/compat/LauncherAppsCompatVL.java | 162 |
1 files changed, 119 insertions, 43 deletions
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index ca9b67146..21f2659ba 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -19,48 +19,99 @@ package com.android.launcher3.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.Build; import android.os.Bundle; import android.os.UserHandle; +import java.lang.reflect.InvocationHandler; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -public class LauncherAppsCompatVL extends LauncherAppsCompat { +import java.lang.reflect.Proxy; +import java.lang.reflect.Method; - private LauncherApps mLauncherApps; +public class LauncherAppsCompatVL extends LauncherAppsCompat { - private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks - = new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>(); + private Object mLauncherApps; + private Class mLauncherAppsClass; + private Class mListenerClass; + private Method mGetActivityList; + private Method mResolveActivity; + private Method mStartActivityForProfile; + private Method mAddOnAppsChangedListener; + private Method mRemoveOnAppsChangedListener; + private Method mIsPackageEnabledForProfile; + private Method mIsActivityEnabledForProfile; + + private Map<OnAppsChangedListenerCompat, Object> mListeners + = new HashMap<OnAppsChangedListenerCompat, Object>(); + + static LauncherAppsCompatVL build(Context context, Object launcherApps) { + LauncherAppsCompatVL compat = new LauncherAppsCompatVL(context, launcherApps); + + compat.mListenerClass = ReflectUtils.getClassForName( + "android.content.pm.LauncherApps$OnAppsChangedListener"); + compat.mLauncherAppsClass = ReflectUtils.getClassForName("android.content.pm.LauncherApps"); + + compat.mGetActivityList = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "getActivityList", + String.class, UserHandle.class); + compat.mResolveActivity = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "resolveActivity", + Intent.class, UserHandle.class); + compat.mStartActivityForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "startActivityForProfile", + ComponentName.class, Rect.class, Bundle.class, UserHandle.class); + compat.mAddOnAppsChangedListener = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "addOnAppsChangedListener", compat.mListenerClass); + compat.mRemoveOnAppsChangedListener = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "removeOnAppsChangedListener", compat.mListenerClass); + compat.mIsPackageEnabledForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "isPackageEnabledForProfile", String.class, UserHandle.class); + compat.mIsActivityEnabledForProfile = ReflectUtils.getMethod(compat.mLauncherAppsClass, + "isActivityEnabledForProfile", ComponentName.class, UserHandle.class); + + if (compat.mListenerClass != null + && compat.mLauncherAppsClass != null + && compat.mGetActivityList != null + && compat.mResolveActivity != null + && compat.mStartActivityForProfile != null + && compat.mAddOnAppsChangedListener != null + && compat.mRemoveOnAppsChangedListener != null + && compat.mIsPackageEnabledForProfile != null + && compat.mIsActivityEnabledForProfile != null) { + return compat; + } + return null; + } - LauncherAppsCompatVL(Context context) { + private LauncherAppsCompatVL(Context context, Object launcherApps) { super(); - mLauncherApps = (LauncherApps) context.getSystemService("launcherapps"); + mLauncherApps = launcherApps; } public List<LauncherActivityInfoCompat> getActivityList(String packageName, UserHandleCompat user) { - List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName, - user.getUser()); + List<Object> list = (List<Object>) ReflectUtils.invokeMethod(mLauncherApps, + mGetActivityList, packageName, user.getUser()); if (list.size() == 0) { return Collections.EMPTY_LIST; } ArrayList<LauncherActivityInfoCompat> compatList = new ArrayList<LauncherActivityInfoCompat>(list.size()); - for (LauncherActivityInfo info : list) { + for (Object info : list) { compatList.add(new LauncherActivityInfoCompatVL(info)); } return compatList; } public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) { - LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser()); + Object activity = ReflectUtils.invokeMethod(mLauncherApps, mResolveActivity, + intent, user.getUser()); if (activity != null) { return new LauncherActivityInfoCompatVL(activity); } else { @@ -68,64 +119,89 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { } } - public void startActivityForProfile(ComponentName component, UserHandleCompat user, - Rect sourceBounds, Bundle opts) { - mLauncherApps.startActivityForProfile(component, user.getUser(), sourceBounds, opts); + public void startActivityForProfile(ComponentName component, Rect sourceBounds, + Bundle opts, UserHandleCompat user) { + ReflectUtils.invokeMethod(mLauncherApps, mStartActivityForProfile, + component, sourceBounds, opts, user.getUser()); } - public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { - WrappedCallback wrappedCallback = new WrappedCallback(callback); - synchronized (mCallbacks) { - mCallbacks.put(callback, wrappedCallback); + public void addOnAppsChangedListener(LauncherAppsCompat.OnAppsChangedListenerCompat listener) { + Object wrappedListener = Proxy.newProxyInstance(mListenerClass.getClassLoader(), + new Class[]{mListenerClass}, new WrappedListener(listener)); + synchronized (mListeners) { + mListeners.put(listener, wrappedListener); } - mLauncherApps.addOnAppsChangedCallback(wrappedCallback); + ReflectUtils.invokeMethod(mLauncherApps, mAddOnAppsChangedListener, wrappedListener); } - public void removeOnAppsChangedCallback( - LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { - WrappedCallback wrappedCallback = null; - synchronized (mCallbacks) { - wrappedCallback = mCallbacks.remove(callback); + public void removeOnAppsChangedListener( + LauncherAppsCompat.OnAppsChangedListenerCompat listener) { + Object wrappedListener = null; + synchronized (mListeners) { + wrappedListener = mListeners.remove(listener); } - if (wrappedCallback != null) { - mLauncherApps.removeOnAppsChangedCallback(wrappedCallback); + if (wrappedListener != null) { + ReflectUtils.invokeMethod(mLauncherApps, mRemoveOnAppsChangedListener, wrappedListener); } } public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) { - return mLauncherApps.isPackageEnabledForProfile(packageName, user.getUser()); + return (Boolean) ReflectUtils.invokeMethod(mLauncherApps, mIsPackageEnabledForProfile, + packageName, user.getUser()); } public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) { - return mLauncherApps.isActivityEnabledForProfile(component, user.getUser()); + return (Boolean) ReflectUtils.invokeMethod(mLauncherApps, mIsActivityEnabledForProfile, + component, user.getUser()); } - private static class WrappedCallback extends LauncherApps.OnAppsChangedCallback { - private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback; + private static class WrappedListener implements InvocationHandler { + private LauncherAppsCompat.OnAppsChangedListenerCompat mListener; + + public WrappedListener(LauncherAppsCompat.OnAppsChangedListenerCompat listener) { + mListener = listener; + } - public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) { - mCallback = callback; + public Object invoke(Object proxy, Method m, Object[] args) throws Throwable { + try { + String methodName = m.getName(); + if ("onPackageRemoved".equals(methodName)) { + onPackageRemoved((UserHandle) args[0], (String) args[1]); + } else if ("onPackageAdded".equals(methodName)) { + onPackageAdded((UserHandle) args[0], (String) args[1]); + } else if ("onPackageChanged".equals(methodName)) { + onPackageChanged((UserHandle) args[0], (String) args[1]); + } else if ("onPackagesAvailable".equals(methodName)) { + onPackagesAvailable((UserHandle) args[0], (String []) args[1], + (Boolean) args[2]); + } else if ("onPackagesUnavailable".equals(methodName)) { + onPackagesUnavailable((UserHandle) args[0], (String []) args[1], + (Boolean) args[2]); + } + } finally { + return null; + } } - public void onPackageRemoved(String packageName, UserHandle user) { - mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user)); + public void onPackageRemoved(UserHandle user, String packageName) { + mListener.onPackageRemoved(UserHandleCompat.fromUser(user), packageName); } - public void onPackageAdded(String packageName, UserHandle user) { - mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user)); + public void onPackageAdded(UserHandle user, String packageName) { + mListener.onPackageAdded(UserHandleCompat.fromUser(user), packageName); } - public void onPackageChanged(String packageName, UserHandle user) { - mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user)); + public void onPackageChanged(UserHandle user, String packageName) { + mListener.onPackageChanged(UserHandleCompat.fromUser(user), packageName); } - public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) { - mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing); + public void onPackagesAvailable(UserHandle user, String[] packageNames, boolean replacing) { + mListener.onPackagesAvailable(UserHandleCompat.fromUser(user), packageNames, replacing); } - public void onPackagesUnavailable(String[] packageNames, UserHandle user, + public void onPackagesUnavailable(UserHandle user, String[] packageNames, boolean replacing) { - mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user), + mListener.onPackagesUnavailable(UserHandleCompat.fromUser(user), packageNames, replacing); } } |