/** * **************************************************************************** * Copyright 2013 Kumar Bibek * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** */ package com.beanie.imagechooserapp; import java.io.File; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.crashlytics.android.Crashlytics; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.kbeanie.imagechooser.api.ChooserType; import com.kbeanie.imagechooser.api.ChosenFile; import com.kbeanie.imagechooser.api.ChosenImage; import com.kbeanie.imagechooser.api.ChosenImages; import com.kbeanie.imagechooser.api.FileChooserListener; import com.kbeanie.imagechooser.api.FileChooserManager; import com.kbeanie.imagechooser.api.ImageChooserListener; import com.kbeanie.imagechooser.api.ImageChooserManager; import com.kbeanie.imagechooser.api.IntentUtils; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; public class ImageChooserActivity extends BasicActivity implements ImageChooserListener { private final static String TAG = "ICA"; private ImageView imageViewThumbnail; private ImageView imageViewThumbSmall; private TextView textViewFile; private ImageChooserManager imageChooserManager; private ProgressBar pbar; private String filePath; private int chooserType; private boolean isActivityResultOver = false; private String originalFilePath; private String thumbnailFilePath; private String thumbnailSmallFilePath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "Activity Created"); setContentView(R.layout.activity_image_chooser); Button buttonTakePicture = (Button) findViewById(R.id.buttonTakePicture); buttonTakePicture.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { takePicture(); } }); Button buttonChooseImage = (Button) findViewById(R.id.buttonChooseImage); buttonChooseImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { chooseImage(); } }); imageViewThumbnail = (ImageView) findViewById(R.id.imageViewThumb); imageViewThumbSmall = (ImageView) findViewById(R.id.imageViewThumbSmall); textViewFile = (TextView) findViewById(R.id.textViewFile); pbar = (ProgressBar) findViewById(R.id.progressBar); pbar.setVisibility(View.GONE); setupAds(); checkForSharedImage(getIntent()); } private void chooseImage() { chooserType = ChooserType.REQUEST_PICK_PICTURE; imageChooserManager = new ImageChooserManager(this, ChooserType.REQUEST_PICK_PICTURE, true); Bundle bundle = new Bundle(); bundle.putBoolean(Intent.EXTRA_ALLOW_MULTIPLE, true); imageChooserManager.setExtras(bundle); imageChooserManager.setImageChooserListener(this); imageChooserManager.clearOldFiles(); try { pbar.setVisibility(View.VISIBLE); filePath = imageChooserManager.choose(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } private void takePicture() { chooserType = ChooserType.REQUEST_CAPTURE_PICTURE; imageChooserManager = new ImageChooserManager(this, ChooserType.REQUEST_CAPTURE_PICTURE, true); imageChooserManager.setImageChooserListener(this); try { pbar.setVisibility(View.VISIBLE); filePath = imageChooserManager.choose(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i(TAG, "OnActivityResult"); Log.i(TAG, "File Path : " + filePath); Log.i(TAG, "Chooser Type: " + chooserType); if (resultCode == RESULT_OK && (requestCode == ChooserType.REQUEST_PICK_PICTURE || requestCode == ChooserType.REQUEST_CAPTURE_PICTURE)) { if (imageChooserManager == null) { reinitializeImageChooser(); } imageChooserManager.submit(requestCode, data); } else { pbar.setVisibility(View.GONE); } } @Override public void onImageChosen(final ChosenImage image) { runOnUiThread(new Runnable() { @Override public void run() { Log.i(TAG, "Chosen Image: O - " + image.getFilePathOriginal()); Log.i(TAG, "Chosen Image: T - " + image.getFileThumbnail()); Log.i(TAG, "Chosen Image: Ts - " + image.getFileThumbnailSmall()); isActivityResultOver = true; originalFilePath = image.getFilePathOriginal(); thumbnailFilePath = image.getFileThumbnail(); thumbnailSmallFilePath = image.getFileThumbnailSmall(); pbar.setVisibility(View.GONE); if (image != null) { Log.i(TAG, "Chosen Image: Is not null"); textViewFile.setText(image.getFilePathOriginal()); loadImage(imageViewThumbnail, image.getFileThumbnail()); loadImage(imageViewThumbSmall, image.getFileThumbnailSmall()); } else { Log.i(TAG, "Chosen Image: Is null"); } } }); } @Override public void onImagesChosen(final ChosenImages images) { runOnUiThread(new Runnable() { @Override public void run() { Log.i(TAG, "On Images Chosen: " + images.size()); onImageChosen(images.getImage(0)); } }); } private void loadImage(ImageView iv, final String path) { Picasso.with(ImageChooserActivity.this) .load(Uri.fromFile(new File(path))) .fit() .centerInside() .into(iv, new Callback() { @Override public void onSuccess() { Log.i(TAG, "Picasso Success Loading Thumbnail - " + path); } @Override public void onError() { Log.i(TAG, "Picasso Error Loading Thumbnail Small - " + path); } }); } @Override public void onError(final String reason) { runOnUiThread(new Runnable() { @Override public void run() { Log.i(TAG, "OnError: " + reason); pbar.setVisibility(View.GONE); Toast.makeText(ImageChooserActivity.this, reason, Toast.LENGTH_LONG).show(); } }); } // Should be called if for some reason the ImageChooserManager is null (Due // to destroying of activity for low memory situations) private void reinitializeImageChooser() { imageChooserManager = new ImageChooserManager(this, chooserType, true); Bundle bundle = new Bundle(); bundle.putBoolean(Intent.EXTRA_ALLOW_MULTIPLE, true); imageChooserManager.setExtras(bundle); imageChooserManager.setImageChooserListener(this); imageChooserManager.reinitialize(filePath); } @Override protected void onSaveInstanceState(Bundle outState) { Log.i(TAG, "Saving Stuff"); Log.i(TAG, "File Path: " + filePath); Log.i(TAG, "Chooser Type: " + chooserType); outState.putBoolean("activity_result_over", isActivityResultOver); outState.putInt("chooser_type", chooserType); outState.putString("media_path", filePath); outState.putString("orig", originalFilePath); outState.putString("thumb", thumbnailFilePath); outState.putString("thumbs", thumbnailSmallFilePath); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { if (savedInstanceState != null) { if (savedInstanceState.containsKey("chooser_type")) { chooserType = savedInstanceState.getInt("chooser_type"); } if (savedInstanceState.containsKey("media_path")) { filePath = savedInstanceState.getString("media_path"); } if (savedInstanceState.containsKey("activity_result_over")) { isActivityResultOver = savedInstanceState.getBoolean("activity_result_over"); originalFilePath = savedInstanceState.getString("orig"); thumbnailFilePath = savedInstanceState.getString("thumb"); thumbnailSmallFilePath = savedInstanceState.getString("thumbs"); } } Log.i(TAG, "Restoring Stuff"); Log.i(TAG, "File Path: " + filePath); Log.i(TAG, "Chooser Type: " + chooserType); Log.i(TAG, "Activity Result Over: " + isActivityResultOver); if (isActivityResultOver) { populateData(); } super.onRestoreInstanceState(savedInstanceState); } private void populateData() { Log.i(TAG, "Populating Data"); loadImage(imageViewThumbnail, thumbnailFilePath); loadImage(imageViewThumbSmall, thumbnailSmallFilePath); } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "Activity Destroyed"); } private void checkForSharedImage(Intent intent) { if (intent != null) { if (intent.getAction() != null && intent.getType() != null && intent.getExtras() != null) { ImageChooserManager m = new ImageChooserManager(this, ChooserType.REQUEST_PICK_PICTURE); m.setImageChooserListener(this); m.submit(ChooserType.REQUEST_PICK_PICTURE, IntentUtils.getIntentForMultipleSelection(intent)); } } } }