package eoc.studio.voicecard.card.editor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import eoc.studio.voicecard.BaseActivity;
import eoc.studio.voicecard.R;
import eoc.studio.voicecard.audio.AudioRecorderActivity;
import eoc.studio.voicecard.card.Card;
import eoc.studio.voicecard.card.CardDraft;
import eoc.studio.voicecard.card.Constant;
import eoc.studio.voicecard.card.database.CardDatabaseHelper;
import eoc.studio.voicecard.card.viewer.AudioMessageView;
import eoc.studio.voicecard.card.viewer.CardViewerActivity;
import eoc.studio.voicecard.manufacture.EditSignatureActivity;
import eoc.studio.voicecard.menu.OpenDraft;
import eoc.studio.voicecard.menu.SaveDraft;
import eoc.studio.voicecard.newspaper.DrawableProcess;
import eoc.studio.voicecard.utils.FileUtility;
public class CardEditorActivity extends BaseActivity
{
private static final String TAG = "CardEditor";
private static final int REQ_PICK_IMAGE = 1;
private static final int REQ_CROP_IMAGE = 2;
private static final int REQ_RECORD_VOICE = 3;
private static final int REQ_EDIT_TEXT = 4;
private static final int REQ_EDIT_SIGNATURE = 5;
public static final String EXTRA_KEY_CARD_ID = "card_id";
public static final String EXTRA_KEY_CARD_DRAFT = "card_draft";
private static final String EXTRA_KEY_USER_IMAGE = "user_image";
private static final String EXTRA_KEY_USER_IMAGE_BITMAP = "user_image_bitmap";
private static final String EXTRA_KEY_USER_VOICE = "user_voice";
private static final String EXTRA_KEY_USER_VOICE_DURATION = "user_voice_duration";
private static final String EXTRA_KEY_USER_TEXT_CONTENT = "user_text_content";
private static final String EXTRA_KEY_USER_TEXT_SIZE_TYPE = "user_text_size_type";
private static final String EXTRA_KEY_USER_TEXT_COLOR = "user_text_color";
private static final String EXTRA_KEY_USER_SIGN_HANDWRITHING = "user_sign_handwriting";
private static final String EXTRA_KEY_USER_SIGN_POSITION_INFO = "user_sign_position_info";
private static final String EXTRA_KEY_USER_SIGN_DRAFT_IMAGE = "user_sign_draft_image";
private static final String EXTRA_KEY_CARD_DIR_PATH = "card_dir_path";
private static final float TEXT_SIZE_NORMAL = 12.8f;
private static final float TEXT_SIZE_SMALL = TEXT_SIZE_NORMAL * 0.8f;
private static final float TEXT_SIZE_LARGE = TEXT_SIZE_NORMAL * 1.2f;
private static final int EDIT_COLOR = 0xFF594937;
private static final int EDIT_BACKGROUD_COLOR = 0x90FFFFFF;
private ImageView back;
private ImageView next;
private ImageView innerPage;
private LinearLayout landscapeMenuOpenerWrapper;
private ImageView landscapeMenuOpener;
private RelativeLayout landscapeMenuModeScreenMask;
private FrameLayout editableImageFrame;
private FrameLayout editableVoiceFrame;
private FrameLayout editableTextFrame;
private FrameLayout editableSignatureFrame;
private TextView editableImageTip;
private TextView editableVoiceTip;
private TextView editableTextTip;
private TextView editableSignatureTip;
private ImageView editableImage;
private AudioMessageView editableVoice;
private TextView editableText;
private Card card;
private Uri userImage;
private Bitmap userImageBitmap;
private Uri userVoice;
private String userVoiceDuration;
private String userTextContent;
private int userTextSizeType = Card.DEFAULT_TEXT_SIZE_TYPE;
private int userTextColor = Card.DEFAULT_TEXT_COLOR;
private Uri userSignHandwritingUri;
private Uri userSignPositionInfoUri;
private Uri userSignDraftImageUri;
private ImageView editableSignImage;
private SaveDraft saveDraft;
private OpenDraft openDraft;
private CardDraftManager cardDraftManager;
private String screenshotLeftFilePath;
private String screenshotRightFilePath;
private ProgressDialog progressDialog;
private CardDatabaseHelper cardDatabaseHelper;
private String sendBackId;
private File cardDir;
private Uri tmpImageUri;
@Override
protected void onCreate(Bundle savedInstanceState)
{
initSendBackId();
initCardDataBase();
if (savedInstanceState != null)
{
Log.d(TAG, "from savedInstanceState");
restoreUserData(savedInstanceState);
}
else
{
if (getIntent().getParcelableExtra(EXTRA_KEY_CARD_DRAFT) != null)
{
Log.d(TAG, "from intent have card draft");
CardDraft cardDraft = getIntent().getParcelableExtra(EXTRA_KEY_CARD_DRAFT);
card = getCardById(cardDraft.getCardId());
updateFromCradDraft(cardDraft);
saveCardInformation();
}
else
{
Log.d(TAG, "from intent");
card = getEmptyCardFromIntent(getIntent());
}
initCardDir(card.getId());
}
initCardDraftManager();
initLayout();
super.onCreate(savedInstanceState);
}
private void initSendBackId()
{
Intent intent = getIntent();
sendBackId = intent.getStringExtra(Constant.EXTRA_KEY_SENDBACK_ID);
}
private void initCardDataBase()
{
cardDatabaseHelper = new CardDatabaseHelper(getApplicationContext());
cardDatabaseHelper.open();
}
private void initCardDir(int cardId)
{
File dir;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
{
dir = Environment.getExternalStorageDirectory();
}
else
{
dir = getFilesDir();
}
File appDir = new File(dir, "eoc.studio.voicecard");
if (!appDir.exists())
{
appDir.mkdir();
}
cardDir = new File(appDir, cardId + "_" + System.currentTimeMillis());
cardDir.mkdir();
}
private void saveCardInformation()
{
card.setImage(userImage);
card.setSound(userVoice);
card.setMessage(userTextContent, userTextSizeType, userTextColor);
card.setSignDraftImage(userSignDraftImageUri);
card.setSignHandwriting(userSignPositionInfoUri);
card.setSignPositionInfo(userSignDraftImageUri);
}
private void initCardDraftManager()
{
Log.d(TAG, "initCardDraftManager()");
cardDraftManager = new CardDraftManager();
cardDraftManager.init(getApplicationContext());
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
Log.d(TAG, "LANDSCAPE");
}
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
Log.d(TAG, "PORTRAIT");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
saveUserData(savedInstanceState);
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onDestroy()
{
super.onDestroy();
}
@Override
protected void onPause()
{
super.onPause();
}
@Override
protected void onResume()
{
setupCardView();
setupUserData();
super.onResume();
}
private void setupUserData()
{
updateAllRegion();
}
private void restoreUserData(Bundle savedInstanceState)
{
sendBackId = savedInstanceState.getString(Constant.EXTRA_KEY_SENDBACK_ID);
card = getEmptyCardFromSavedInstanceState(savedInstanceState);
userImage = savedInstanceState.getParcelable(EXTRA_KEY_USER_IMAGE);
userImageBitmap = savedInstanceState.getParcelable(EXTRA_KEY_USER_IMAGE_BITMAP);
userVoice = savedInstanceState.getParcelable(EXTRA_KEY_USER_VOICE);
userVoiceDuration = savedInstanceState.getString(EXTRA_KEY_USER_VOICE_DURATION);
userTextContent = savedInstanceState.getString(EXTRA_KEY_USER_TEXT_CONTENT);
userTextSizeType = savedInstanceState.getInt(EXTRA_KEY_USER_TEXT_SIZE_TYPE);
int color = savedInstanceState.getInt(EXTRA_KEY_USER_TEXT_COLOR);
if (color != 0)
{
userTextColor = color;
}
userSignHandwritingUri = savedInstanceState.getParcelable(EXTRA_KEY_USER_SIGN_HANDWRITHING);
userSignPositionInfoUri = savedInstanceState
.getParcelable(EXTRA_KEY_USER_SIGN_POSITION_INFO);
userSignDraftImageUri = savedInstanceState.getParcelable(EXTRA_KEY_USER_SIGN_DRAFT_IMAGE);
String cardDirPath = savedInstanceState.getString(EXTRA_KEY_CARD_DIR_PATH);
if (cardDirPath != null)
{
cardDir = new File(cardDirPath);
}
else
{
initCardDir(card.getId());
}
Log.d(TAG, "restore sendBackId -- " + sendBackId);
Log.d(TAG, "restore user data -- IMAGE URI: " + userImage);
Log.d(TAG, "restore user data -- IMAGE BITMAP: " + userImageBitmap);
Log.d(TAG, "restore user data -- VOICE URI: " + userVoice);
Log.d(TAG, "restore user data -- VOICE DURATION: " + userVoiceDuration);
Log.d(TAG, "restore user data -- TEXT CONTENT: " + userTextContent);
Log.d(TAG, "restore user data -- TEXT SIZE TYPE: " + userTextSizeType);
Log.d(TAG, "restore user data -- TEXT COLOR: " + userTextColor);
Log.d(TAG, "restore user data -- SIGN HANDWRITHING: " + userSignHandwritingUri);
Log.d(TAG, "restore user data -- SIGN POSITION: " + userSignPositionInfoUri);
Log.d(TAG, "restore user data -- SIGN IAMGE: " + userSignDraftImageUri);
Log.d(TAG, "restore user data -- CARD DIR: " + cardDir);
saveCardInformation();
}
private void saveUserData(Bundle savedInstanceState)
{
if (sendBackId != null)
{
savedInstanceState.putString(Constant.EXTRA_KEY_SENDBACK_ID, sendBackId);
Log.d(TAG, "save sendBackId -- " + sendBackId);
}
savedInstanceState.putInt(EXTRA_KEY_CARD_ID, card.getId());
Log.d(TAG, "save user data -- card.getId(): " + card.getId());
if (userImage != null)
{
savedInstanceState.putParcelable(EXTRA_KEY_USER_IMAGE, userImage);
Log.d(TAG, "save user data -- IMAGE URI: " + userImage);
}
if (userImageBitmap != null)
{
savedInstanceState.putParcelable(EXTRA_KEY_USER_IMAGE_BITMAP, userImageBitmap);
Log.d(TAG, "save user data -- IMAGE BITMAP: " + userImageBitmap);
}
if (userVoice != null)
{
savedInstanceState.putParcelable(EXTRA_KEY_USER_VOICE, userVoice);
Log.d(TAG, "save user data -- VOICE URI: " + userVoice);
}
if (userVoiceDuration != null)
{
savedInstanceState.putString(EXTRA_KEY_USER_VOICE_DURATION, userVoiceDuration);
Log.d(TAG, "save user data -- VOICE DURATION: " + userVoiceDuration);
}
if (userTextContent != null)
{
savedInstanceState.putString(EXTRA_KEY_USER_TEXT_CONTENT, userTextContent);
savedInstanceState.putInt(EXTRA_KEY_USER_TEXT_SIZE_TYPE, userTextSizeType);
savedInstanceState.putInt(EXTRA_KEY_USER_TEXT_COLOR, userTextColor);
Log.d(TAG, "save user data --TEXT CONTENT: " + userTextContent);
Log.d(TAG, "save user data --TEXT SIZE TYPE: " + userTextSizeType);
Log.d(TAG, "save user data --TEXT COLOR: " + userTextColor);
}
if (userSignHandwritingUri != null)
{
savedInstanceState.putParcelable(EXTRA_KEY_USER_SIGN_HANDWRITHING,
userSignHandwritingUri);
Log.d(TAG, "save user data -- SIGN HANDWRITHING: " + userSignHandwritingUri);
}
if (userSignPositionInfoUri != null)
{
savedInstanceState.putParcelable(EXTRA_KEY_USER_SIGN_POSITION_INFO,
userSignPositionInfoUri);
Log.d(TAG, "save user data -- SIGN POSITION: " + userSignPositionInfoUri);
}
if (userSignDraftImageUri != null)
{
savedInstanceState
.putParcelable(EXTRA_KEY_USER_SIGN_DRAFT_IMAGE, userSignDraftImageUri);
Log.d(TAG, "save user data -- SIGN IAMGE: " + userSignDraftImageUri);
}
if (cardDir != null)
{
savedInstanceState.putString(EXTRA_KEY_CARD_DIR_PATH, cardDir.getAbsolutePath());
Log.d(TAG, "save user data -- Card Dir: " + cardDir.getAbsolutePath());
}
}
private Card getEmptyCardFromIntent(Intent intent)
{
int cardId = intent.getIntExtra(EXTRA_KEY_CARD_ID, -1);
return getCardById(cardId);
}
private Card getEmptyCardFromSavedInstanceState(Bundle savedInstanceState)
{
int cardId = savedInstanceState.getInt(EXTRA_KEY_CARD_ID, -1);
return getCardById(cardId);
}
private Card getCardById(int id)
{
Card card;
if (id != -1)
{
// card = FakeData.getCard(id);
Log.d(TAG, "getCardById id : " + id);
card = cardDatabaseHelper.getCardByCardID(id,
cardDatabaseHelper.getSystemDPI(getApplicationContext()));
assert card != null;
Log.d(TAG, "EDIT : " + card.getName());
}
else
{
throw new RuntimeException("invalid id -1");
}
return card;
}
private void initLayout()
{
setContentView(R.layout.activity_card_editor);
findViews();
setListener();
}
private void findViews()
{
back = (ImageView) findViewById(R.id.act_card_editor_iv_back);
next = (ImageView) findViewById(R.id.act_card_editor_iv_next);
innerPage = (ImageView) findViewById(R.id.act_card_editor_iv_card_inner_page);
landscapeMenuOpenerWrapper = (LinearLayout) findViewById(R.id.act_card_editor_landscape_llyt_menu_opener_wrapper);
if (landscapeMenuOpenerWrapper != null)
{
landscapeMenuOpener = (ImageView) findViewById(R.id.act_card_editor_landscape_iv_menu_opener);
landscapeMenuModeScreenMask = (RelativeLayout) findViewById(R.id.act_card_editor_landscape_rlyt_menu_mode_screen_mask);
}
editableImageFrame = (FrameLayout) findViewById(R.id.glb_card_flyt_editable_image_frame);
editableVoiceFrame = (FrameLayout) findViewById(R.id.glb_card_flyt_editable_voice_frame);
editableTextFrame = (FrameLayout) findViewById(R.id.glb_card_flyt_editable_text_frame);
editableSignatureFrame = (FrameLayout) findViewById(R.id.glb_card_flyt_editable_signature_frame);
editableImageTip = (TextView) findViewById(R.id.glb_card_tv_editable_image_tip);
editableVoiceTip = (TextView) findViewById(R.id.glb_card_tv_editable_voice_tip);
editableTextTip = (TextView) findViewById(R.id.glb_card_tv_editable_text_tip);
editableSignatureTip = (TextView) findViewById(R.id.glb_card_tv_editable_signature_tip);
editableImage = (ImageView) findViewById(R.id.glb_card_iv_editable_image);
editableVoice = (AudioMessageView) findViewById(R.id.glb_card_amv_editable_voice);
editableText = (TextView) findViewById(R.id.glb_card_tv_editable_text);
editableSignImage = (ImageView) findViewById(R.id.glb_card_iv_editable_signature_image);
saveDraft = (SaveDraft) findViewById(R.id.act_card_editor_iv_menu_save_draft);
openDraft = (OpenDraft) findViewById(R.id.act_card_editor_iv_menu_open_draft);
}
private void setupCardView()
{
Bitmap img3dOpenBitmap = FileUtility.getBitmapFromPath(card.getImage3dOpenPath());
FileUtility.setImageViewWithBitmap(innerPage, img3dOpenBitmap);
/* innerPage.setImageResource(android.R.color.transparent); */
setCardColor();
}
private void setCardColor()
{
int color = card.getTextColor();
Log.d(TAG, "setCardColor() card.getTextColor() " + card.getTextColor());
Resources res = getResources();
int dashGap = res.getDimensionPixelSize(R.dimen.dash_border_stroke_dash_gap);
int dashWidth = res.getDimensionPixelSize(R.dimen.dash_border_stroke_dash_width);
int width = res.getDimensionPixelSize(R.dimen.dash_border_stroke_width);
GradientDrawable dashBorderBackground = ((GradientDrawable) editableImageFrame
.getBackground());
if (dashBorderBackground == null)
{
editableImageFrame.setBackgroundResource(R.drawable.dash_border);
editableVoiceFrame.setBackgroundResource(R.drawable.dash_border);
editableTextFrame.setBackgroundResource(R.drawable.dash_border);
editableSignatureFrame.setBackgroundResource(R.drawable.dash_border);
}
((GradientDrawable) editableImageFrame.getBackground()).setStroke(width, EDIT_COLOR,
dashWidth, dashGap);
((GradientDrawable) editableVoiceFrame.getBackground()).setStroke(width, EDIT_COLOR,
dashWidth, dashGap);
((GradientDrawable) editableTextFrame.getBackground()).setStroke(width, EDIT_COLOR,
dashWidth, dashGap);
((GradientDrawable) editableSignatureFrame.getBackground()).setStroke(width, EDIT_COLOR,
dashWidth, dashGap);
editableImageTip.setTextColor(EDIT_COLOR);
editableVoiceTip.setTextColor(EDIT_COLOR);
editableTextTip.setTextColor(EDIT_COLOR);
editableSignatureTip.setTextColor(EDIT_COLOR);
}
private void setListener()
{
back.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "back - finish");
finish();
}
});
next.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "next");
if (isCardUserDataCompleted())
{
progressDialog = ProgressDialog.show(CardEditorActivity.this,
getString(R.string.processing), getString(R.string.please_wait), true,
false);
startScreenshotThread();
}
else
{
Toast.makeText(CardEditorActivity.this, getString(R.string.data_incomplete),
Toast.LENGTH_LONG).show();
}
}
});
if (landscapeMenuOpener != null)
{
landscapeMenuOpener.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "landscape menu opener clicked");
openLandscapeMenu();
}
});
landscapeMenuModeScreenMask.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
Log.d(TAG, "landscape menu mode screen mask touched");
closeLandscapeMenu();
return true;
}
});
}
editableImageFrame.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "EDIT IMAGE");
// startImagePicker();
startImageCropper();
}
});
editableVoiceFrame.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "EDIT VOICE");
startVoiceRecorder();
}
});
OnClickListener textEditorListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "EDIT TEXT");
startTextEditor();
}
};
editableTextFrame.setOnClickListener(textEditorListener);
editableText.setOnClickListener(textEditorListener);
editableTextTip.setOnClickListener(textEditorListener);
editableSignatureFrame.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "EDIT SIGNATURE");
startSignatureEditor();
}
});
saveDraft.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "saveDraft - onClick()");
boolean isSuccess = cardDraftManager.saveDraft(new CardDraft(card.getId(),
userVoice, userVoiceDuration, userImage, userTextContent, userTextColor,
userTextSizeType, userSignHandwritingUri, userSignPositionInfoUri,
userSignDraftImageUri));
if (isSuccess)
{
Toast.makeText(CardEditorActivity.this, getString(R.string.save_draft_success),
Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(CardEditorActivity.this, getString(R.string.save_draft_fail),
Toast.LENGTH_LONG).show();
}
}
});
openDraft.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.d(TAG, "openDraft - onClick()");
try
{
CardDraft cardDraft = cardDraftManager.openDraft();
updateFromCradDraft(cardDraft);
updateAllRegion();
saveCardInformation();
Log.d(TAG, "openDraft - onClick() user data -- IMAGE URI: " + userImage);
Log.d(TAG, "openDraft - onClick() user data -- IMAGE BITMAP: "
+ userImageBitmap);
Log.d(TAG, "openDraft - onClick() user data -- VOICE URI: " + userVoice);
Log.d(TAG, "openDraft - onClick() user data -- VOICE DURATION: "
+ userVoiceDuration);
Log.d(TAG, "openDraft - onClick() user data -- TEXT CONTENT: "
+ userTextContent);
Log.d(TAG, "openDraft - onClick() user data -- TEXT SIZE TYPE: "
+ userTextSizeType);
Log.d(TAG, "openDraft - onClick() user data -- TEXT COLOR: " + userTextColor);
Log.d(TAG, "openDraft - onClick() user data -- SIGN HANDWRITHING: "
+ userSignHandwritingUri);
Log.d(TAG, "openDraft - onClick() user data -- SIGN POSITION: "
+ userSignPositionInfoUri);
Log.d(TAG, "openDraft - onClick() user data -- SIGN IAMGE: "
+ userSignDraftImageUri);
Toast.makeText(CardEditorActivity.this, getString(R.string.open_draft_success),
Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Log.d(TAG, "openDraft - openDraft error:" + e.toString());
Toast.makeText(CardEditorActivity.this, getString(R.string.open_draft_fail),
Toast.LENGTH_LONG).show();
}
}
});
}
private void updateFromCradDraft(CardDraft cardDraft)
{
userImage = cardDraft.getImageUri();
userVoice = cardDraft.getSoundUri();
userVoiceDuration = cardDraft.getSoundDuration();
userTextContent = cardDraft.getMessage();
userTextSizeType = cardDraft.getMessageTextSizeType();
userTextColor = cardDraft.getMessageTextColor();
userSignHandwritingUri = cardDraft.getSignHandwritingUri();
userSignPositionInfoUri = cardDraft.getSignPositionInfoUri();
userSignDraftImageUri = cardDraft.getSignDraftImageUri();
}
private void updateAllRegion()
{
updateImageRegion();
updateVoiceRegion();
updateTextRegion();
updateSignRegion();
}
private void updateImageRegion()
{
Log.d(TAG, "updateImageRegion() - userImage: " + userImage);
if (userImage != null)
{
userImageBitmap = Bitmap.createBitmap(getBitmapFromUri(userImage));
if (userImageBitmap != null)
{
editableImage.setImageBitmap(userImageBitmap);
editableImage.invalidate();
Log.d(TAG, "updateImageRegion() editableImage.invalidate()");
}
}
}
private void updateVoiceRegion()
{
if (userVoice != null)
{
editableVoice.setDurationText(userVoiceDuration);
editableVoice.setVisibility(View.VISIBLE);
}
}
private void updateTextRegion()
{
if (userTextContent != null)
{
editableText.setText(userTextContent);
editableText.setTextSize(getTextSizeByType(userTextSizeType));
editableText.setTextColor(userTextColor);
editableText.setVisibility(View.VISIBLE);
}
if (editableText.getText().length() > 0)
{
editableTextTip.setVisibility(View.INVISIBLE);
}
else
{
editableTextTip.setVisibility(View.VISIBLE);
}
}
private void openLandscapeMenu()
{
landscapeMenuOpenerWrapper.setVisibility(View.INVISIBLE);
landscapeMenuModeScreenMask.setVisibility(View.VISIBLE);
}
private void closeLandscapeMenu()
{
landscapeMenuOpenerWrapper.setVisibility(View.VISIBLE);
landscapeMenuModeScreenMask.setVisibility(View.INVISIBLE);
}
// private void startImagePicker()
// {
//
// Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
// photoPickerIntent.setType("image/*");
// startActivityForResult(photoPickerIntent, REQ_PICK_IMAGE);
// }
//
// private void onImagePickerResult(int resultCode, Intent data)
// {
//
// Uri photoUri = data.getData();
// if (photoUri != null)
// {
// startImageCropper(photoUri);
// }
// }
//
// private void startImageCropper(Uri photoUri)
// {
//
// String fileName = FileUtility.getRandomImageName("png");
// File file = new File(cardDir, fileName);
// Uri imageUri = Uri.fromFile(file);
// Log.d(TAG, "startImageCropper -- return to " + file.getAbsolutePath());
//
// int w = editableImage.getWidth();
// int h = editableImage.getHeight();
// Intent intent = new Intent("com.android.camera.action.CROP");
// intent.setData(photoUri);
// intent.putExtra("outputX", w);
// intent.putExtra("outputY", h);
// intent.putExtra("aspectX", w);
// intent.putExtra("aspectY", h);
// intent.putExtra("scale", true);
// intent.putExtra("return-data", false);
// intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
// startActivityForResult(intent, REQ_CROP_IMAGE);
// }
public void startImageCropper()
{
String fileName = FileUtility.getRandomImageName("png");
File file = new File(cardDir, fileName);
tmpImageUri = Uri.fromFile(file);
Log.d(TAG, "startImageCropper -- return to " + file.getAbsolutePath());
int w = editableImage.getWidth();
int h = editableImage.getHeight();
DrawableProcess.getImage(this, REQ_CROP_IMAGE, tmpImageUri, w, h);
}
private void onImageCropperResult(int resultCode, Intent data)
{
final Bundle extras = data.getExtras();
if (extras != null)
{
Log.d(TAG, "onImageCropperResult");
progressDialog = ProgressDialog.show(CardEditorActivity.this,
getString(R.string.processing), getString(R.string.please_wait), true, false);
userImage = tmpImageUri;
card.setImage(userImage);
Log.d(TAG, "Card image set:" + card.getImage().toString());
new Thread()
{
@Override
public void run()
{
Log.d(TAG, "going get bitmap");
userImageBitmap = FileUtility.getBitmapFromPath(userImage.getPath());
runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.d(TAG, "going set ImageView");
editableImage.setImageBitmap(userImageBitmap);
progressDialog.dismiss();
}
});
}
}.start();
}
// Bundle extras = data.getExtras();
// if (extras != null)
// {
// Bitmap cropped = extras.getParcelable("data");
// userImageBitmap = cropped;
// editableImage.setImageBitmap(cropped);
// new SaveCardImageThread(cropped).start();
// }
}
private void startVoiceRecorder()
{
String fileName = FileUtility.getRandomSpeechName("3gp");
String filePath = cardDir.getAbsolutePath() + "/" + fileName;
Log.d(TAG, "startVoiceRecorder - filePath: " + filePath);
Intent intent = new Intent(this, AudioRecorderActivity.class);
intent.putExtra(AudioRecorderActivity.EXTRA_KEY_FILEPATH, filePath);
startActivityForResult(intent, REQ_RECORD_VOICE);
}
private void onVoiceRecorderResult(int resultCode, Intent data)
{
String filePath = data.getStringExtra(AudioRecorderActivity.EXTRA_KEY_FILEPATH);
userVoice = Uri.fromFile(new File(filePath));
int duration = data.getIntExtra(AudioRecorderActivity.EXTRA_KEY_DURATION_MILLISECOND, 0);
int min = duration / 1000 / 60;
int sec = duration / 1000 % 60;
userVoiceDuration = min + ":" + String.format("%02d", sec);
Log.d(TAG, "onVoiceRecorderResult - filePath: " + filePath);
Log.d(TAG, "onVoiceRecorderResult - duration: " + duration + " = " + min + "m" + sec + "s");
updateVoiceRegion();
card.setSound(userVoice);
}
private void startTextEditor()
{
Intent intent = new Intent(this, CardTextEditorActivity.class);
intent.putExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_LIMIT, 60);
intent.putExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_CONTENT, card.getMessage());
intent.putExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_COLOR, card.getMessageTextColor());
intent.putExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_SIZE_TYPE,
card.getMessageTextSizeType());
startActivityForResult(intent, REQ_EDIT_TEXT);
}
private void onTextEditorResult(int resultCode, Intent data)
{
userTextContent = data.getStringExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_CONTENT);
userTextSizeType = data.getIntExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_SIZE_TYPE,
Card.DEFAULT_TEXT_SIZE_TYPE);
userTextColor = data.getIntExtra(CardTextEditorActivity.EXTRA_KEY_TEXT_COLOR,
Card.DEFAULT_TEXT_COLOR);
updateTextRegion();
card.setMessage(userTextContent, userTextSizeType, userTextColor);
}
private void startSignatureEditor()
{
Intent intent = new Intent(this, EditSignatureActivity.class);
intent.putExtra(EXTRA_KEY_USER_SIGN_HANDWRITHING, userSignHandwritingUri);
intent.putExtra(EXTRA_KEY_USER_SIGN_POSITION_INFO, userSignPositionInfoUri);
intent.putExtra(EXTRA_KEY_USER_SIGN_DRAFT_IMAGE, userSignDraftImageUri);
startActivityForResult(intent, REQ_EDIT_SIGNATURE);
}
private void onSignatureEditorResult(int resultCode, Intent data)
{
userSignHandwritingUri = data.getParcelableExtra(EXTRA_KEY_USER_SIGN_HANDWRITHING);
userSignPositionInfoUri = data.getParcelableExtra(EXTRA_KEY_USER_SIGN_POSITION_INFO);
userSignDraftImageUri = data.getParcelableExtra(EXTRA_KEY_USER_SIGN_DRAFT_IMAGE);
if (userSignDraftImageUri != null)
{
Log.d(TAG, "onSignatureEditorResult, getBitmapFromUri(userSignDraftImageUri): "
+ getBitmapFromUri(userSignDraftImageUri));
editableSignImage.setImageBitmap(getBitmapFromUri(userSignDraftImageUri));
}
Log.d(TAG, "onSignatureEditorResult, userSignHandwritingUri: " + userSignHandwritingUri);
Log.d(TAG, "onSignatureEditorResult, userSignPositionInfoUri: " + userSignPositionInfoUri);
Log.d(TAG, "onSignatureEditorResult, useSignDraftImageUri:" + userSignDraftImageUri);
updateSignRegion();
card.setSignHandwriting(userSignHandwritingUri);
card.setSignPositionInfo(userSignPositionInfoUri);
card.setSignDraftImage(userSignDraftImageUri);
}
private void updateSignRegion()
{
if (userSignDraftImageUri != null && getBitmapFromUri(userSignDraftImageUri) != null)
{
editableSignatureTip.setVisibility(View.INVISIBLE);
editableSignImage.setImageBitmap(getBitmapFromUri(userSignDraftImageUri));
}
else
{
editableSignatureTip.setVisibility(View.VISIBLE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (data == null)
{
Log.d(TAG, "onActivityResult, data null");
return;
}
switch (requestCode)
{
// case REQ_PICK_IMAGE:
// onImagePickerResult(resultCode, data);
// break;
case REQ_CROP_IMAGE:
onImageCropperResult(resultCode, data);
break;
case REQ_RECORD_VOICE:
onVoiceRecorderResult(resultCode, data);
break;
case REQ_EDIT_TEXT:
onTextEditorResult(resultCode, data);
break;
case REQ_EDIT_SIGNATURE:
onSignatureEditorResult(resultCode, data);
break;
}
}
// private class SaveCardImageThread extends Thread
// {
// private Bitmap bitmap;
//
// public SaveCardImageThread(Bitmap bitmap)
// {
//
// this.bitmap = bitmap;
// }
//
// @Override
// public void run()
// {
//
// String fileName = FileUtility.getRandomImageName("png");
// File file = new File(getCacheDir(), fileName);
// if (saveBitmapToFile(bitmap, file))
// {
// userImage = Uri.fromFile(file);
// card.setImage(userImage);
// Log.d(TAG, "Card image set:" + card.getImage().toString());
//
// CardEditorActivity.this.runOnUiThread(new Runnable()
// {
// @Override
// public void run()
// {
//
// updateImageRegion();
// }
// });
//
// }
// else
// {
// Log.e(TAG, "Failed to save bitmap");
// }
// }
// }
/**
*
* @param bitmap
* @param file
* @return true if save successfully
*/
private static boolean saveBitmapToFile(Bitmap bitmap, File file)
{
boolean result = false;
FileOutputStream out = null;
try
{
out = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, out);
out.close();
result = true;
}
catch (IOException e)
{
e.printStackTrace();
}
return result;
}
public static float getTextSizeByType(int type)
{
float size;
switch (type)
{
case Card.TEXT_SIZE_TYPE_SMALL:
size = TEXT_SIZE_SMALL;
break;
case Card.TEXT_SIZE_TYPE_LARGE:
size = TEXT_SIZE_LARGE;
break;
case Card.TEXT_SIZE_TYPE_NORMAL:
default:
size = TEXT_SIZE_NORMAL;
break;
}
return size;
}
private void startCardSender()
{
Intent intent = new Intent(this, CardViewerActivity.class);
intent.putExtra(CardViewerActivity.EXTRA_KEY_MODE, CardViewerActivity.MODE_SENDER);
intent.putExtra(CardViewerActivity.EXTRA_KEY_CARD_WITH_USER_DATA_FOR_SEND, card);
Log.d(TAG, "send card:: " + card);
intent.putExtra(CardViewerActivity.EXTRA_KEY_CARD_LEFT_SCREENSHOT_FILEPATH,
screenshotLeftFilePath);
intent.putExtra(CardViewerActivity.EXTRA_KEY_CARD_RIGHT_SCREENSHOT_FILEPATH,
screenshotRightFilePath);
intent.putExtra(CardViewerActivity.EXTRA_KEY_CARD_VOICE_DURATION_TEXT, userVoiceDuration);
intent.putExtra(Constant.EXTRA_KEY_SENDBACK_ID, sendBackId);
Log.d(TAG, "screenshot left:: " + screenshotLeftFilePath);
Log.d(TAG, "screenshot right:: " + screenshotRightFilePath);
startActivity(intent);
}
private boolean isCardUserDataCompleted()
{
// return card.getImage() != null && card.getMessage() != null &&
// card.getSound() != null
// && card.getSignDraftImage() != null;
return card.getImage() != null || card.getMessage() != null || card.getSound() != null
|| card.getSignDraftImage() != null;
}
private Bitmap getBitmapFromUri(Uri uri)
{
try
{
String scheme = uri.getScheme();
if ("content".equalsIgnoreCase(scheme))
{
return FileUtility.getBitmapFromUri(uri, this);
}
else if ("file".equalsIgnoreCase(scheme))
{
return FileUtility.getBitmapFromPath(uri.getPath());
}
else
{
Log.d(TAG, "getBitmapFromUri returns null from " + uri);
return null;
}
}
catch (Exception e)
{
Log.e(TAG, e.getMessage());
Log.e(TAG, "uriļ¼" + uri);
e.printStackTrace();
return null;
}
}
private void hideFrameBorderAndTips()
{
editableImageFrame.setBackgroundResource(0);
editableVoiceFrame.setBackgroundResource(0);
editableTextFrame.setBackgroundResource(0);
editableSignatureFrame.setBackgroundResource(0);
editableImageTip.setVisibility(View.GONE);
editableVoiceTip.setVisibility(View.GONE);
editableTextTip.setVisibility(View.GONE);
editableSignatureTip.setVisibility(View.GONE);
}
private void startScreenshotThread()
{
hideFrameBorderAndTips();
View wholeCard = findViewById(R.id.act_card_editor_rlyt_card);
wholeCard.setDrawingCacheEnabled(true);
Bitmap wholeScreenshot = wholeCard.getDrawingCache();
int pageWidth = wholeScreenshot.getWidth() / 2;
int pageHeight = wholeScreenshot.getHeight();
Bitmap left = Bitmap.createBitmap(wholeScreenshot, 0, 0, pageWidth, pageHeight);
Bitmap right = Bitmap.createBitmap(wholeScreenshot, pageWidth, 0, pageWidth, pageHeight);
wholeCard.setDrawingCacheEnabled(false);
new SaveScreenshotBitmapThread(left, right).start();
}
private class SaveScreenshotBitmapThread extends Thread
{
Bitmap left;
Bitmap right;
public SaveScreenshotBitmapThread(Bitmap left, Bitmap right)
{
this.left = left;
this.right = right;
}
@Override
public void run()
{
File dir = CardEditorActivity.this.getCacheDir();
long now = System.currentTimeMillis();
File leftFile = new File(dir, now + "_left.png");
File rightFile = new File(dir, now + "_right.png");
if (saveBitmapToFile(left, leftFile) && saveBitmapToFile(right, rightFile))
{
screenshotLeftFilePath = leftFile.getAbsolutePath();
screenshotRightFilePath = rightFile.getAbsolutePath();
}
startCardSender();
progressDialog.dismiss();
}
}
}