Adding options in the partner apk to disable the default wallpaper and

provide a folder containing additional wallpapers

issue: 16045459

Change-Id: Id411121ff552d0d270258a5b371d1fd756bd7884
This commit is contained in:
Sunny Goyal
2014-07-16 16:04:08 -07:00
parent 3484638cad
commit cdc4dbd878
4 changed files with 109 additions and 87 deletions
@@ -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;
}
}
@@ -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<String, String> filenames = getImageFilenames(id);
if (filenames != null) {
return filenames.second;
}
return null;
mLayoutInflater, convertView, parent, thumbDrawable);
}
private Pair<String, String> getImageFilenames(int id) {
@@ -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() {
@@ -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<ResourceWallpaperInfo> wallpapers = findBundledWallpapers();
ArrayList<WallpaperTileInfo> 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<ResourceWallpaperInfo> findBundledWallpapers() {
private ArrayList<WallpaperTileInfo> findBundledWallpapers() {
final PackageManager pm = getPackageManager();
final ArrayList<ResourceWallpaperInfo> bundled = new ArrayList<ResourceWallpaperInfo>(24);
final ArrayList<WallpaperTileInfo> bundled = new ArrayList<WallpaperTileInfo>(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<ApplicationInfo, Integer> 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<ResourceWallpaperInfo> known, Resources res,
private void addWallpapers(ArrayList<WallpaperTileInfo> 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<ResourceWallpaperInfo> mWallpapers;
private static class SimpleWallpapersAdapter extends ArrayAdapter<WallpaperTileInfo> {
private final LayoutInflater mLayoutInflater;
BuiltInWallpapersAdapter(Activity activity, ArrayList<ResourceWallpaperInfo> wallpapers) {
SimpleWallpapersAdapter(Activity activity, ArrayList<WallpaperTileInfo> 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;