diff options
author | d34d <clark@cyngn.com> | 2015-07-14 17:19:16 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2015-07-14 17:52:19 -0700 |
commit | 171a74383839994b3aea8b250b8da3400f18cb7d (patch) | |
tree | 96503e8acf1c00254da449f2a32500ca4c288b52 | |
parent | d2e4bae86311f339c11e054e3615628e9a655cb6 (diff) | |
download | android_packages_apps_Trebuchet-171a74383839994b3aea8b250b8da3400f18cb7d.tar.gz android_packages_apps_Trebuchet-171a74383839994b3aea8b250b8da3400f18cb7d.tar.bz2 android_packages_apps_Trebuchet-171a74383839994b3aea8b250b8da3400f18cb7d.zip |
Wallpaper: Allow multiple partners to be loaded
Current implementation only allowed for one partner, and any
additional partner wallpapers would not be loaded.
Partrner.get() still returns the first partner and a new method,
getAllPartners is introduced which returns a list of all partners.
Change-Id: I06b6cd4817d3f812e2110967f075d68ee31cb318
-rwxr-xr-x | WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java | 69 | ||||
-rw-r--r-- | src/com/android/launcher3/Partner.java | 27 | ||||
-rw-r--r-- | src/com/android/launcher3/Utilities.java | 24 |
3 files changed, 83 insertions, 37 deletions
diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index a90cdbaae..946ce4cfb 100755 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -78,6 +78,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.List; public class WallpaperPickerActivity extends WallpaperCropActivity { static final String TAG = "Launcher.WallpaperPickerActivity"; @@ -972,41 +973,47 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { final PackageManager pm = getPackageManager(); final ArrayList<WallpaperTileInfo> bundled = new ArrayList<WallpaperTileInfo>(24); - Partner partner = Partner.get(pm); - if (partner != null) { - final Resources partnerRes = partner.getResources(); - final int resId = partnerRes.getIdentifier(Partner.RES_WALLPAPERS, "array", - partner.getPackageName()); - if (resId != 0) { - addWallpapers(bundled, partnerRes, partner.getPackageName(), resId); - } + List<Partner> partners = Partner.getAllPartners(pm); + boolean hideDefault = false; + if (partners != null) { + for (Partner partner : partners) { + final Resources partnerRes = partner.getResources(); + final int resId = partnerRes.getIdentifier(Partner.RES_WALLPAPERS, "array", + partner.getPackageName()); + if (resId != 0) { + addWallpapers(bundled, partnerRes, partner.getPackageName(), resId); + } - // Add system wallpapers - File systemDir = partner.getWallpaperDirectory(); - if (systemDir != null && systemDir.isDirectory()) { - for (File file : systemDir.listFiles()) { - if (!file.isFile()) { - continue; - } - String name = file.getName(); - int dotPos = name.lastIndexOf('.'); - String extension = ""; - if (dotPos >= -1) { - extension = name.substring(dotPos); - name = name.substring(0, dotPos); - } + // Add system wallpapers + File systemDir = partner.getWallpaperDirectory(); + if (systemDir != null && systemDir.isDirectory()) { + for (File file : systemDir.listFiles()) { + if (!file.isFile()) { + continue; + } + String name = file.getName(); + int dotPos = name.lastIndexOf('.'); + String extension = ""; + if (dotPos >= -1) { + extension = name.substring(dotPos); + name = name.substring(0, dotPos); + } - if (name.endsWith("_small")) { - // it is a thumbnail - continue; - } + if (name.endsWith("_small")) { + // it is a thumbnail + continue; + } - File thumbnail = new File(systemDir, name + "_small" + extension); - Bitmap thumb = BitmapFactory.decodeFile(thumbnail.getAbsolutePath()); - if (thumb != null) { - bundled.add(new FileWallpaperInfo(file, new BitmapDrawable(thumb))); + File thumbnail = new File(systemDir, name + "_small" + extension); + Bitmap thumb = BitmapFactory.decodeFile(thumbnail.getAbsolutePath()); + if (thumb != null) { + bundled.add(new FileWallpaperInfo(file, new BitmapDrawable(thumb))); + } } } + if (partner.hideDefaultWallpaper()) { + hideDefault = true; + } } } @@ -1019,7 +1026,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - if (partner == null || !partner.hideDefaultWallpaper()) { + if (!hideDefault) { // Add an entry for the default wallpaper (stored in system resources) WallpaperTileInfo defaultWallpaperInfo = (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) diff --git a/src/com/android/launcher3/Partner.java b/src/com/android/launcher3/Partner.java index e1913193b..de4eecdda 100644 --- a/src/com/android/launcher3/Partner.java +++ b/src/com/android/launcher3/Partner.java @@ -23,6 +23,8 @@ import android.util.Log; import android.util.Pair; import java.io.File; +import java.util.ArrayList; +import java.util.List; /** * Utilities to discover and interact with partner customizations. There can @@ -54,20 +56,33 @@ public class Partner { public static final String RES_GRID_ICON_SIZE_DP = "grid_icon_size_dp"; private static boolean sSearched = false; - private static Partner sPartner; + private static List<Partner> sPartners; + + static { + sPartners = new ArrayList<Partner>(); + } /** - * Find and return partner details, or {@code null} if none exists. + * Find and return first partner details, or {@code null} if none exists. */ public static synchronized Partner get(PackageManager pm) { + getAllPartners(pm); + return sPartners.size() > 0 ? sPartners.get(0) : null; + } + + /** + * Find and return all partner details, or {@code null} if none exists. + */ + public static synchronized List<Partner> getAllPartners(PackageManager pm) { if (!sSearched) { - Pair<String, Resources> apkInfo = Utilities.findSystemApk(ACTION_PARTNER_CUSTOMIZATION, pm); - if (apkInfo != null) { - sPartner = new Partner(apkInfo.first, apkInfo.second); + List<Pair<String, Resources>> apkInfos = + Utilities.findSystemApks(ACTION_PARTNER_CUSTOMIZATION, pm); + for (Pair<String, Resources> apkInfo : apkInfos) { + sPartners.add(new Partner(apkInfo.first, apkInfo.second)); } sSearched = true; } - return sPartner; + return sPartners; } private final String mPackageName; diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index a594fd9f9..1e8bc2f73 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -50,6 +50,7 @@ import android.view.View; import android.widget.Toast; import java.util.ArrayList; +import java.util.List; /** * Various utilities shared amongst the Launcher's classes. @@ -561,6 +562,29 @@ public final class Utilities { return null; } + /* + * Finds all system apks which had a broadcast receiver listening to a particular action. + * @param action intent action used to find the apk + * @return a list of pairs of apk package name and the resources. + */ + static List<Pair<String, Resources>> findSystemApks(String action, PackageManager pm) { + final Intent intent = new Intent(action); + List<Pair<String, Resources>> systemApks = new ArrayList<Pair<String, Resources>>(); + for (ResolveInfo info : pm.queryBroadcastReceivers(intent, 0)) { + if (info.activityInfo != null && + (info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + final String packageName = info.activityInfo.packageName; + try { + final Resources res = pm.getResourcesForApplication(packageName); + systemApks.add(Pair.create(packageName, res)); + } catch (NameNotFoundException e) { + Log.w(TAG, "Failed to find resources for " + packageName); + } + } + } + return systemApks; + } + public static float convertDpToPixel(float dp, Context context){ Resources resources = context.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); |