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:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user