Android Open Source - Warpy Save Image Task






From Project

Back to project page Warpy.

License

The source code is released under:

MIT License

If you think the Android project Warpy listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * The MIT License (MIT)//from w  w w . j av  a 2s. c  om
 *
 * Copyright (c) 2014 Tanner Rutgers
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package ca.tannerrutgers.Warpy.tasks;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;
import ca.tannerrutgers.Warpy.R;
import ca.tannerrutgers.Warpy.activities.WarpyActivity;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Class that saves a Bitmap image in the background
 */
public class SaveImageTask extends AsyncTask<Bitmap, Void, Void> {

    private static final String ALBUM_NAME = "Warpy";

    private ProgressDialog dialog;      // Spinner dialog to show when processing
    private WarpyActivity parent;            // Parent activity that started us
    private IOException exception;      // Exception to be handled later if occurs

    /**
     * Constructor - takes and stores calling activity
     */
    public SaveImageTask(WarpyActivity activity) {
        super();
        this.parent = activity;
        this.dialog = new ProgressDialog(activity);
    }

    /**
     * Setup dialog
     */
    @Override
    protected void onPreExecute() {
        dialog.setMessage(parent.getResources().getString(R.string.saving));
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        dialog.show();
    }

    /**
     * Task to run in background
     */
    @Override
    protected Void doInBackground(Bitmap... params) {
        Bitmap image = null;
        if (params.length == 1) {
            image = params[0];
        } else {
            return null;
        }

        // Save the passed Bitmap publicly
        if (isExternalStorageWritable()) {
            File imageFile = null;
            try {
                imageFile = createImageFile();
                if (imageFile != null && image != null) {
                    OutputStream fOut = new FileOutputStream(imageFile);
                    image.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
                    fOut.flush();
                    fOut.close();
                    MediaStore.Images.Media.insertImage(parent.getContentResolver(), imageFile.getAbsolutePath(), imageFile.getName(), imageFile.getName());
                } else {
                    exception = new IOException("Tried to save null image");
                }
            } catch (IOException e) {
                exception = e;
            }
        } else {
            exception = new IOException("External storage not writable");
        }

        return null;
    }

    /**
     * Called when background task is finished
     */
    @Override
    protected void onPostExecute(Void nothing) {
        // Dismiss progress dialog
        if (dialog.isShowing()) {
            dialog.dismiss();
        }
        // If exception occurred, notify user and log
        if (exception != null) {
            Toast.makeText(parent.getApplicationContext(), "Could not save image. Please try again.", Toast.LENGTH_SHORT);
            Log.e(WarpyActivity.APP_TAG, exception.getMessage());
        }
    }

    /**
     * Determines if external storage is writable
     */
    private boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    /**
     * Create public image file
     */
    public File createImageFile() throws IOException {
        File image = null;

        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "WARPED_" + timeStamp + "_";

        // Get storage directory for app
        File storageDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), ALBUM_NAME);
        if (!storageDir.exists() && !storageDir.mkdir()) {
            Log.e(WarpyActivity.APP_TAG, "Could not create image directory");
        } else {
            // Create image file
            image = new File(storageDir, imageFileName + ".jpg");
        }
        return image;
    }
}




Java Source Code List

ca.tannerrutgers.Warpy.activities.SettingsActivity.java
ca.tannerrutgers.Warpy.activities.WarpyActivity.java
ca.tannerrutgers.Warpy.dialogs.DiscardImageWarningDialog.java
ca.tannerrutgers.Warpy.dialogs.UndoSizePreference.java
ca.tannerrutgers.Warpy.listeners.WarpGestureListener.java
ca.tannerrutgers.Warpy.models.ImageBulge.java
ca.tannerrutgers.Warpy.models.ImageKaleidoscope.java
ca.tannerrutgers.Warpy.models.ImageRipple.java
ca.tannerrutgers.Warpy.models.ImageWarp.java
ca.tannerrutgers.Warpy.tasks.SaveImageTask.java
ca.tannerrutgers.Warpy.tasks.WarpTask.java
ca.tannerrutgers.Warpy.utils.WarpActionStack.java