Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b64726e4 authored by Tony Wickham's avatar Tony Wickham
Browse files

Add dialog to set Default Wallpaper on lock screen for N+.

Change-Id: I91c77f5751202f9a4b3a922726ab55e354c50b4a
parent b2694f54
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -73,15 +73,6 @@ public class BitmapCropTask extends AsyncTask<Integer, Void, Boolean> {
    BitmapCropTask.OnBitmapCroppedHandler mOnBitmapCroppedHandler;
    boolean mNoCrop;

    public BitmapCropTask(Context c, String filePath,
            RectF cropBounds, int rotation, int outWidth, int outHeight,
            boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) {
        mContext = c;
        mInFilePath = filePath;
        init(cropBounds, rotation,
                outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndCropHandler);
    }

    public BitmapCropTask(byte[] imageBytes,
            RectF cropBounds, int rotation, int outWidth, int outHeight,
            boolean setWallpaper, boolean saveCroppedBitmap, OnEndCropHandler onEndCropHandler) {
+70 −7
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Process;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.util.Log;
import android.util.Pair;
import android.view.ActionMode;
@@ -77,6 +78,8 @@ import com.android.launcher3.util.Thunk;
import com.android.photos.BitmapRegionTileSource;
import com.android.photos.BitmapRegionTileSource.BitmapSource;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -317,15 +320,75 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {
            a.onLoadRequestComplete(req, true);
        }
        @Override
        public void onSave(WallpaperPickerActivity a) {
        public void onSave(final WallpaperPickerActivity a) {
            if (!Utilities.isNycOrAbove()) {
                try {
                    WallpaperManager.getInstance(a.getContext()).clear();
                    a.setResult(Activity.RESULT_OK);
                } catch (IOException e) {
                    Log.e(TAG, "Setting wallpaper to default threw exception", e);
                } catch (SecurityException e) {
                    Log.w(TAG, "Setting wallpaper to default threw exception", e);
                    // In this case, clearing worked; the exception was thrown afterwards.
                    a.setResult(Activity.RESULT_OK);
                }
                a.finish();
            } else {
                BitmapCropTask.OnEndCropHandler onEndCropHandler
                        = new BitmapCropTask.OnEndCropHandler() {
                    @Override
                    public void run(boolean cropSucceeded) {
                        if (cropSucceeded) {
                            a.setResult(Activity.RESULT_OK);
                        }
                        a.finish();
                    }
                };
                BitmapCropTask setWallpaperTask = getDefaultWallpaperCropTask(a, onEndCropHandler);

                NycWallpaperUtils.executeCropTaskAfterPrompt(a, setWallpaperTask,
                        a.getOnDialogCancelListener());
            }
        }

        @NonNull
        private BitmapCropTask getDefaultWallpaperCropTask(final WallpaperPickerActivity a,
                final BitmapCropTask.OnEndCropHandler onEndCropHandler) {
            return new BitmapCropTask(a, null, null, -1, -1, -1,
                    true, false, onEndCropHandler) {
                @Override
                protected Boolean doInBackground(Integer... params) {
                    int whichWallpaper = params[0];
                    boolean succeeded = true;
                    try {
                        if (whichWallpaper == NycWallpaperUtils.FLAG_SET_LOCK) {
                            Bitmap defaultWallpaper = ((BitmapDrawable) WallpaperManager
                                    .getInstance(a.getApplicationContext()).getBuiltInDrawable())
                                    .getBitmap();
                            ByteArrayOutputStream tmpOut = new ByteArrayOutputStream(2048);
                            if (defaultWallpaper.compress(Bitmap.CompressFormat.PNG, 100,
                                    tmpOut)) {
                                byte[] outByteArray = tmpOut.toByteArray();
                                NycWallpaperUtils.setStream(a.getApplicationContext(),
                                        new ByteArrayInputStream(outByteArray), null, true,
                                        NycWallpaperUtils.FLAG_SET_LOCK);
                            }
                        } else {
                            NycWallpaperUtils.clear(a, whichWallpaper);
                        }
                    } catch (IOException e) {
                        Log.e(TAG, "Setting wallpaper to default threw exception", e);
                        succeeded = false;
                    } catch (SecurityException e) {
                        Log.w(TAG, "Setting wallpaper to default threw exception", e);
                        // In this case, clearing worked; the exception was thrown afterwards.
                        succeeded = true;
                    }
                    return succeeded;
                }
            };
        }

        @Override
        public boolean isSelectable() {
            return true;