package iShamrock.Postal.activity.publishers;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.*;
import iShamrock.Postal.R;
import iShamrock.Postal.activity.Timeline;
import iShamrock.Postal.database.Database;
import iShamrock.Postal.entity.PostalDataItem;
import iShamrock.Postal.util.BaiduLocUtil;
import iShamrock.Postal.util.SysInfoUtil;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by Tong on 02.15.
*/
public class JEditor extends Activity {
static final int PHOTO_CROP = 0, RESULT_CAPTURE_IMAGE = 1,
REQUEST_CODE_TAKE_VIDEO = 2, RESULT_CAPTURE_RECORDER_SOUND = 3, REQUEST_LOCATION = 4;
private int width, height;
private int type;
private Uri mediaUri = Uri.parse("");
private ViewGroup jeditor_media;
private ImageView jeditor_delete, jeditor_send, jeditor_action, jeditor_loc;
private TextView jeditor_title, jeditor_time;
private EditText jeditor_text;
private PostalDataItem dataItem = new PostalDataItem();
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.jeditor);
super.onCreate(savedInstanceState);
Intent intent = getIntent();
type = intent.getIntExtra("type", PostalDataItem.TYPE_IMAGE);
initCommonComponents();
initMediaComponents();
}
private void initCommonComponents() {
jeditor_media = (ViewGroup) findViewById(R.id.jeditor_media);
jeditor_delete = (ImageView) findViewById(R.id.jeditor_icon_delete);
jeditor_send = (ImageView) findViewById(R.id.jeditor_icon_send);
jeditor_title = (TextView) findViewById(R.id.jeditor_title);
jeditor_action = (ImageView) findViewById(R.id.jeditor_action);
jeditor_time = (TextView) findViewById(R.id.jeditor_time);
jeditor_loc = (ImageView) findViewById(R.id.jeditor_loc);
jeditor_text = (EditText) findViewById(R.id.jeditor_text);
jeditor_delete.setOnTouchListener(new ButtonTouchAnimationListener(jeditor_delete));
jeditor_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
jeditor_send.setOnTouchListener(new ButtonTouchAnimationListener(jeditor_send));
jeditor_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Database.addPostal(new PostalDataItem(
type,
mediaUri.toString(),
jeditor_text.getText().toString(),
jeditor_time.getText().toString(),
"no title",
dataItem.location,
Database.me.getPhone(),
Database.me.getPhone(),
dataItem.location_text));
Intent intent = new Intent();
intent.setClass(JEditor.this, Timeline.class);
startActivity(intent);
finish();
}
});
jeditor_time.setText(new SimpleDateFormat("MM/dd E").format(new Date()));
jeditor_loc.setOnTouchListener(new ButtonTouchAnimationListener(jeditor_loc));
jeditor_loc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(JEditor.this, GeoEncodingActivity.class);
startActivityForResult(intent, REQUEST_LOCATION);
}
});
}
private void initMediaComponents() {
/* Decide the function of action button*/
switch (type) {
case PostalDataItem.TYPE_TEXT:
jeditor_title.setText("Take a note");
ViewGroup.LayoutParams params = jeditor_media.getLayoutParams();
params.height = 0;
jeditor_media.setLayoutParams(params);
return;
case PostalDataItem.TYPE_IMAGE: {
jeditor_title.setText("Take a photo");
jeditor_action.setImageDrawable(getResources().getDrawable(R.drawable.icon_image_take));
jeditor_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cameraMethod();
}
});
break;
}
case PostalDataItem.TYPE_VIDEO: {
jeditor_title.setText("Take a video");
jeditor_action.setImageDrawable(getResources().getDrawable(R.drawable.icon_video));
jeditor_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
videoMethod();
}
});
break;
}
case PostalDataItem.TYPE_AUDIO:
jeditor_title.setText("Take an audio");
jeditor_action.setImageDrawable(getResources().getDrawable(R.drawable.icon_audio));
jeditor_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundRecorderMethod();
}
});
break;
case PostalDataItem.TYPE_WEB:
jeditor_title.setText("Take a page");
jeditor_action.setImageDrawable(getResources().getDrawable(R.drawable.icon_web));
jeditor_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webContentMethod();
}
});
break;
}
/* Add press animation for action button*/
jeditor_action.setOnTouchListener(new ButtonTouchAnimationListener(jeditor_action, 196));
/* Adjust the size of media area*/
int screenWidth = this.getWindowManager().getDefaultDisplay().getWidth();
float scale = this.getResources().getDisplayMetrics().densityDpi;
width = (int) (screenWidth / scale * 160);
height = width / 16 * 9;
ViewGroup.LayoutParams params = jeditor_media.getLayoutParams();
params.height = screenWidth / 16 * 9;
jeditor_media.setLayoutParams(params);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
switch (resultCode) {
case REQUEST_LOCATION:
dataItem.location=new double[]{BaiduLocUtil.location.getLatitude(),BaiduLocUtil.location.getLongitude()};
dataItem.location_text= data.getStringExtra("GeoEncoding");
}
return;
}
switch (requestCode) {
case RESULT_CAPTURE_IMAGE:
photoZoom(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/temp.jpg")));
break;
case PHOTO_CROP:
Bundle extras = data.getExtras();
if (extras == null) return;
Bitmap photo = extras.getParcelable("data");
if (photo == null) return;
photo.compress(Bitmap.CompressFormat.JPEG, 100, new ByteArrayOutputStream());
String tempDir = "cache" + System.currentTimeMillis();
try {
SysInfoUtil.saveBitmapToFile(photo, Environment.getExternalStorageDirectory() + "/" + tempDir);
} catch (IOException e) {
e.printStackTrace();
}
mediaUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), tempDir));
/* Put the image into media area*/
ImageView imageView = new ImageView(this);
imageView.setImageURI(mediaUri);
imageView.setLayoutParams(new ActionBar.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
jeditor_media.removeView(jeditor_action);
jeditor_media.addView(imageView);
break;
case REQUEST_CODE_TAKE_VIDEO:
mediaUri = data.getData();
/* Put the video into media area*/
final VideoView videoView = new VideoView(this);
videoView.setVideoURI(mediaUri);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
lp.gravity = Gravity.CENTER;
videoView.setLayoutParams(lp);
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
videoView.requestFocus();
jeditor_media.setBackgroundColor(0xff000000);
jeditor_media.removeView(jeditor_action);
jeditor_media.addView(videoView);
break;
case RESULT_CAPTURE_RECORDER_SOUND:
mediaUri = data.getData();
/* Put the audio into media area*/
final ImageView audioImageview = new ImageView(this);
audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message));
lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
lp.gravity = Gravity.LEFT;
audioImageview.setLayoutParams(lp);
final MediaPlayer mMediaPlayer = MediaPlayer.create(getApplicationContext(), mediaUri);
audioImageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message));
} else {
mMediaPlayer.start();
audioImageview.setImageDrawable(getResources().getDrawable(R.drawable.voice_message_playing));
}
}
});
audioImageview.setOnTouchListener(new ButtonTouchAnimationListener(audioImageview));
ViewGroup.LayoutParams params = jeditor_media.getLayoutParams();
params.height = getWindowManager().getDefaultDisplay().getWidth() / 6;
jeditor_media.setLayoutParams(params);
jeditor_media.removeView(jeditor_action);
jeditor_media.addView(audioImageview);
break;
}
}
private void photoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
/* width:height ratio*/
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 16);
intent.putExtra("aspectY", 9);
/* image size*/
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_CROP);
}
private void cameraMethod() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));
startActivityForResult(intent, RESULT_CAPTURE_IMAGE);
}
private void videoMethod() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
}
private void soundRecorderMethod() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/amr");
startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);
}
private void webContentMethod() {
final EditText urlInput = new EditText(this);
urlInput.setText("http://");
AlertDialog dialog = new AlertDialog.Builder(JEditor.this)
.setTitle("Input the page link")
.setView(urlInput)
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
String urlString = urlInput.getText().toString();
if (urlString == null) return;
final WebView webView = new WebView(JEditor.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
webView.setLayoutParams(lp);
/* Forbid outer link*/
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
webView.setWebViewClient(new MyWebViewClient());
/* Add javascript support.*/
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(false);
webSettings.setLightTouchEnabled(true);
webSettings.setSupportZoom(false);
webView.setHapticFeedbackEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webView.loadUrl(urlString);
jeditor_media.removeView(jeditor_action);
jeditor_media.addView(webView);
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
}).create();
dialog.show();
}
}