From cdc4dbd878a1f45d21c2881127cd5194e4e48ced Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 16 Jul 2014 16:04:08 -0700 Subject: Adding options in the partner apk to disable the default wallpaper and provide a folder containing additional wallpapers issue: 16045459 Change-Id: Id411121ff552d0d270258a5b371d1fd756bd7884 --- .../src/com/android/launcher3/Partner.java | 17 +++ .../android/launcher3/SavedWallpaperImages.java | 49 ++------ .../android/launcher3/WallpaperCropActivity.java | 6 +- .../android/launcher3/WallpaperPickerActivity.java | 124 +++++++++++++-------- 4 files changed, 109 insertions(+), 87 deletions(-) (limited to 'WallpaperPicker') diff --git a/WallpaperPicker/src/com/android/launcher3/Partner.java b/WallpaperPicker/src/com/android/launcher3/Partner.java index d3c825d29..d172ce997 100644 --- a/WallpaperPicker/src/com/android/launcher3/Partner.java +++ b/WallpaperPicker/src/com/android/launcher3/Partner.java @@ -24,6 +24,8 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.util.Log; +import java.io.File; + /** * Utilities to discover and interact with partner customizations. There can * only be one set of customizations on a device, and it must be bundled with @@ -40,6 +42,9 @@ public class Partner { public static final String RESOURCE_WALLPAPERS = "partner_wallpapers"; public static final String RESOURCE_DEFAULT_LAYOUT = "partner_default_layout"; + public static final String RESOURCE_DEFAULT_WALLPAPER_HIDDEN = "default_wallpapper_hidden"; + public static final String RESOURCE_SYSTEM_WALLPAPER_DIR = "system_wallpaper_directory"; + private static boolean sSearched = false; private static Partner sPartner; @@ -94,4 +99,16 @@ public class Partner { "xml", getPackageName()); return folder != 0; } + + public boolean hideDefaultWallpaper() { + int resId = getResources().getIdentifier(RESOURCE_DEFAULT_WALLPAPER_HIDDEN, "bool", + getPackageName()); + return resId != 0 && getResources().getBoolean(resId); + } + + public File getWallpaperDirectory() { + int resId = getResources().getIdentifier(RESOURCE_SYSTEM_WALLPAPER_DIR, "string", + getPackageName()); + return (resId != 0) ? new File(getResources().getString(resId)) : null; + } } diff --git a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java index 44bfdf1f9..2bdf8f1cd 100644 --- a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java +++ b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java @@ -34,8 +34,6 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListAdapter; -import com.android.photos.BitmapRegionTileSource; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -49,39 +47,17 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Context mContext; LayoutInflater mLayoutInflater; - public static class SavedWallpaperTile extends WallpaperPickerActivity.WallpaperTileInfo { + public static class SavedWallpaperTile extends WallpaperPickerActivity.FileWallpaperInfo { private int mDbId; - private Drawable mThumb; - public SavedWallpaperTile(int dbId, Drawable thumb) { + public SavedWallpaperTile(int dbId, File target, Drawable thumb) { + super(target, thumb); mDbId = dbId; - mThumb = thumb; - } - @Override - public void onClick(WallpaperPickerActivity a) { - String imageFilename = a.getSavedImages().getImageFilename(mDbId); - File file = new File(a.getFilesDir(), imageFilename); - BitmapRegionTileSource.FilePathBitmapSource bitmapSource = - new BitmapRegionTileSource.FilePathBitmapSource(file.getAbsolutePath(), 1024); - a.setCropViewTileSource(bitmapSource, false, true, null); - } - @Override - public void onSave(WallpaperPickerActivity a) { - boolean finishActivityWhenDone = true; - String imageFilename = a.getSavedImages().getImageFilename(mDbId); - a.setWallpaper(imageFilename, finishActivityWhenDone); } + @Override public void onDelete(WallpaperPickerActivity a) { a.getSavedImages().deleteImage(mDbId); } - @Override - public boolean isSelectable() { - return true; - } - @Override - public boolean isNamelessWallpaper() { - return true; - } } public SavedWallpaperImages(Activity context) { @@ -98,7 +74,8 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { SQLiteDatabase db = mDb.getReadableDatabase(); Cursor result = db.query(ImageDb.TABLE_NAME, new String[] { ImageDb.COLUMN_ID, - ImageDb.COLUMN_IMAGE_THUMBNAIL_FILENAME }, // cols to return + ImageDb.COLUMN_IMAGE_THUMBNAIL_FILENAME, + ImageDb.COLUMN_IMAGE_FILENAME}, // cols to return null, // select query null, // args to select query null, @@ -112,7 +89,9 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Bitmap thumb = BitmapFactory.decodeFile(file.getAbsolutePath()); if (thumb != null) { - mImages.add(new SavedWallpaperTile(result.getInt(0), new BitmapDrawable(thumb))); + mImages.add(new SavedWallpaperTile(result.getInt(0), + new File(mContext.getFilesDir(), result.getString(2)), + new BitmapDrawable(thumb))); } } result.close(); @@ -136,15 +115,7 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Log.e(TAG, "Error decoding thumbnail for wallpaper #" + position); } return WallpaperPickerActivity.createImageTileView( - mLayoutInflater, position, convertView, parent, thumbDrawable); - } - - public String getImageFilename(int id) { - Pair filenames = getImageFilenames(id); - if (filenames != null) { - return filenames.second; - } - return null; + mLayoutInflater, convertView, parent, thumbDrawable); } private Pair getImageFilenames(int id) { diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 6c58da0a8..5d4fb2b13 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -300,10 +300,10 @@ public class WallpaperCropActivity extends Activity { return 0; } - protected void setWallpaper(String filePath, final boolean finishActivityWhenDone) { - int rotation = getRotationFromExif(filePath); + protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) { + int rotation = getRotationFromExif(this, uri); BitmapCropTask cropTask = new BitmapCropTask( - this, filePath, null, rotation, 0, 0, true, false, null); + this, uri, null, rotation, 0, 0, true, false, null); final Point bounds = cropTask.getImageBounds(); Runnable onEndCrop = new Runnable() { public void run() { diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index b5e34cfe7..09793572b 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -17,6 +17,7 @@ package com.android.launcher3; import android.animation.LayoutTransition; +import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; import android.app.WallpaperInfo; @@ -61,12 +62,12 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; +import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.FrameLayout; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ListAdapter; import android.widget.Toast; import com.android.photos.BitmapRegionTileSource; @@ -109,6 +110,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public static abstract class WallpaperTileInfo { protected View mView; + public Drawable mThumb; + public void setView(View v) { mView = v; } @@ -194,10 +197,36 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } + public static class FileWallpaperInfo extends WallpaperTileInfo { + private File mFile; + + public FileWallpaperInfo(File target, Drawable thumb) { + mFile = target; + mThumb = thumb; + } + @Override + public void onClick(WallpaperPickerActivity a) { + BitmapRegionTileSource.UriBitmapSource bitmapSource = + new BitmapRegionTileSource.UriBitmapSource(a, Uri.fromFile(mFile), 1024); + a.setCropViewTileSource(bitmapSource, false, true, null); + } + @Override + public void onSave(WallpaperPickerActivity a) { + a.setWallpaper(Uri.fromFile(mFile), true); + } + @Override + public boolean isSelectable() { + return true; + } + @Override + public boolean isNamelessWallpaper() { + return true; + } + } + public static class ResourceWallpaperInfo extends WallpaperTileInfo { private Resources mResources; private int mResId; - private Drawable mThumb; public ResourceWallpaperInfo(Resources res, int resId, Drawable thumb) { mResources = res; @@ -237,8 +266,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } + @TargetApi(Build.VERSION_CODES.KITKAT) public static class DefaultWallpaperInfo extends WallpaperTileInfo { - public Drawable mThumb; public DefaultWallpaperInfo(Drawable thumb) { mThumb = thumb; } @@ -431,9 +460,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { }; // Populate the built-in wallpapers - ArrayList wallpapers = findBundledWallpapers(); + ArrayList wallpapers = findBundledWallpapers(); mWallpapersView = (LinearLayout) findViewById(R.id.wallpaper_list); - BuiltInWallpapersAdapter ia = new BuiltInWallpapersAdapter(this, wallpapers); + SimpleWallpapersAdapter ia = new SimpleWallpapersAdapter(this, wallpapers); populateWallpapersFromAdapter(mWallpapersView, ia, false); // Populate the saved wallpapers @@ -484,20 +513,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { pickImageInfo.setView(pickImageTile); pickImageTile.setOnClickListener(mThumbnailOnClickListener); - // Add a tile for the default wallpaper - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - DefaultWallpaperInfo defaultWallpaperInfo = getDefaultWallpaper(); - if (defaultWallpaperInfo != null) { - FrameLayout defaultWallpaperTile = (FrameLayout) createImageTileView( - getLayoutInflater(), 0, null, mWallpapersView, defaultWallpaperInfo.mThumb); - setWallpaperItemPaddingToZero(defaultWallpaperTile); - defaultWallpaperTile.setTag(defaultWallpaperInfo); - mWallpapersView.addView(defaultWallpaperTile, 0); - defaultWallpaperTile.setOnClickListener(mThumbnailOnClickListener); - defaultWallpaperInfo.setView(defaultWallpaperTile); - } - } - // Select the first item; wait for a layout pass so that we initialize the dimensions of // cropView or the defaultWallpaperView first mCropView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @@ -889,9 +904,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { v.setOnLongClickListener(mLongClickListener); } - private ArrayList findBundledWallpapers() { + private ArrayList findBundledWallpapers() { final PackageManager pm = getPackageManager(); - final ArrayList bundled = new ArrayList(24); + final ArrayList bundled = new ArrayList(24); Partner partner = Partner.get(pm); if (partner != null) { @@ -901,6 +916,34 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { 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); + } + + 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))); + } + } + } } Pair r = getWallpaperArrayResourceId(); @@ -912,9 +955,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - // Add an entry for the default wallpaper (stored in system resources) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { - ResourceWallpaperInfo defaultWallpaperInfo = getPreKKDefaultWallpaperInfo(); + if (partner == null || !partner.hideDefaultWallpaper()) { + // Add an entry for the default wallpaper (stored in system resources) + WallpaperTileInfo defaultWallpaperInfo = + (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) + ? getPreKKDefaultWallpaperInfo() + : getDefaultWallpaper(); if (defaultWallpaperInfo != null) { bundled.add(0, defaultWallpaperInfo); } @@ -963,6 +1009,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return null; } + @TargetApi(Build.VERSION_CODES.KITKAT) private DefaultWallpaperInfo getDefaultWallpaper() { File defaultThumbFile = new File(getFilesDir(), DEFAULT_WALLPAPER_THUMBNAIL_FILENAME); Bitmap thumb = null; @@ -1011,7 +1058,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - private void addWallpapers(ArrayList known, Resources res, + private void addWallpapers(ArrayList known, Resources res, String packageName, int listResId) { final String[] extras = res.getStringArray(listResId); for (String extra : extras) { @@ -1058,37 +1105,24 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - private static class BuiltInWallpapersAdapter extends BaseAdapter implements ListAdapter { - private LayoutInflater mLayoutInflater; - private ArrayList mWallpapers; + private static class SimpleWallpapersAdapter extends ArrayAdapter { + private final LayoutInflater mLayoutInflater; - BuiltInWallpapersAdapter(Activity activity, ArrayList wallpapers) { + SimpleWallpapersAdapter(Activity activity, ArrayList wallpapers) { + super(activity, R.layout.wallpaper_picker_item, wallpapers); mLayoutInflater = activity.getLayoutInflater(); - mWallpapers = wallpapers; - } - - public int getCount() { - return mWallpapers.size(); - } - - public ResourceWallpaperInfo getItem(int position) { - return mWallpapers.get(position); - } - - public long getItemId(int position) { - return position; } public View getView(int position, View convertView, ViewGroup parent) { - Drawable thumb = mWallpapers.get(position).mThumb; + Drawable thumb = getItem(position).mThumb; if (thumb == null) { Log.e(TAG, "Error decoding thumbnail for wallpaper #" + position); } - return createImageTileView(mLayoutInflater, position, convertView, parent, thumb); + return createImageTileView(mLayoutInflater, convertView, parent, thumb); } } - public static View createImageTileView(LayoutInflater layoutInflater, int position, + public static View createImageTileView(LayoutInflater layoutInflater, View convertView, ViewGroup parent, Drawable thumb) { View view; -- cgit v1.2.3