package com.kenny.openimgur.activities; import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TextInputLayout; import android.text.TextUtils; import android.transition.Transition; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import com.kenny.openimgur.R; import com.kenny.openimgur.classes.Upload; import com.kenny.openimgur.util.ImageUtil; import com.kenny.openimgur.util.ViewUtils; import butterknife.BindView; import butterknife.OnClick; public class UploadEditActivity extends BaseActivity { private static final long FADE_DURATION = 200L; private static final String KEY_UPLOAD = "upload"; public static final String KEY_UPDATED_UPLOAD = "updated_upload"; public static final String KEY_UPDATED_DELETED = "updated_deleted"; @BindView(R.id.image) ImageView mImage; @BindView(R.id.title) EditText mTitle; @BindView(R.id.desc) EditText mDescription; @BindView(R.id.titleWrapper) TextInputLayout mTitleWrapper; @BindView(R.id.descWrapper) TextInputLayout mDescWrapper; @BindView(R.id.fab) FloatingActionButton mFab; private Upload mUpload; public static Intent createIntent(Context context, @NonNull Upload upload) { return new Intent(context, UploadEditActivity.class).putExtra(KEY_UPLOAD, upload); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_upload_edit); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#33000000"))); mUpload = getIntent().getParcelableExtra(KEY_UPLOAD); String url = mUpload.isLink() ? mUpload.getLocation() : "file://" + mUpload.getLocation(); ImageUtil.getImageLoader(this).displayImage(url, mImage, ImageUtil.getDisplayOptionsForPhotoPicker().build()); mTitle.setText(mUpload.getTitle()); mDescription.setText(mUpload.getDescription()); if (isApiLevel(Build.VERSION_CODES.LOLLIPOP) && savedInstanceState == null) { getWindow().getEnterTransition().addListener(new Transition.TransitionListener() { @Override public void onTransitionStart(Transition transition) { // NOOP } @Override public void onTransitionEnd(Transition transition) { mTitleWrapper.setVisibility(View.VISIBLE); mDescWrapper.setVisibility(View.VISIBLE); ObjectAnimator.ofFloat(mTitleWrapper, "alpha", 0.0f, 1.0f).setDuration(FADE_DURATION).start(); ObjectAnimator.ofFloat(mDescWrapper, "alpha", 0.0f, 1.0f).setDuration(FADE_DURATION).start(); mFab.show(); getWindow().getEnterTransition().removeListener(this); } @Override public void onTransitionCancel(Transition transition) { // NOOP } @Override public void onTransitionPause(Transition transition) { // NOOP } @Override public void onTransitionResume(Transition transition) { // NOOP } }); } else { mTitleWrapper.setVisibility(View.VISIBLE); mDescWrapper.setVisibility(View.VISIBLE); mFab.setVisibility(View.VISIBLE); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.upload_edit, menu); return super.onCreateOptionsMenu(menu); } @Override public void onPause() { mTitle.setCursorVisible(false); mDescription.setCursorVisible(false); super.onPause(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.delete: Intent intent = new Intent(); intent.putExtra(KEY_UPDATED_DELETED, mUpload); setResult(Activity.RESULT_OK, intent); finishActivity(); return true; case android.R.id.home: finishActivity(); return true; } return super.onOptionsItemSelected(item); } @OnClick(R.id.fab) public void onFabClick() { Intent intent = processUpdates(); if (intent != null) { setResult(Activity.RESULT_OK, intent); } finishActivity(); } @Nullable private Intent processUpdates() { String desc = mDescription.getText().toString(); String title = mTitle.getText().toString(); if (TextUtils.isEmpty(desc) && TextUtils.isEmpty(mUpload.getDescription()) && TextUtils.isEmpty(title) && TextUtils.isEmpty(mUpload.getTitle())) { return null; } if (!desc.equals(mUpload.getDescription()) || !title.equals(mUpload.getTitle())) { // Something was changed, return it. Intent intent = new Intent(); Upload upload = new Upload(mUpload.getLocation(), mUpload.isLink()); upload.setTitle(title); upload.setDescription(desc); intent.putExtra(KEY_UPDATED_UPLOAD, upload); return intent; } return null; } @Override public void onBackPressed() { finishActivity(); } private void finishActivity() { // Set these views to gone so the transitions look smooth if (isApiLevel(Build.VERSION_CODES.LOLLIPOP)) { mFab.hide(); mTitleWrapper.animate().alpha(0.0f).setDuration(FADE_DURATION); mDescWrapper.animate().alpha(0.0f).setDuration(FADE_DURATION).withEndAction(new Runnable() { @Override public void run() { supportFinishAfterTransition(); } }); return; } supportFinishAfterTransition(); } @Override protected void onDestroy() { super.onDestroy(); ViewUtils.fixTransitionLeak(this); } @Override protected int getStyleRes() { return theme.isDarkTheme ? R.style.Theme_Opengur_Dark_Upload_Edit : R.style.Theme_Opengur_Light_DarkActionBar_Upload_Edit; } }