From 04cc3a7beabf03c2e09c3b3e99601fe983a3d897 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 17 May 2016 10:32:43 -0700 Subject: Opening the system default wallpaper picker on clicking the wallpaper tile Bug: 28790378 Change-Id: If283b60a0b9563ab8e80d49b0ffa195fc3ffda8a --- .../launcher3/util/PackageManagerHelper.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/com/android/launcher3/util') diff --git a/src/com/android/launcher3/util/PackageManagerHelper.java b/src/com/android/launcher3/util/PackageManagerHelper.java index 08e8e869d..3c4c79aec 100644 --- a/src/com/android/launcher3/util/PackageManagerHelper.java +++ b/src/com/android/launcher3/util/PackageManagerHelper.java @@ -16,17 +16,22 @@ package com.android.launcher3.util; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import com.android.launcher3.Utilities; +import java.util.ArrayList; + /** * Utility methods using package manager */ public class PackageManagerHelper { private static final int FLAG_SUSPENDED = 1<<30; + private static final String LIVE_WALLPAPER_PICKER_PKG = "com.android.wallpaper.livepicker"; /** * Returns true if the app can possibly be on the SDCard. This is just a workaround and doesn't @@ -68,4 +73,27 @@ public class PackageManagerHelper { return false; } } + + /** + * Returns the package for a wallpaper picker system app giving preference to a app which + * is not as image picker. + */ + public static String getWallpaperPickerPackage(PackageManager pm) { + ArrayList excludePackages = new ArrayList<>(); + // Exclude packages which contain an image picker + for (ResolveInfo info : pm.queryIntentActivities( + new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"), 0)) { + excludePackages.add(info.activityInfo.packageName); + } + excludePackages.add(LIVE_WALLPAPER_PICKER_PKG); + + for (ResolveInfo info : pm.queryIntentActivities( + new Intent(Intent.ACTION_SET_WALLPAPER), 0)) { + if (!excludePackages.contains(info.activityInfo.packageName) && + (info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + return info.activityInfo.packageName; + } + } + return excludePackages.get(0); + } } -- cgit v1.2.3