1package com.android.wallpaperpicker.tileinfo;
2
3import android.graphics.Point;
4import android.graphics.drawable.Drawable;
5import android.net.Uri;
6import android.os.AsyncTask;
7import android.util.Log;
8import android.widget.Toast;
9
10import com.android.gallery3d.common.Utils;
11import com.android.photos.BitmapRegionTileSource;
12import com.android.photos.BitmapRegionTileSource.BitmapSource;
13import com.android.wallpaperpicker.R;
14import com.android.wallpaperpicker.WallpaperPickerActivity;
15import com.android.wallpaperpicker.common.DialogUtils;
16import com.android.wallpaperpicker.common.InputStreamProvider;
17import com.android.wallpaperpicker.common.WallpaperManagerCompat;
18
19import java.io.File;
20import java.io.IOException;
21import java.io.InputStream;
22
23public 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}