1 package com.android.wallpaperpicker.tileinfo; 2 3 import android.graphics.Point; 4 import android.graphics.drawable.Drawable; 5 import android.net.Uri; 6 import android.os.AsyncTask; 7 import android.util.Log; 8 import android.widget.Toast; 9 10 import com.android.gallery3d.common.Utils; 11 import com.android.photos.BitmapRegionTileSource; 12 import com.android.photos.BitmapRegionTileSource.BitmapSource; 13 import com.android.wallpaperpicker.R; 14 import com.android.wallpaperpicker.WallpaperPickerActivity; 15 import com.android.wallpaperpicker.common.DialogUtils; 16 import com.android.wallpaperpicker.common.InputStreamProvider; 17 import com.android.wallpaperpicker.common.WallpaperManagerCompat; 18 19 import java.io.File; 20 import java.io.IOException; 21 import java.io.InputStream; 22 23 public class FileWallpaperInfo extends DrawableThumbWallpaperInfo { 24 private static final String TAG = "FileWallpaperInfo"; 25 26 private final File mFile; 27 28 public FileWallpaperInfo(File target, Drawable thumb) { 29 super(thumb); 30 mFile = target; 31 } 32 33 @Override 34 public void onClick(final WallpaperPickerActivity a) { 35 a.setWallpaperButtonEnabled(false); 36 final BitmapRegionTileSource.FilePathBitmapSource bitmapSource = 37 new BitmapRegionTileSource.FilePathBitmapSource(mFile, a); 38 a.setCropViewTileSource(bitmapSource, false, true, null, new Runnable() { 39 40 @Override 41 public void run() { 42 if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { 43 a.setWallpaperButtonEnabled(true); 44 } 45 } 46 }); 47 } 48 49 @Override 50 public void onSave(final WallpaperPickerActivity a) { 51 final InputStreamProvider isp = InputStreamProvider.fromUri(a, Uri.fromFile(mFile)); 52 AsyncTask<Integer, Void, Point> cropTask = new AsyncTask<Integer, Void, Point>() { 53 54 @Override 55 protected Point doInBackground(Integer... params) { 56 InputStream is = null; 57 try { 58 Point bounds = isp.getImageBounds(); 59 if (bounds == null) { 60 Log.w(TAG, "Error loading image bounds"); 61 return null; 62 } 63 is = isp.newStreamNotNull(); 64 WallpaperManagerCompat.getInstance(a).setStream(is, null, true, params[0]); 65 return bounds; 66 } catch (IOException e) { 67 Log.w(TAG, "cannot write stream to wallpaper", e); 68 } finally { 69 Utils.closeSilently(is); 70 } 71 return null; 72 } 73 74 @Override 75 protected void onPostExecute(Point bounds) { 76 if (bounds != null) { 77 a.setBoundsAndFinish(bounds, a.getWallpaperParallaxOffset() == 0f); 78 } else { 79 Toast.makeText(a, R.string.wallpaper_set_fail, Toast.LENGTH_SHORT).show(); 80 } 81 } 82 }; 83 84 DialogUtils.executeCropTaskAfterPrompt(a, cropTask, a.getOnDialogCancelListener()); 85 } 86 87 @Override 88 public boolean isSelectable() { 89 return true; 90 } 91 92 @Override 93 public boolean isNamelessWallpaper() { 94 return true; 95 } 96 }