Merge "Use new default wallpaper API" into jb-ub-now-jetsonic

This commit is contained in:
Michael Jurka
2013-10-16 17:35:01 +00:00
committed by Android (Google) Code Review
3 changed files with 141 additions and 29 deletions
+5
View File
@@ -27,6 +27,11 @@
android:id="@+id/cropView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/defaultWallpaperView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
<ProgressBar
android:id="@+id/loading"
style="@android:style/Widget.Holo.ProgressBar.Large"
@@ -62,6 +62,7 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter {
File file = new File(a.getFilesDir(), imageFilename);
CropView v = a.getCropView();
int rotation = WallpaperCropActivity.getRotationFromExif(file.getAbsolutePath());
a.getDefaultWallpaperView().setVisibility(View.INVISIBLE);
v.setTileSource(
new BitmapRegionTileSource(a, file.getAbsolutePath(), 1024, rotation), null);
v.moveToLeft();
@@ -31,7 +31,9 @@ import android.database.Cursor;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.Rect;
@@ -40,6 +42,7 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
@@ -51,10 +54,10 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLayoutChangeListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.BaseAdapter;
@@ -64,14 +67,11 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import com.android.gallery3d.exif.ExifInterface;
import com.android.photos.BitmapRegionTileSource;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class WallpaperPickerActivity extends WallpaperCropActivity {
@@ -81,6 +81,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
public static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6;
public static final int PICK_LIVE_WALLPAPER = 7;
private static final String TEMP_WALLPAPER_TILES = "TEMP_WALLPAPER_TILES";
private static final String DEFAULT_WALLPAPER_THUMBNAIL_FILENAME = "default_thumb.jpg";
private View mSelectedThumb;
private boolean mIgnoreNextTap;
@@ -88,6 +89,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
private LinearLayout mWallpapersView;
private View mWallpaperStrip;
private ImageView mDefaultWallpaperView;
private ActionMode.Callback mActionModeCallback;
private ActionMode mActionMode;
@@ -133,6 +135,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
public void onClick(WallpaperPickerActivity a) {
CropView v = a.getCropView();
int rotation = WallpaperCropActivity.getRotationFromExif(a, mUri);
a.getDefaultWallpaperView().setVisibility(View.INVISIBLE);
v.setTileSource(new BitmapRegionTileSource(a, mUri, 1024, rotation), null);
v.setTouchEnabled(true);
}
@@ -176,6 +179,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
BitmapRegionTileSource source = new BitmapRegionTileSource(
mResources, a, mResId, 1024, rotation);
CropView v = a.getCropView();
a.getDefaultWallpaperView().setVisibility(View.INVISIBLE);
v.setTileSource(source, null);
Point wallpaperSize = WallpaperCropActivity.getDefaultWallpaperSize(
a.getResources(), a.getWindowManager());
@@ -200,6 +204,42 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
}
}
public static class DefaultWallpaperInfo extends WallpaperTileInfo {
public Drawable mThumb;
public DefaultWallpaperInfo(Drawable thumb) {
mThumb = thumb;
}
@Override
public void onClick(WallpaperPickerActivity a) {
a.getCropView().setTouchEnabled(false);
ImageView defaultWallpaperView = a.getDefaultWallpaperView();
defaultWallpaperView.setVisibility(View.VISIBLE);
Drawable defaultWallpaper = WallpaperManager.getInstance(a).getBuiltInDrawable(
defaultWallpaperView.getWidth(), defaultWallpaperView.getHeight(),
false, 0.5f, 0.5f);
if (defaultWallpaper != null) {
defaultWallpaperView.setBackgroundDrawable(defaultWallpaper);
}
}
@Override
public void onSave(WallpaperPickerActivity a) {
try {
WallpaperManager.getInstance(a).clear();
} catch (IOException e) {
Log.w("Setting wallpaper to default threw exception", e);
}
a.finish();
}
@Override
public boolean isSelectable() {
return true;
}
@Override
public boolean isNamelessWallpaper() {
return true;
}
}
public void setWallpaperStripYOffset(float offset) {
mWallpaperStrip.setPadding(0, 0, 0, (int) offset);
}
@@ -209,6 +249,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
setContentView(R.layout.wallpaper_picker);
mCropView = (CropView) findViewById(R.id.cropView);
mDefaultWallpaperView = (ImageView) findViewById(R.id.defaultWallpaperView);
mWallpaperStrip = findViewById(R.id.wallpaper_strip);
mCropView.setTouchCallback(new CropView.TouchCallback() {
LauncherViewPropertyAnimator mAnim;
@@ -305,12 +346,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
ArrayList<ResourceWallpaperInfo> wallpapers = findBundledWallpapers();
mWallpapersView = (LinearLayout) findViewById(R.id.wallpaper_list);
BuiltInWallpapersAdapter ia = new BuiltInWallpapersAdapter(this, wallpapers);
populateWallpapersFromAdapter(mWallpapersView, ia, false, true);
populateWallpapersFromAdapter(mWallpapersView, ia, false);
// Populate the saved wallpapers
mSavedImages = new SavedWallpaperImages(this);
mSavedImages.loadThumbnailsAndImageIdList();
populateWallpapersFromAdapter(mWallpapersView, mSavedImages, true, true);
populateWallpapersFromAdapter(mWallpapersView, mSavedImages, true);
// Populate the live wallpapers
final LinearLayout liveWallpapersView =
@@ -319,7 +360,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
a.registerDataSetObserver(new DataSetObserver() {
public void onChanged() {
liveWallpapersView.removeAllViews();
populateWallpapersFromAdapter(liveWallpapersView, a, false, false);
populateWallpapersFromAdapter(liveWallpapersView, a, false);
initializeScrollForRtl();
updateTileIndices();
}
@@ -330,7 +371,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
(LinearLayout) findViewById(R.id.third_party_wallpaper_list);
final ThirdPartyWallpaperPickerListAdapter ta =
new ThirdPartyWallpaperPickerListAdapter(this);
populateWallpapersFromAdapter(thirdPartyWallpapersView, ta, false, false);
populateWallpapersFromAdapter(thirdPartyWallpapersView, ta, false);
// Add a tile for the Gallery
LinearLayout masterWallpaperList = (LinearLayout) findViewById(R.id.master_wallpaper_list);
@@ -354,7 +395,33 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
pickImageTile.setTag(pickImageInfo);
pickImageInfo.setView(pickImageTile);
pickImageTile.setOnClickListener(mThumbnailOnClickListener);
pickImageInfo.setView(pickImageTile);
// Add a tile for the default wallpaper
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
DefaultWallpaperInfo defaultWallpaperInfo = getDefaultWallpaper();
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
mDefaultWallpaperView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
if ((right - left) > 0 && (bottom - top) > 0) {
if (mWallpapersView.getChildCount() > 0) {
mThumbnailOnClickListener.onClick(mWallpapersView.getChildAt(0));
}
v.removeOnLayoutChangeListener(this);
}
}
});
updateTileIndices();
@@ -520,7 +587,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
}
private void populateWallpapersFromAdapter(ViewGroup parent, BaseAdapter adapter,
boolean addLongPressHandler, boolean selectFirstTile) {
boolean addLongPressHandler) {
for (int i = 0; i < adapter.getCount(); i++) {
FrameLayout thumbnail = (FrameLayout) adapter.getView(i, null, parent);
parent.addView(thumbnail, i);
@@ -531,9 +598,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
addLongPressHandler(thumbnail);
}
thumbnail.setOnClickListener(mThumbnailOnClickListener);
if (i == 0 && selectFirstTile) {
mThumbnailOnClickListener.onClick(thumbnail);
}
}
}
@@ -700,18 +764,35 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
}
// Add an entry for the default wallpaper (stored in system resources)
ResourceWallpaperInfo defaultWallpaperInfo = getDefaultWallpaperInfo();
if (defaultWallpaperInfo != null) {
bundledWallpapers.add(0, defaultWallpaperInfo);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
ResourceWallpaperInfo defaultWallpaperInfo = getPreKKDefaultWallpaperInfo();
if (defaultWallpaperInfo != null) {
bundledWallpapers.add(0, defaultWallpaperInfo);
}
}
return bundledWallpapers;
}
private ResourceWallpaperInfo getDefaultWallpaperInfo() {
private boolean writeImageToFileAsJpeg(File f, Bitmap b) {
try {
f.createNewFile();
FileOutputStream thumbFileStream =
openFileOutput(f.getName(), Context.MODE_PRIVATE);
b.compress(Bitmap.CompressFormat.JPEG, 95, thumbFileStream);
thumbFileStream.close();
return true;
} catch (IOException e) {
Log.e(TAG, "Error while writing bitmap to file " + e);
f.delete();
}
return false;
}
private ResourceWallpaperInfo getPreKKDefaultWallpaperInfo() {
Resources sysRes = Resources.getSystem();
int resId = sysRes.getIdentifier("default_wallpaper", "drawable", "android");
File defaultThumbFile = new File(getFilesDir(), "default_thumb.jpg");
File defaultThumbFile = new File(getFilesDir(), DEFAULT_WALLPAPER_THUMBNAIL_FILENAME);
Bitmap thumb = null;
boolean defaultWallpaperExists = false;
if (defaultThumbFile.exists()) {
@@ -724,17 +805,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
thumb = createThumbnail(
defaultThumbSize, this, null, null, sysRes, resId, rotation, false);
if (thumb != null) {
try {
defaultThumbFile.createNewFile();
FileOutputStream thumbFileStream =
openFileOutput(defaultThumbFile.getName(), Context.MODE_PRIVATE);
thumb.compress(Bitmap.CompressFormat.JPEG, 95, thumbFileStream);
thumbFileStream.close();
defaultWallpaperExists = true;
} catch (IOException e) {
Log.e(TAG, "Error while writing default wallpaper thumbnail to file " + e);
defaultThumbFile.delete();
}
defaultWallpaperExists = writeImageToFileAsJpeg(defaultThumbFile, thumb);
}
}
if (defaultWallpaperExists) {
@@ -743,6 +814,37 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
return null;
}
private DefaultWallpaperInfo getDefaultWallpaper() {
File defaultThumbFile = new File(getFilesDir(), DEFAULT_WALLPAPER_THUMBNAIL_FILENAME);
Bitmap thumb = null;
boolean defaultWallpaperExists = false;
if (defaultThumbFile.exists()) {
thumb = BitmapFactory.decodeFile(defaultThumbFile.getAbsolutePath());
defaultWallpaperExists = true;
} else {
Resources res = getResources();
Point defaultThumbSize = getDefaultThumbnailSize(res);
Paint p = new Paint();
p.setFilterBitmap(true);
Drawable wallpaperDrawable = WallpaperManager.getInstance(this).getBuiltInDrawable(
defaultThumbSize.x, defaultThumbSize.y, true, 0.5f, 0.5f);
if (wallpaperDrawable != null) {
thumb = Bitmap.createBitmap(
defaultThumbSize.x, defaultThumbSize.y, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(thumb);
wallpaperDrawable.draw(c);
c.setBitmap(null);
}
if (thumb != null) {
defaultWallpaperExists = writeImageToFileAsJpeg(defaultThumbFile, thumb);
}
}
if (defaultWallpaperExists) {
return new DefaultWallpaperInfo(new BitmapDrawable(thumb));
}
return null;
}
public Pair<ApplicationInfo, Integer> getWallpaperArrayResourceId() {
// Context.getPackageName() may return the "original" package name,
// com.android.launcher3; Resources needs the real package name,
@@ -784,6 +886,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
return mCropView;
}
public ImageView getDefaultWallpaperView() {
return mDefaultWallpaperView;
}
public SavedWallpaperImages getSavedImages() {
return mSavedImages;
}