package org.bbs.apklauncher; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bbs.apkparser.PackageInfoX; import org.bbs.apkparser.PackageInfoX.ApplicationInfoX; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.FeatureInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.util.Log; public class PackageManagerProxy extends PackageManager { private static final String TAG = PackageManagerProxy.class.getSimpleName(); private PackageManager mProxy; public PackageManagerProxy(PackageManager policy) { mProxy = policy; } // @hide public Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo){ return ReflectUtil.loadItemIcon(mProxy, itemInfo, appInfo); } @Override public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException { Log.d(TAG, "getPackageInfo(). packageName: " + packageName + " flags: " + flags); ApkPackageManager pm = ApkPackageManager.getInstance(); if (pm.hasApplicationInfo(packageName) // && (flags | PackageManager.GET_META_DATA) != 0 ) { PackageInfoX aInfo = pm.getPackageInfo(packageName); Log.d(TAG, "use pased PackageInfoX: " + aInfo); return aInfo; } return mProxy.getPackageInfo(packageName, flags); } @Override public String[] currentToCanonicalPackageNames(String[] names) { return mProxy.currentToCanonicalPackageNames(names); } @Override public String[] canonicalToCurrentPackageNames(String[] names) { return mProxy.canonicalToCurrentPackageNames(names); } @Override public Intent getLaunchIntentForPackage(String packageName) { return mProxy.getLaunchIntentForPackage(packageName); } @Override public Intent getLeanbackLaunchIntentForPackage(String packageName) { return mProxy.getLeanbackLaunchIntentForPackage(packageName); } @Override public int[] getPackageGids(String packageName) throws NameNotFoundException { return mProxy.getPackageGids(packageName); } @Override public PermissionInfo getPermissionInfo(String name, int flags) throws NameNotFoundException { return mProxy.getPermissionInfo(name, flags); } @Override public List<PermissionInfo> queryPermissionsByGroup(String group, int flags) throws NameNotFoundException { return mProxy.queryPermissionsByGroup(group, flags); } @Override public PermissionGroupInfo getPermissionGroupInfo(String name, int flags) throws NameNotFoundException { return mProxy.getPermissionGroupInfo(name, flags); } @Override public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { return mProxy.getAllPermissionGroups(flags); } @Override public ApplicationInfo getApplicationInfo(String packageName, int flags) throws NameNotFoundException { Log.d(TAG, "getApplicationInfo(). packageName: " + packageName + " flags: " + flags); ApkPackageManager pm = ApkPackageManager.getInstance(); if (pm.hasApplicationInfo(packageName) // && (flags | PackageManager.GET_META_DATA) != 0 ) { ApplicationInfoX aInfo = pm.getApplicationInfo(packageName); Log.d(TAG, "use pased ApplicationInfoX: " + aInfo); return aInfo; } return mProxy.getApplicationInfo(packageName, flags); } @Override public ActivityInfo getActivityInfo(ComponentName component, int flags) throws NameNotFoundException { return mProxy.getActivityInfo(component, flags); } @Override public ActivityInfo getReceiverInfo(ComponentName component, int flags) throws NameNotFoundException { return mProxy.getReceiverInfo(component, flags); } @Override public ServiceInfo getServiceInfo(ComponentName component, int flags) throws NameNotFoundException { return mProxy.getServiceInfo(component, flags); } @Override public ProviderInfo getProviderInfo(ComponentName component, int flags) throws NameNotFoundException { return mProxy.getProviderInfo(component, flags); } @Override public List<PackageInfo> getInstalledPackages(int flags) { return mProxy.getInstalledPackages(flags); } @Override public List<PackageInfo> getPackagesHoldingPermissions( String[] permissions, int flags) { return mProxy.getPackagesHoldingPermissions(permissions, flags); } @Override public int checkPermission(String permName, String pkgName) { return mProxy.checkPermission(permName, pkgName); } @Override public boolean isPermissionRevokedByPolicy(String permName, String pkgName) { return mProxy.isPermissionRevokedByPolicy(permName, pkgName); } @Override public boolean addPermission(PermissionInfo info) { return mProxy.addPermission(info); } @Override public boolean addPermissionAsync(PermissionInfo info) { return mProxy.addPermission(info); } @Override public void removePermission(String name) { mProxy.removePermission(name); } @Override public int checkSignatures(String pkg1, String pkg2) { return mProxy.checkSignatures(pkg1, pkg2); } @Override public int checkSignatures(int uid1, int uid2) { return mProxy.checkSignatures(uid1, uid2); } @Override public String[] getPackagesForUid(int uid) { return mProxy.getPackagesForUid(uid); } @Override public String getNameForUid(int uid) { return mProxy.getNameForUid(uid); } @Override public List<ApplicationInfo> getInstalledApplications(int flags) { return mProxy.getInstalledApplications(flags); } @Override public String[] getSystemSharedLibraryNames() { return mProxy.getSystemSharedLibraryNames(); } @Override public FeatureInfo[] getSystemAvailableFeatures() { return mProxy.getSystemAvailableFeatures(); } @Override public boolean hasSystemFeature(String name) { return mProxy.hasSystemFeature(name); } @Override public ResolveInfo resolveActivity(Intent intent, int flags) { return mProxy.resolveActivity(intent, flags); } @Override public List<ResolveInfo> queryIntentActivities(Intent intent, int flags) { return mProxy.queryIntentActivities(intent, flags); } @Override public List<ResolveInfo> queryIntentActivityOptions( ComponentName caller, Intent[] specifics, Intent intent, int flags) { return mProxy.queryIntentActivityOptions(caller, specifics, intent, flags); } @Override public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) { return mProxy.queryBroadcastReceivers(intent, flags); } @Override public ResolveInfo resolveService(Intent intent, int flags) { return mProxy.resolveService(intent, flags); } @Override public List<ResolveInfo> queryIntentServices(Intent intent, int flags) { return mProxy.queryIntentServices(intent, flags); } @Override public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) { return mProxy.queryIntentContentProviders(intent, flags); } @Override public ProviderInfo resolveContentProvider(String name, int flags) { return mProxy.resolveContentProvider(name, flags); } @Override public List<ProviderInfo> queryContentProviders(String processName, int uid, int flags) { return mProxy.queryContentProviders(processName, uid, flags); } @Override public InstrumentationInfo getInstrumentationInfo( ComponentName className, int flags) throws NameNotFoundException { return mProxy.getInstrumentationInfo(className, flags); } @Override public List<InstrumentationInfo> queryInstrumentation( String targetPackage, int flags) { return mProxy.queryInstrumentation(targetPackage, flags); } @Override public Drawable getDrawable(String packageName, int resid, ApplicationInfo appInfo) { return mProxy.getDrawable(packageName, resid, appInfo); } @Override public Drawable getActivityIcon(ComponentName activityName) throws NameNotFoundException { return mProxy.getActivityIcon(activityName); } @Override public Drawable getActivityIcon(Intent intent) throws NameNotFoundException { return mProxy.getActivityIcon(intent); } @Override public Drawable getActivityBanner(ComponentName activityName) throws NameNotFoundException { return mProxy.getActivityBanner(activityName); } @Override public Drawable getActivityBanner(Intent intent) throws NameNotFoundException { return mProxy.getActivityBanner(intent); } @Override public Drawable getDefaultActivityIcon() { return mProxy.getDefaultActivityIcon(); } @Override public Drawable getApplicationIcon(ApplicationInfo info) { return mProxy.getApplicationIcon(info); } @Override public Drawable getApplicationIcon(String packageName) throws NameNotFoundException { return mProxy.getApplicationIcon(packageName); } @Override public Drawable getApplicationBanner(ApplicationInfo info) { return mProxy.getApplicationBanner(info); } @Override public Drawable getApplicationBanner(String packageName) throws NameNotFoundException { return mProxy.getApplicationBanner(packageName); } @Override public Drawable getActivityLogo(ComponentName activityName) throws NameNotFoundException { return mProxy.getActivityLogo(activityName); } @Override public Drawable getActivityLogo(Intent intent) throws NameNotFoundException { return mProxy.getActivityLogo(intent); } @Override public Drawable getApplicationLogo(ApplicationInfo info) { return mProxy.getApplicationBanner(info); } @Override public Drawable getApplicationLogo(String packageName) throws NameNotFoundException { return mProxy.getApplicationIcon(packageName); } @Override public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { return mProxy.getUserBadgedIcon(icon, user); } @Override public Drawable getUserBadgedDrawableForDensity(Drawable drawable, UserHandle user, Rect badgeLocation, int badgeDensity) { return mProxy.getUserBadgedDrawableForDensity(drawable, user, badgeLocation, badgeDensity); } @Override public CharSequence getUserBadgedLabel(CharSequence label, UserHandle user) { return mProxy.getUserBadgedLabel(label, user); } @Override public CharSequence getText(String packageName, int resid, ApplicationInfo appInfo) { return mProxy.getText(packageName, resid, appInfo); } @Override public XmlResourceParser getXml(String packageName, int resid, ApplicationInfo appInfo) { return mProxy.getXml(packageName, resid, appInfo); } @Override public CharSequence getApplicationLabel(ApplicationInfo info) { return mProxy.getApplicationLabel(info); } @Override public Resources getResourcesForActivity(ComponentName activityName) throws NameNotFoundException { return mProxy.getResourcesForActivity(activityName); } @Override public Resources getResourcesForApplication(ApplicationInfo app) throws NameNotFoundException { return mProxy.getResourcesForApplication(app); } @Override public Resources getResourcesForApplication(String appPackageName) throws NameNotFoundException { return mProxy.getResourcesForApplication(appPackageName); } @Override public void verifyPendingInstall(int id, int verificationCode) { mProxy.verifyPendingInstall(id, verificationCode); } @Override public void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay) { mProxy.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay); } @Override public void setInstallerPackageName(String targetPackage, String installerPackageName) { mProxy.setInstallerPackageName(targetPackage, installerPackageName); } @Override public String getInstallerPackageName(String packageName) { return mProxy.getInstallerPackageName(packageName); } @Override public void addPackageToPreferred(String packageName) { mProxy.addPackageToPreferred(packageName); } @Override public void removePackageFromPreferred(String packageName) { mProxy.removePackageFromPreferred(packageName); } @Override public List<PackageInfo> getPreferredPackages(int flags) { return mProxy.getPreferredPackages(flags); } @Override public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { mProxy.addPreferredActivity(filter, match, set, activity); } @Override public void clearPackagePreferredActivities(String packageName) { mProxy.clearPackagePreferredActivities(packageName); } @Override public int getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName) { return mProxy.getPreferredActivities(outFilters, outActivities, packageName); } @Override public void setComponentEnabledSetting(ComponentName componentName, int newState, int flags) { mProxy.setComponentEnabledSetting(componentName, newState, flags); } @Override public int getComponentEnabledSetting(ComponentName componentName) { return mProxy.getComponentEnabledSetting(componentName); } @Override public PackageInfo getPackageArchiveInfo(String archiveFilePath, int flags) { return mProxy.getPackageArchiveInfo(archiveFilePath, flags); } @Override public void setApplicationEnabledSetting(String packageName, int newState, int flags) { mProxy.setApplicationEnabledSetting(packageName, newState, flags); } @Override public int getApplicationEnabledSetting(String packageName) { return mProxy.getApplicationEnabledSetting(packageName); } @Override public boolean isSafeMode() { return mProxy.isSafeMode(); } @Override public PackageInstaller getPackageInstaller() { return mProxy.getPackageInstaller(); } public static String flag2Str(int flag){ String str = ""; return str; } public static Map<Integer, String> sFlagMap = new HashMap<Integer, String>(); static { sFlagMap.put(GET_ACTIVITIES, "GET_ACTIVITIES"); sFlagMap.put(GET_CONFIGURATIONS, "GET_CONFIGURATIONS"); sFlagMap.put(GET_DISABLED_COMPONENTS, "GET_DISABLED_COMPONENTS"); sFlagMap.put(GET_DISABLED_UNTIL_USED_COMPONENTS, "GET_DISABLED_UNTIL_USED_COMPONENTS"); sFlagMap.put(GET_INSTRUMENTATION, "GET_INSTRUMENTATION"); sFlagMap.put(GET_INTENT_FILTERS, "GET_INTENT_FILTERS"); sFlagMap.put(GET_META_DATA, "GET_META_DATA"); sFlagMap.put(GET_PERMISSIONS, "GET_PERMISSIONS"); sFlagMap.put(GET_PROVIDERS, "GET_PROVIDERS"); sFlagMap.put(GET_RECEIVERS, "GET_RECEIVERS"); sFlagMap.put(GET_RESOLVED_FILTER, "GET_RESOLVED_FILTER"); sFlagMap.put(GET_SERVICES, "GET_SERVICES"); sFlagMap.put(GET_SHARED_LIBRARY_FILES, "GET_SHARED_LIBRARY_FILES"); sFlagMap.put(GET_SIGNATURES, "GET_SIGNATURES"); sFlagMap.put(GET_UNINSTALLED_PACKAGES, "GET_UNINSTALLED_PACKAGES"); sFlagMap.put(GET_URI_PERMISSION_PATTERNS, "GET_URI_PERMISSION_PATTERNS"); } }