/**
* Copyright (c) 2012 Vinayak Solutions Private Limited
* See the file license.txt for copying permission.
*/
package com.vinsol.expensetracker.entry;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.vinsol.expensetracker.Constants;
import com.vinsol.expensetracker.R;
import com.vinsol.expensetracker.cameraservice.Camera;
import com.vinsol.expensetracker.helpers.CameraFileSave;
import com.vinsol.expensetracker.helpers.DatabaseAdapter;
import com.vinsol.expensetracker.utils.ImagePreview;
import com.vinsol.expensetracker.utils.Log;
public class CameraEntry extends EditAbstract {
private static final int PICTURE_RESULT = 35;
private LinearLayout editCameraDetails;
private ImageView editImageDisplay;
private RelativeLayout editLoadProgress;
private float scale;
private int width;
private int height;
private Bitmap bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//////// ******** Initializing and assigning memory to UI Items ********** /////////
editCameraDetails = (LinearLayout) findViewById(R.id.edit_camera_details);
editImageDisplay = (ImageView) findViewById(R.id.edit_image_display);
editLoadProgress = (RelativeLayout) findViewById(R.id.edit_load_progress);
typeOfEntry = R.string.camera;
typeOfEntryFinished = R.string.finished_cameraentry;
typeOfEntryUnfinished = R.string.unfinished_cameraentry;
editHelper();
scale = this.getResources().getDisplayMetrics().density;
width = (int) (84 * scale + 0.5f);
height = (int) (111 * scale + 0.5f);
if (intentExtras.containsKey(Constants.KEY_ENTRY_LIST_EXTRA)) {
if(setUnknown) {
startCamera();
}
File mFile;
if(isFromFavorite) {
mFile = fileHelper.getCameraFileSmallFavorite(mFavoriteList.id);
} else {
mFile = fileHelper.getCameraFileSmallEntry(entry.id);
}
if (mFile.canRead() && mFile.exists()) {
bitmap = BitmapFactory.decodeFile(mFile.getPath());
setImageResource();
} else {
editImageDisplay.setImageResource(R.drawable.no_image_small);
}
}
setGraphicsCamera();
setClickListeners();
// ////// *********** Initializing Database Adaptor **********//////////
mDatabaseAdapter = new DatabaseAdapter(this);
dateViewString = dateBarDateview.getText().toString();
createDatabaseEntry();
//New Entry
super.setFavoriteHelper();
if (!intentExtras.containsKey(Constants.KEY_ENTRY_LIST_EXTRA))
startCamera();
}
@Override
protected void setFavoriteHelper() {
//DO Nothing
}
private void setImageResource() {
if(bitmap.getHeight() > bitmap.getWidth()) {
editImageDisplay.setLayoutParams(new LayoutParams(width, height));
} else {
editImageDisplay.setLayoutParams(new LayoutParams(height, width));
}
editImageDisplay.setImageBitmap(bitmap);
}
private void startCamera() {
/////// ******* Starting Camera to capture Image ******** //////////
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
Intent camera = new Intent(this, Camera.class);
File file;
if(isFromFavorite) {
file = fileHelper.getCameraFileLargeFavorite(mFavoriteList.id);
} else {
file = fileHelper.getCameraFileLargeEntry(entry.id);
}
Log.d("camera file path +++++++++++++++++ "+file.toString() );
camera.putExtra(Constants.KEY_FULL_SIZE_IMAGE_PATH, file.toString());
startActivityForResult(camera, PICTURE_RESULT);
} else {
Toast.makeText(this, "sdcard not available", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (PICTURE_RESULT == requestCode) {
if(Activity.RESULT_OK == resultCode) {
isChanged = true;
if(intentExtras.containsKey(Constants.KEY_ENTRY_LIST_EXTRA)) {
if(isFromFavorite) {
mDatabaseAdapter.open();
mDatabaseAdapter.updateFileUploadedFavoriteTable(mFavoriteList.id);
mDatabaseAdapter.close();
} else {
mDatabaseAdapter.open();
mDatabaseAdapter.updateFileUploadedEntryTable(entry.id);
mDatabaseAdapter.close();
}
}
new SaveAndDisplayImage().execute();
} else {
isChanged = false;
if(!setUnknown) {
File mFile;
if(isFromFavorite) {
mFile = fileHelper.getCameraFileSmallFavorite(mFavoriteList.id);
} else {
mFile = fileHelper.getCameraFileSmallEntry(entry.id);
}
if (mFile.canRead()) {
bitmap = BitmapFactory.decodeFile(mFile.getPath());
setImageResource();
} else {
DatabaseAdapter adapter = new DatabaseAdapter(this);
adapter.open();
adapter.deleteExpenseEntryByID(entry.id + "");
adapter.close();
}
}
if(!intentExtras.containsKey(Constants.KEY_IS_COMING_FROM_SHOW_PAGE)) {finish();}
}
}
}
private class SaveAndDisplayImage extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
editLoadProgress.setVisibility(View.VISIBLE);
editImageDisplay.setVisibility(View.GONE);
editDelete.setEnabled(false);
editSaveEntry.setEnabled(false);
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
String id;
if(isFromFavorite) {
id = mFavoriteList.id;
} else {
id = entry.id;
}
new CameraFileSave(CameraEntry.this).resizeImageAndSaveThumbnails(id + "",isFromFavorite);
return null;
}
@Override
protected void onPostExecute(Void result) {
editLoadProgress.setVisibility(View.GONE);
editImageDisplay.setVisibility(View.VISIBLE);
File mFile;
if(isFromFavorite) {
mFile = fileHelper.getCameraFileSmallFavorite(mFavoriteList.id);
} else {
mFile = fileHelper.getCameraFileSmallEntry(entry.id);
}
bitmap = BitmapFactory.decodeFile(mFile.getPath());
setImageResource();
editDelete.setEnabled(true);
editSaveEntry.setEnabled(true);
super.onPostExecute(result);
}
}
private void setGraphicsCamera() {
////// ****** Shows Camera Details ********////////
editCameraDetails.setVisibility(View.VISIBLE);
}
private void setClickListeners() {
// ////// ******* Adding Click Listeners to UI Items ******** //////////
ImageView editImageDisplay = (ImageView) findViewById(R.id.edit_image_display);
editImageDisplay.setOnClickListener(this);
Button editRetakeButton = (Button) findViewById(R.id.edit_retake_button);
editRetakeButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.edit_image_display:
File mFile = fileHelper.getCameraFileLargeEntry(entry.id);
if(mFile.canRead()) {
Intent intent = new Intent(this, ImagePreview.class);
intent.putExtra(Constants.KEY_ID, entry.id);
startActivity(intent);
} else {
Toast.makeText(this, "no image to preview", Toast.LENGTH_SHORT).show();
}
break;
///////// ********** Adding action if retake button is pressed ******//////////
case R.id.edit_retake_button:
startCamera();
default:
break;
}
}
@Override
protected void deleteFile() {
fileHelper.deleteAllEntryFiles(entry.id);
}
@Override
protected Boolean checkEntryModified() {
if(super.checkEntryModified() || isChanged)
return true;
else
return false;
}
@Override
protected boolean doTaskIfChanged() {
return isChanged;
}
@Override
protected void setDefaultTitle() {
if(isFromFavorite) {
((TextView)findViewById(R.id.header_title)).setText(getString(R.string.edit_favorite)+" "+getString(R.string.finished_cameraentry));
} else {
((TextView)findViewById(R.id.header_title)).setText(getString(R.string.finished_cameraentry));
}
}
@Override
protected boolean checkFavoriteComplete() {
if(editAmount != null && !editAmount.getText().toString().equals("")) {
return true;
}
return false;
}
@Override
public void onBackPressed() {
recycleBitmap();
super.onBackPressed();
}
private void recycleBitmap() {
if(bitmap!=null) {bitmap.recycle();}
}
}