package com.miris.ui.activity;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.animation.OvershootInterpolator;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.Toast;
import android.widget.ToggleButton;
import com.miris.R;
import com.miris.Utils;
import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ParsePush;
import com.parse.ParseQuery;
import com.parse.SaveCallback;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import butterknife.InjectView;
import butterknife.OnCheckedChanged;
/**
* Created by Miris on 09.02.15.
*/
public class PublishActivity extends BaseActivity {
public static final String ARG_TAKEN_PHOTO_URI = "arg_taken_photo_uri";
@InjectView(R.id.tbFollowers)
ToggleButton tbFollowers;
@InjectView(R.id.tbDirect)
ToggleButton tbDirect;
@InjectView(R.id.ivPhoto)
ImageView ivPhoto;
@InjectView(R.id.etDescription)
EditText etDescription;
@InjectView(R.id.etSwitch)
Switch etSwitch;
private boolean propagatingToggleState = false;
private Uri photoUri;
private int photoSize;
ProgressDialog myLoadingDialog;
Boolean SwitchCheck = false;
String newWritingPublic = "Y";
public static void openWithPhotoUri(Activity openingActivity, Uri photoUri) {
Intent intent = new Intent(openingActivity, PublishActivity.class);
if (photoUri == null) {
intent.putExtra(ARG_TAKEN_PHOTO_URI, "");
} else {
intent.putExtra(ARG_TAKEN_PHOTO_URI, photoUri);
}
openingActivity.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_publish);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_grey600_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
etSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
SwitchCheck = true;
} else {
SwitchCheck = false;
}
}
});
photoSize = getResources().getDimensionPixelSize(R.dimen.publish_photo_thumbnail_size);
if (savedInstanceState == null) {
photoUri = getIntent().getParcelableExtra(ARG_TAKEN_PHOTO_URI);
} else {
photoUri = savedInstanceState.getParcelable(ARG_TAKEN_PHOTO_URI);
}
updateStatusBarColor();
if (photoUri == null) {
ivPhoto.setVisibility(View.GONE);
} else {
ivPhoto.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
ivPhoto.getViewTreeObserver().removeOnPreDrawListener(this);
loadThumbnailPhoto();
return true;
}
});
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void updateStatusBarColor() {
if (Utils.isAndroid5()) {
getWindow().setStatusBarColor(0xff888888);
}
}
private void loadThumbnailPhoto() {
ivPhoto.setScaleX(0);
ivPhoto.setScaleY(0);
Picasso.with(this)
.load(photoUri)
.centerCrop()
.resize(photoSize, photoSize)
.into(ivPhoto, new Callback() {
@Override
public void onSuccess() {
ivPhoto.animate()
.scaleX(1.f).scaleY(1.f)
.setInterpolator(new OvershootInterpolator())
.setDuration(400)
.setStartDelay(200)
.start();
}
@Override
public void onError() {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_publish, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_publish) {
if (photoUri == null && etDescription.getText().toString().equals("")) {
Toast.makeText(getApplicationContext(), getString(R.string.publish_text_img_check), Toast.LENGTH_SHORT).show();
} else {
hideSoftInputWindow(findViewById(R.id.action_publish));
new setDataTask().execute();
}
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
@Override
public void onDestroy() {
if (myLoadingDialog != null && myLoadingDialog.isShowing()) {
myLoadingDialog.dismiss();
myLoadingDialog = null;
}
super.onDestroy();
}
class setDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
myLoadingDialog = new ProgressDialog(PublishActivity.this);
myLoadingDialog.setMessage(getString(R.string.show_lodingbar));
myLoadingDialog.setIndeterminate(false);
myLoadingDialog.setCancelable(false);
myLoadingDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
ParseFile file = null;
ParseObject testObject = new ParseObject("miris_notice");
if (photoUri != null) {
try {
file = new ParseFile("user_img.png", readBytes(photoUri));
} catch (IOException e) {
e.printStackTrace();
}
testObject.put("user_img", file);
}
testObject.put("user_id", memberData.get(0).getuserId());
testObject.put("user_name", memberData.get(0).getuser_name());
testObject.put("user_text", etDescription.getText().toString());
testObject.put("user_like", 0);
testObject.put("creatdate", Utils.getCalendar());
testObject.put("user_public", newWritingPublic);
testObject.saveInBackground();
testObject.saveInBackground(new SaveCallback() {
@Override
public void done(com.parse.ParseException e) {
if (e == null) {
ParseQuery testObject = ParseQuery.getQuery("miris_member");
testObject.whereEqualTo("user_id", memberData.get(0).getuserId());
testObject.getFirstInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject membermodule, ParseException e) {
if (e == null) {
int userAddApp = membermodule.getInt("user_registernumber");
membermodule.put("user_registernumber", userAddApp + 1);
membermodule.saveInBackground();
memberData.get(0).setuser_registernumber(userAddApp + 1);
if (newWritingPublic.equals("Y")) {
ParsePush push = new ParsePush();
if (SwitchCheck) {
push.setMessage(getString(R.string.notice_push));
} else {
push.setMessage("false");
}
push.sendInBackground();
}
bringMainActivityToTop();
}
}
});
}
}
});
return null ;
}
}
public Bitmap imgUriPath(Uri uri) throws IOException {
Bitmap bitmap;
AssetFileDescriptor afd = getContentResolver().openAssetFileDescriptor(uri, "r");
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile(uri.getPath(), opt);
if (opt.outHeight > 2000 || opt.outWidth > 2000) {
opt.inJustDecodeBounds = false;
opt.inSampleSize = 4;
bitmap = BitmapFactory.decodeFileDescriptor(afd.getFileDescriptor(), null, opt);
} else if (opt.outHeight > 1000 || opt.outWidth > 1000) {
opt.inJustDecodeBounds = false;
opt.inSampleSize = 2;
bitmap = BitmapFactory.decodeFileDescriptor(afd.getFileDescriptor(), null, opt);
} else {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
}
ExifInterface exif = new ExifInterface(uri.getPath());
int exifOrientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int exifDegree = exifOrientationToDegrees(exifOrientation);
bitmap = rotate(bitmap, exifDegree);
return bitmap;
}
public byte[] readBytes(Uri uri) throws IOException {
byte[] data = null;
Bitmap bitmap;
try {
bitmap = imgUriPath(uri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
data = baos.toByteArray();
bitmap.recycle();
System.gc();
Runtime.getRuntime().gc();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return data;
}
public int exifOrientationToDegrees(int exifOrientation) {
if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
return 90;
} else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
return 180;
} else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
return 270;
}
return 0;
}
public Bitmap rotate(Bitmap bitmap, int degrees) {
if(degrees != 0 && bitmap != null) {
Matrix m = new Matrix();
m.setRotate(degrees, (float) bitmap.getWidth() / 2,
(float) bitmap.getHeight() / 2);
try {
Bitmap converted = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), m, true);
if(bitmap != converted) {
bitmap.recycle();
bitmap = converted;
}
} catch(OutOfMemoryError ex) {
}
}
return bitmap;
}
private void bringMainActivityToTop() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (photoUri == null) {
intent.setAction(MainActivity.ACTION_NO_IMG_ITEM);
} else {
intent.setAction(MainActivity.ACTION_SHOW_LOADING_ITEM);
}
startActivity(intent);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(ARG_TAKEN_PHOTO_URI, photoUri);
}
@OnCheckedChanged(R.id.tbFollowers)
public void onFollowersCheckedChange(boolean checked) {
if (!propagatingToggleState) {
propagatingToggleState = true;
tbDirect.setChecked(!checked);
newWritingPublic = "N";
etSwitch.setChecked(false);
etSwitch.setVisibility(View.INVISIBLE);
propagatingToggleState = false;
}
}
@OnCheckedChanged(R.id.tbDirect)
public void onDirectCheckedChange(boolean checked) {
if (!propagatingToggleState) {
propagatingToggleState = true;
tbFollowers.setChecked(!checked);
newWritingPublic = "Y";
etSwitch.setVisibility(View.VISIBLE);
propagatingToggleState = false;
}
}
}