package com.sun.bingo.ui.activity; import android.annotation.SuppressLint; 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.CardView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.afollestad.materialdialogs.MaterialDialog; import com.bmob.BmobProFile; import com.bmob.btp.callback.UploadBatchListener; 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.image.GetPathFromUri4kitkat; import com.sun.bingo.widget.ActionSheet; import com.sun.bingo.widget.UploadImageView; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; 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 EditNewBingoActivity extends BaseActivity<SingleControl> implements View.OnClickListener { @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.et_website) EditText etWebsite; @BindView(R.id.cv_website) CardView cvWebsite; @BindView(R.id.et_describe) EditText etDescribe; @BindView(R.id.cv_describe) CardView cvDescribe; @BindView(R.id.ll_container) LinearLayout llContainer; @BindView(R.id.hs_images) HorizontalScrollView hsImages; @BindView(R.id.iv_image) ImageView ivImage; @BindView(R.id.tv_commit) TextView tvCommit; @BindView(R.id.rl_bottom_layout) RelativeLayout rlBottomLayout; private String takePicturePath; private BingoEntity bingoEntity; private List<UploadImageView> uploadImageViews; private boolean isShareDes = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_new_bingo); ButterKnife.bind(this); initData(); initView(); initListener(); } @Override protected void onResume() { super.onResume(); checkClipboard(); } private void initData() { bingoEntity = new BingoEntity(); if (getIntent() != null) { if (getIntent().hasExtra("url")) { etWebsite.setText(getIntent().getStringExtra("url")); } } } @SuppressLint("NewApi") private void initView() { initToolBar(toolbar, true, "添加文章"); hsImages.setVisibility(View.GONE); setRectShapeViewBackground(rlBottomLayout); setRoundRectShapeViewBackground(ivImage); setRoundRectShapeViewBackground(tvCommit); } private void initListener() { ivImage.setOnClickListener(this); tvCommit.setOnClickListener(this); } // 检查剪贴板上是否有分享的标题和描述 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; etDescribe.setText(text); } @Override public void onNegative(MaterialDialog dialog) { super.onNegative(dialog); isShareDes = false; getSettingsSharedPreferences().newBingoDes(text); } }); } } private void commitNewBingo() { String website = etWebsite.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 describe = etDescribe.getText().toString().trim(); if (TextUtils.isEmpty(describe)) { ToastTip.show(getString(R.string.hint_input_describe)); return; } bingoEntity.setWebsite(website); bingoEntity.setDescribe(describe); bingoEntity.setCreateTime(DateUtil.getCurrentMillis()); myEntity = BmobUser.getCurrentUser(this, UserEntity.class); bingoEntity.setUserId(myEntity.getObjectId()); bingoEntity.setUserEntity(myEntity); loadingDialog.show(); if (bingoEntity.getImageList() != null && bingoEntity.getImageList().size() > 0) { List<String> list = bingoEntity.getImageList(); int size = list.size(); BmobProFile.getInstance(this).uploadBatch(list.toArray(new String[size]), new UploadBatchListener() { @Override public void onSuccess(boolean isFinish, String[] fileNames, String[] urls, BmobFile[] files) { if (isFinish) { for (UploadImageView item : uploadImageViews) { item.setProgressFinish(); } bingoEntity.setImageList(getBmobUrls(files)); bingoEntity.save(EditNewBingoActivity.this, new SaveListener() { @Override public void onSuccess() { resultSuccess(); } @Override public void onFailure(int i, String s) { resultFail(); } }); } } @Override public void onProgress(int curIndex, int curPercent, int total, int totalPercent) { uploadImageViews.get(curIndex - 1).setProgress(curPercent); } @Override public void onError(int statuscode, String errormsg) { resultFail(); } }); } else { bingoEntity.save(EditNewBingoActivity.this, new SaveListener() { @Override public void onSuccess() { resultSuccess(); } @Override public void onFailure(int i, String s) { resultFail(); } }); } } private void resultSuccess() { getSettingsSharedPreferences().newBingoUrl(etWebsite.getText().toString()); getSettingsSharedPreferences().newBingoDes(etDescribe.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("提交失败,请重试"); } private List<String> getBmobUrls(BmobFile[] files) { List<String> list = new ArrayList<>(); for (BmobFile item : files) { list.add(item.getUrl()); } return list; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_image: if (bingoEntity.getImageList() != null && bingoEntity.getImageList().size() >= 9) { ToastTip.show("最多上传9张图片哦"); } else { KeyBoardUtil.hideKeyboard(this); showSelectImageDialog(); } break; case R.id.tv_commit: commitNewBingo(); break; } } 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(EditNewBingoActivity.this, takePicturePath); break; case 1: NavigateManager.gotoChoosePicture(EditNewBingoActivity.this); break; } } }).show(); } private void updateImageLayout() { llContainer.removeAllViews(); uploadImageViews = new ArrayList<>(); List<String> list = bingoEntity.getImageList(); int size = list.size(); for (int i = 0; i < size; i++) { final int position = i; View view = LayoutInflater.from(this).inflate(R.layout.item_image_pick_layout, null); UploadImageView ivSelectedImage = ButterKnife.findById(view, R.id.iv_selected_image); uploadImageViews.add(ivSelectedImage); ImageView ivDeleteImage = ButterKnife.findById(view, R.id.iv_delete_image); ivDeleteImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bingoEntity.getImageList().remove(position); updateImageLayout(); if (bingoEntity.getImageList() == null || bingoEntity.getImageList().size() == 0) { hsImages.setVisibility(View.GONE); } } }); mImageManager.loadLocalImage(list.get(i), ivSelectedImage); llContainer.addView(view); } View view = LayoutInflater.from(this).inflate(R.layout.item_image_pick_layout, null); UploadImageView ivSelectedImage = ButterKnife.findById(view, R.id.iv_selected_image); ImageView ivDeleteImage = ButterKnife.findById(view, R.id.iv_delete_image); ivSelectedImage.setProgressFinish(); ivDeleteImage.setVisibility(View.INVISIBLE); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (bingoEntity.getImageList() != null && bingoEntity.getImageList().size() >= 9) { ToastTip.show("最多上传9张图片哦"); } else { KeyBoardUtil.hideKeyboard(EditNewBingoActivity.this); showSelectImageDialog(); } } }); ivSelectedImage.setImageResource(R.drawable.ic_add_image); llContainer.addView(view); } private void handleCompressImageViewWithPath(String imagePath) { hsImages.setVisibility(View.VISIBLE); List<String> list = bingoEntity.getImageList(); if (list == null || list.size() == 0) { list = new ArrayList<>(); } list.add(imagePath); bingoEntity.setImageList(list); updateImageLayout(); } private void setImageViewWithPath(String imagePath) { mControl.getCompressImagePath(this, imagePath); //异步压缩图片 } public void getCompressImagePathCallBack() { String compressImagePath = mModel.get(1); if (TextUtils.isEmpty(compressImagePath)) { ToastTip.show("请重新选择图片"); } else { handleCompressImageViewWithPath(compressImagePath); } } @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; } } } }