summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/BestpictureActivity.java
diff options
context:
space:
mode:
authorpezhan <pezhan@codeaurora.org>2017-01-09 11:19:54 +0800
committerpezhan <pezhan@codeaurora.org>2017-01-11 15:20:31 +0800
commit326822d1e444da7b227be3c86815e3ee6eb6453d (patch)
tree09fa64a75d294bbd63faf5298d861197d5e30478 /src/com/android/camera/BestpictureActivity.java
parent15f6d966c807c371a12f68bf9f5f4e7447a9ba8e (diff)
downloadandroid_packages_apps_Snap-326822d1e444da7b227be3c86815e3ee6eb6453d.tar.gz
android_packages_apps_Snap-326822d1e444da7b227be3c86815e3ee6eb6453d.tar.bz2
android_packages_apps_Snap-326822d1e444da7b227be3c86815e3ee6eb6453d.zip
SnapdragonCamera:Fix [FR35432] BestPicture function lost.
Add dialog when saving selected BestPicture. Add "X" icon display beside camcorder icon to exit BestPicture mode. Add multiple selections(Three dots beside SAVE)and "X" icon. Add dialog when select "X" icon. Add overflow menu with multiple selections to chose "Save All" or "Delete All" when click overflow menu. Add click for "Save All" to save all 1o pictures. Add click for "Delete All" to pop delete all dialog. Change-Id: I59cdad0f77fde616ea34db4d9d186d322285e394 CRs-Fixed: 1102814, 1102807, 1099428
Diffstat (limited to 'src/com/android/camera/BestpictureActivity.java')
-rw-r--r--src/com/android/camera/BestpictureActivity.java320
1 files changed, 308 insertions, 12 deletions
diff --git a/src/com/android/camera/BestpictureActivity.java b/src/com/android/camera/BestpictureActivity.java
index 1fec1d82c..45c45ed4b 100644
--- a/src/com/android/camera/BestpictureActivity.java
+++ b/src/com/android/camera/BestpictureActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -28,6 +28,8 @@
*/
package com.android.camera;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
@@ -42,15 +44,22 @@ import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Display;
+import android.view.Gravity;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.support.v4.app.FragmentActivity;
+import android.widget.CheckBox;
+import android.widget.PopupWindow;
+import android.widget.TextView;
import android.widget.Toast;
import com.android.camera.exif.ExifInterface;
+import com.android.camera.ui.BestPictureActionDialogLayout;
import com.android.camera.ui.DotsView;
import com.android.camera.ui.DotsViewItem;
import com.android.camera.ui.RotateTextToast;
+import com.android.camera.ui.RotateImageView;
import com.android.camera.util.CameraUtil;
import org.codeaurora.snapcam.R;
@@ -61,7 +70,9 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
-public class BestpictureActivity extends FragmentActivity{
+import static android.app.Activity.RESULT_OK;
+
+public class BestpictureActivity extends FragmentActivity {
private static final String TAG = "BestpictureActivity";
public static final String[] NAMES = {
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09"
@@ -81,6 +92,11 @@ public class BestpictureActivity extends FragmentActivity{
private ImageLoadingThread mLoadingThread;
private PhotoModule.NamedImages mNamedImages;
private Uri mPlaceHolderUri;
+ private Dialog mDialog;
+ private AlertDialog.Builder mBuilder;
+ private View mDialogRoot;
+ private CheckBox mshowAgainCheck;
+
public static int BESTPICTURE_ACTIVITY_CODE = 11;
static class ImageItems implements DotsViewItem {
@@ -172,23 +188,303 @@ public class BestpictureActivity extends FragmentActivity{
findViewById(R.id.bestpicture_done).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
- int index = -1;
- for(int i=0; i < mImageItems.mChosen.length; i++) {
+ int choosenCount = 0;
+ for (int i = 0; i < mImageItems.mChosen.length; i++) {
if (mImageItems.mChosen[i]) {
- if(index != -1) {
- new SaveImageTask().execute(mFilesPath + "/" + NAMES[i] + ".jpg");
- } else {
- index = i;
- saveForground(mFilesPath + "/" + NAMES[i] + ".jpg");
- }
+ choosenCount++;
}
}
- setResult(RESULT_OK, new Intent());
- finish();
+ boolean showSaveDialog = CameraUtil.loadDialogShowConfig(BestpictureActivity
+ .this,CameraUtil.KEY_SAVE);
+ if (showSaveDialog) {
+ //add save dialog
+ initSaveDialog(CameraUtil.MODE_TWO_BT, choosenCount);
+ mDialog.show();
+ setDialogLayoutPararms();
+ } else {
+ saveImages(choosenCount, false);
+ }
+ }
+ });
+ findViewById(R.id.delete_best).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(final View v) {
+ boolean showDeleteDialog = CameraUtil.loadDialogShowConfig(BestpictureActivity.this
+ ,CameraUtil.KEY_DELETE);
+ if (showDeleteDialog) {
+ initDeleteDialog(CameraUtil.MODE_TWO_BT);
+ mDialog.show();
+ setDialogLayoutPararms();
+ } else {
+ backToViewfinder();
+ }
+ }
+ });
+ RotateImageView moreView = (RotateImageView) findViewById(R.id.best_more);
+ Bitmap mMoreBp = BitmapFactory.decodeResource(getResources(), R.drawable.more_options);
+ mMoreBp = CameraUtil.adjustPhotoRotation(mMoreBp, 90);
+ moreView.setImageBitmap(mMoreBp);
+ moreView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(final View v) {
+ initOverFlow(v);
+ }
+ });
+ }
+
+ private void initOverFlow(View v) {
+ View popView = getLayoutInflater().inflate(R.layout.overflow, null);
+ PopupWindow pop = new PopupWindow(popView, CameraUtil.dip2px(BestpictureActivity.this, 150),
+ CameraUtil.dip2px(BestpictureActivity.this, 100), true);
+ pop.setOutsideTouchable(true);
+ pop.showAtLocation(v, Gravity.RIGHT | Gravity.TOP,
+ CameraUtil.dip2px(BestpictureActivity.this, 5),
+ CameraUtil.dip2px(BestpictureActivity.this, 10));
+ TextView saveAllText = (TextView) popView.findViewById(R.id.overflow_item1);
+ TextView deleteAllText = (TextView) popView.findViewById(R.id.overflow_item2);
+ saveAllText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ pop.dismiss();
+ saveImages(mImageItems.mChosen.length, true);
+
+ }
+ });
+ deleteAllText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ pop.dismiss();
+ boolean showDeleteAllDialog = CameraUtil.loadDialogShowConfig(
+ BestpictureActivity.this, CameraUtil.KEY_DELETE_ALL);
+ if (showDeleteAllDialog) {
+ initDeleteAllDialog(CameraUtil.MODE_TWO_BT);
+ mDialog.show();
+ setDialogLayoutPararms();
+ } else {
+ backToViewfinder();
+ }
+ }
+ });
+ }
+
+ private void initDeleteDialog(int mode) {
+ BestPictureActionDialogLayout layout = getDialogLayout(mode);
+ layout.setDialogDataControler(mDialogRoot, new BestPictureActionDialogLayout
+ .IDialogDataControler() {
+ @Override
+ public String getTitleString() {
+ return getResources().getString(R.string.delete_best_dialog_title);
+ }
+
+ @Override
+ public String getContentString() {
+ return getResources().getString(R.string.delete_best_dialog_content);
+ }
+
+ @Override
+ public String getPositionButtonString() {
+ return getResources().getString(R.string.delete_best_dialog_positive_bt);
+ }
+
+ @Override
+ public String getNativeButtonString() {
+ return getResources().getString(R.string.delete_best_dialog_native_bt);
+ }
+
+ @Override
+ public String getOKButtonString() {
+ return "";
+ }
+
+ @Override
+ public void doClickPositionBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_DELETE, false);
+ }
+ mDialog.dismiss();
+ backToViewfinder();
+ }
+
+ @Override
+ public void doClickNativeBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_DELETE, false);
+ }
+ mDialog.dismiss();
+ }
+
+ @Override
+ public void doClickOKBtAction() {
+ }
+ });
+ }
+
+ private void initDeleteAllDialog(int mode) {
+ BestPictureActionDialogLayout layout = getDialogLayout(mode);
+ layout.setDialogDataControler(mDialogRoot, new BestPictureActionDialogLayout
+ .IDialogDataControler() {
+ @Override
+ public String getTitleString() {
+ return getResources().getString(R.string.delete_all_best_dialog_title);
+ }
+
+ @Override
+ public String getContentString() {
+ return getResources().getString(R.string.delete_all_best_dialog_content);
+ }
+
+ @Override
+ public String getPositionButtonString() {
+ return getResources().getString(R.string.delete_all_best_dialog_positive_bt);
+ }
+
+ @Override
+ public String getNativeButtonString() {
+ return getResources().getString(R.string.delete_all_best_dialog_native_bt);
+ }
+
+ @Override
+ public String getOKButtonString() {
+ return "";
+ }
+
+ @Override
+ public void doClickPositionBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_DELETE_ALL, false);
+ }
+ mDialog.dismiss();
+ backToViewfinder();
+ }
+
+ @Override
+ public void doClickNativeBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_DELETE_ALL, false);
+ }
+ mDialog.dismiss();
+ }
+
+ @Override
+ public void doClickOKBtAction() {
}
});
}
+ private void initSaveDialog(int mode, int choosenCount) {
+
+ BestPictureActionDialogLayout layout = getDialogLayout(mode);
+ layout.setDialogDataControler(mDialogRoot, new BestPictureActionDialogLayout
+ .IDialogDataControler() {
+
+ @Override
+ public String getTitleString() {
+ return getResources().getString(R.string.save_best_dialog_title);
+ }
+
+ @Override
+ public String getContentString() {
+ return getResources().getString(R.string.save_best_dialog_content, choosenCount);
+ }
+
+ @Override
+ public String getPositionButtonString() {
+ return getResources().getString(R.string.save_best_dialog_positive_bt);
+ }
+
+ @Override
+ public String getNativeButtonString() {
+ return getResources().getString(R.string.save_best_dialog_native_bt);
+ }
+
+ @Override
+ public String getOKButtonString() {
+ return "";
+ }
+
+ @Override
+ public void doClickPositionBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_SAVE, false);
+ }
+ mDialog.dismiss();
+ saveImages(choosenCount, false);
+ }
+
+ @Override
+ public void doClickNativeBtAction() {
+ if (mshowAgainCheck.isChecked()) {
+ CameraUtil.saveDialogShowConfig(BestpictureActivity.this,
+ CameraUtil.KEY_SAVE, false);
+ }
+ mDialog.dismiss();
+ }
+
+ @Override
+ public void doClickOKBtAction() {
+ mDialog.dismiss();
+ }
+ });
+ }
+
+ private BestPictureActionDialogLayout getDialogLayout(int mode) {
+ BestPictureActionDialogLayout layout;
+ mBuilder = new AlertDialog.Builder(BestpictureActivity.this);
+ mDialogRoot = LayoutInflater.from(BestpictureActivity.this)
+ .inflate(R.layout.bestpicture_action_dialog, null);
+ mDialogRoot.setTag(mode);
+ mBuilder.setView(mDialogRoot);
+ mDialog = mBuilder.create();
+ layout = (BestPictureActionDialogLayout) mDialogRoot.findViewById(R.id.mlayout);
+ mshowAgainCheck = (CheckBox) mDialogRoot.findViewById(R.id.mcheck);
+ return layout;
+ }
+
+ private void setDialogLayoutPararms() {
+ //measure and layout width and height for dialog.
+ int width = CameraUtil.dip2px(BestpictureActivity.this, 320);
+ int height = CameraUtil.dip2px(BestpictureActivity.this, 250);
+ mDialog.getWindow().setLayout(width, height);
+ }
+
+ private void saveImages(int toSaveCount, boolean saveAll) {
+ int index = -1;
+ for (int i = 0; i < mImageItems.mChosen.length; i++) {
+ if (saveAll) {
+ if (index != -1) {
+ new SaveImageTask().execute(mFilesPath + "/" + NAMES[i] + ".jpg");
+ } else {
+ index = i;
+ saveForground(mFilesPath + "/" + NAMES[i] + ".jpg");
+ }
+ } else {
+ if (mImageItems.mChosen[i]) {
+ if (index != -1) {
+ new SaveImageTask().execute(mFilesPath + "/" + NAMES[i] + ".jpg");
+ } else {
+ index = i;
+ saveForground(mFilesPath + "/" + NAMES[i] + ".jpg");
+ }
+ }
+ }
+ }
+ String toastString = getResources().getString(R.string.save_best_image_toast,
+ toSaveCount);
+ Toast.makeText(BestpictureActivity.this, toastString, Toast.LENGTH_SHORT).show();
+ backToViewfinder();
+ }
+
+ private void backToViewfinder() {
+ setResult(RESULT_OK, new Intent());
+ finish();
+ }
+
+
private class ImageLoadingThread extends Thread {
public void run() {
showProgressDialog();