package com.sun.bingo.ui.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bmob.BmobProFile;
import com.bmob.btp.callback.UploadListener;
import com.framework.dialog.TipDialog;
import com.framework.dialog.ToastTip;
import com.sun.bingo.BingoApp;
import com.sun.bingo.R;
import com.sun.bingo.control.NavigateManager;
import com.sun.bingo.control.SingleControl;
import com.sun.bingo.model.BingoEntity;
import com.sun.bingo.model.UserEntity;
import com.sun.bingo.model.eventbus.EventEntity;
import com.sun.bingo.model.eventbus.EventType;
import com.sun.bingo.ui.dialog.CommonDialog;
import com.sun.bingo.util.DateUtil;
import com.sun.bingo.util.KeyBoardUtil;
import com.sun.bingo.util.NetWorkUtil;
import com.sun.bingo.util.UrlParse.LinkSourceContent;
import com.sun.bingo.util.UrlParse.LinkViewCallback;
import com.sun.bingo.util.UrlParse.TextCrawler;
import com.sun.bingo.util.image.GetPathFromUri4kitkat;
import com.sun.bingo.widget.ActionSheet;
import com.sun.bingo.widget.UploadImageView;
import org.greenrobot.eventbus.EventBus;
import butterknife.BindView;
import butterknife.ButterKnife;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.listener.SaveListener;
/**
* Created by sunfusheng on 15/7/18.
*/
public class AddBingoActivity extends BaseActivity<SingleControl> implements View.OnClickListener {
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.et_url)
EditText etUrl;
@BindView(R.id.ll_url)
LinearLayout llUrl;
@BindView(R.id.et_title)
EditText etTitle;
@BindView(R.id.ll_title)
LinearLayout llTitle;
@BindView(R.id.divider_title)
View dividerTitle;
@BindView(R.id.et_des)
EditText etDes;
@BindView(R.id.ll_des)
LinearLayout llDes;
@BindView(R.id.divider_des)
View dividerDes;
@BindView(R.id.tv_tag)
TextView tvTag;
@BindView(R.id.ll_tag)
LinearLayout llTag;
@BindView(R.id.divider_tag)
View dividerTag;
@BindView(R.id.iv_selected_image)
UploadImageView ivSelectedImage;
@BindView(R.id.iv_delete_image)
ImageView ivDeleteImage;
@BindView(R.id.ll_cover_image)
LinearLayout llCoverImage;
@BindView(R.id.divider_image)
View dividerImage;
@BindView(R.id.ll_bingo_info)
LinearLayout llBingoInfo;
@BindView(R.id.tv_from)
TextView tvFrom;
private String takePicturePath;
private BingoEntity bingoEntity;
private boolean isShareDes = true;
private TextCrawler textCrawler;
private LinkSourceContent linkContent;
private MaterialDialog tagsDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_bingo);
ButterKnife.bind(this);
initData();
initView();
initListener();
}
@Override
protected void onResume() {
super.onResume();
checkClipboard();
}
private void initData() {
bingoEntity = new BingoEntity();
textCrawler = new TextCrawler();
if (getIntent() != null) {
if (getIntent().hasExtra("url")) {
etUrl.setText(getIntent().getStringExtra("url"));
}
}
}
private void initView() {
initToolBar(toolbar, true, "分享文章");
llDes.setVisibility(View.GONE);
dividerDes.setVisibility(View.GONE);
llTag.setVisibility(View.GONE);
dividerTag.setVisibility(View.GONE);
llCoverImage.setVisibility(View.GONE);
dividerImage.setVisibility(View.GONE);
tvFrom.setVisibility(View.GONE);
ivSelectedImage.setProgressFinish();
}
private void initListener() {
tvTag.setOnClickListener(this);
ivSelectedImage.setOnClickListener(this);
ivDeleteImage.setOnClickListener(this);
etUrl.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!TextUtils.isEmpty(s)) {
textCrawler.makePreview(linkViewCallback, s.toString());
}
}
});
}
private LinkViewCallback linkViewCallback = new LinkViewCallback() {
@Override
public void onBeforeLoading() {
}
@Override
public void onAfterLoading(LinkSourceContent linkSourceContent, boolean isNull) {
if (linkSourceContent.isSuccess()) {
linkContent = linkSourceContent;
KeyBoardUtil.hideKeyboard(mActivity);
llTag.setVisibility(View.VISIBLE);
dividerTag.setVisibility(View.VISIBLE);
llCoverImage.setVisibility(View.VISIBLE);
dividerImage.setVisibility(View.VISIBLE);
etTitle.setText(linkSourceContent.getTitle() + "");
if (TextUtils.isEmpty(linkSourceContent.getDescription())) {
llDes.setVisibility(View.GONE);
dividerDes.setVisibility(View.GONE);
} else {
StringBuilder des = new StringBuilder();
llDes.setVisibility(View.VISIBLE);
dividerDes.setVisibility(View.VISIBLE);
if (linkSourceContent.getDescription().length() > 60) {
des.append(linkSourceContent.getDescription().substring(0, 59)).append("...");
}
etDes.setText(des.toString());
}
if (TextUtils.isEmpty(linkSourceContent.getCannonicalUrl())) {
tvFrom.setVisibility(View.GONE);
} else {
tvFrom.setVisibility(View.VISIBLE);
tvFrom.setText("来自 " + linkSourceContent.getCannonicalUrl());
}
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_add_bingo, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_bingo:
commitNewBingo();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// 检查剪贴板上是否有分享的标题和描述
private void checkClipboard() {
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData == null) return;
ClipData.Item item = clipData.getItemAt(0);
final String text = item.getText().toString();
if (!TextUtils.isEmpty(text) && !text.startsWith("http") && isShareDes && !text.equals(getSettingsSharedPreferences().newBingoDes())) {
TipDialog tipDialog = new TipDialog(this);
tipDialog.show("将复制的内容粘贴到文章描述处", text, "立即粘贴", "暂不", new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
super.onPositive(dialog);
isShareDes = false;
etDes.setText(text);
}
@Override
public void onNegative(MaterialDialog dialog) {
super.onNegative(dialog);
isShareDes = false;
getSettingsSharedPreferences().newBingoDes(text);
}
});
}
}
private void commitNewBingo() {
String website = etUrl.getText().toString().trim();
if (TextUtils.isEmpty(website)) {
ToastTip.show(getString(R.string.hint_input_website));
return;
}
if (!NetWorkUtil.isLinkAvailable(website)) {
ToastTip.show(getString(R.string.hint_input_website_available));
return;
}
String title = etTitle.getText().toString().trim();
if (TextUtils.isEmpty(title)) {
ToastTip.show("请输入文章标题");
return;
}
String describe = etDes.getText().toString().trim();
if (TextUtils.isEmpty(describe)) {
ToastTip.show(getString(R.string.hint_input_describe));
return;
}
bingoEntity.setWebsite(website);
bingoEntity.setTitle(title);
bingoEntity.setDescribe(describe);
bingoEntity.setCreateTime(DateUtil.getCurrentMillis());
myEntity = BmobUser.getCurrentUser(this, UserEntity.class);
bingoEntity.setUserId(myEntity.getObjectId());
bingoEntity.setUserEntity(myEntity);
bingoEntity.setFrom(linkContent != null? linkContent.getCannonicalUrl()+"":"");
loadingDialog.show();
if (!TextUtils.isEmpty(bingoEntity.getImage_cover())) {
ivSelectedImage.setProgressStart();
BmobProFile.getInstance(this).upload(bingoEntity.getImage_cover(), new UploadListener() {
@Override
public void onProgress(int i) {
ivSelectedImage.setProgress(i);
}
@Override
public void onSuccess(String s, String s1, BmobFile bmobFile) {
ivSelectedImage.setProgressFinish();
bingoEntity.setImage_cover(bmobFile.getUrl());
bingoEntity.save(AddBingoActivity.this, new SaveListener() {
@Override
public void onSuccess() {
resultSuccess();
}
@Override
public void onFailure(int i, String s) {
resultFail();
}
});
}
@Override
public void onError(int statuscode, String errormsg) {
resultFail();
}
});
} else {
bingoEntity.save(AddBingoActivity.this, new SaveListener() {
@Override
public void onSuccess() {
resultSuccess();
}
@Override
public void onFailure(int i, String s) {
resultFail();
}
});
}
}
private void resultSuccess() {
getSettingsSharedPreferences().newBingoUrl(etUrl.getText().toString());
getSettingsSharedPreferences().newBingoDes(etDes.getText().toString());
EventBus.getDefault().post(new EventEntity(EventType.EVENT_TYPE_UPDATE_BINGO_LIST));
loadingDialog.dismiss();
CommonDialog.showSuccessDialog(this, new CommonDialog.DismissListener() {
@Override
public void onDismiss() {
finish();
}
});
}
private void resultFail() {
loadingDialog.dismiss();
ToastTip.show("提交失败,请重试");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_tag:
selectBingoTag();
break;
case R.id.iv_selected_image:
showSelectImageDialog();
break;
case R.id.iv_delete_image:
break;
}
}
private void selectBingoTag() {
if (tagsDialog == null) {
tagsDialog = new MaterialDialog.Builder(mContext)
.title("文章分类")
.items(R.array.bingo_tags)
.itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {
@Override
public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
tvTag.setText(text.toString());
return true;
}
})
.build();
}
tagsDialog.show();
}
public void showSelectImageDialog() {
ActionSheet.createBuilder(this, getSupportFragmentManager())
.setCancelTextViewTitle("取消")
.setOtherTextViewTitles("拍照", "从相册选择")
.setCancelableOnTouchOutside(true)
.setListener(new ActionSheet.ActionSheetListener() {
@Override
public void onDismiss(ActionSheet actionSheet, boolean isCancel) {
}
@Override
public void onOtherTextViewClick(ActionSheet actionSheet, int index) {
switch (index) {
case 0:
takePicturePath = "/" + BingoApp.APP_CACHE_DIR + "/" + DateUtil.getCurrentMillis() + ".jpg";
NavigateManager.gotoTakePicture(AddBingoActivity.this, takePicturePath);
break;
case 1:
NavigateManager.gotoChoosePicture(AddBingoActivity.this);
break;
}
}
}).show();
}
private void setImageViewWithPath(String imagePath) {
mControl.getCompressImagePath(this, imagePath); //异步压缩图片
}
public void getCompressImagePathCallBack() {
String compressImagePath = mModel.get(1);
if (TextUtils.isEmpty(compressImagePath)) {
ToastTip.show("请重新选择图片");
} else {
bingoEntity.setImage_cover(compressImagePath);
mImageManager.loadLocalImage(compressImagePath, ivSelectedImage);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case NavigateManager.TAKE_PICTURE_REQUEST_CODE:
setImageViewWithPath(Environment.getExternalStorageDirectory() + takePicturePath);
break;
case NavigateManager.CHOOSE_PICTURE_REQUEST_CODE:
Uri uri = data.getData();
String imagePath = GetPathFromUri4kitkat.getPath(this, data.getData());
if (TextUtils.isEmpty(imagePath)) {
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
cursor.close();
}
}
setImageViewWithPath(imagePath);
break;
}
}
}
}