package com.electric.chargingpile.activity; import android.app.Activity; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.Html; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.blankj.utilcode.util.ToastUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.electric.chargingpile.R; import com.electric.chargingpile.adapter.TopicAdapter; import com.electric.chargingpile.application.MainApplication; import com.electric.chargingpile.data.AuthSignBean; import com.electric.chargingpile.data.ChatRecommendBean; import com.electric.chargingpile.data.PublishItemSerializable; import com.electric.chargingpile.data.TalkRecommendBean; import com.electric.chargingpile.data.VideoUploadResult; import com.electric.chargingpile.manager.ProfileManager; import com.electric.chargingpile.util.BarColorUtil; import com.electric.chargingpile.util.Base64; import com.electric.chargingpile.util.Bimp; import com.electric.chargingpile.util.CommonParams; import com.electric.chargingpile.util.DateUtils; import com.electric.chargingpile.util.JsonUtils; import com.electric.chargingpile.util.LoadingDialog; import com.electric.chargingpile.util.ToastUtil; import com.electric.chargingpile.util.Util; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.compress.Luban; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.umeng.analytics.MobclickAgent; import com.upyun.library.common.UploadEngine; import com.upyun.library.listener.UpCompleteListener; import com.upyun.library.listener.UpProgressListener; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.jpush.android.api.JPushInterface; import okhttp3.Call; public class PublishVideoTopicActivity extends Activity implements OnClickListener { private static final String TAG = "PublishVideoTopicActivity"; Context mContext; private ImageView mPublishtopicBack; private TextView mPublishtopicPublish; private EditText mPublishtopicCon; private ImageView mPublishtopicGv; private TextView mPublishtopicChooseTopic; private TextView mPublishtopicChoosePreview; private TextView mPublishtopicWordNum; private ImageView mPublishTopicDe; private RelativeLayout mItemVideoLl; private ImageView mItemVideo; private View mItemVideoDelete; public static final String CACHE_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/cdz"; public static final String IMAGE_CACHE = CACHE_DIR + "/cache/image/"; LocalMedia media; ProgressDialog uploadDialog; private PublishItemSerializable intentData; private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra("message"); if ("take_video".equals(message)) { MobclickAgent.onEvent(context, "1009"); } else if ("preview_video".equals(message)) { MobclickAgent.onEvent(context, "1011"); } else if ("finish_preview_video".equals(message)) { MobclickAgent.onEvent(context, "1012"); } else if ("cancel_choosed_video".equals(message)) { MobclickAgent.onEvent(context, "1013"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_publishtopic); mContext = this; uploadDialog = new ProgressDialog(this); uploadDialog.setMessage("视频上传中..."); uploadDialog.setCanceledOnTouchOutside(false); BarColorUtil.initStatusBarColor(PublishVideoTopicActivity.this); LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, new IntentFilter("publish-video-topic-activity")); initView(); } private void initView() { intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data"); mPublishtopicBack = (ImageView) findViewById(R.id.publishtopic_back); mPublishtopicPublish = (TextView) findViewById(R.id.publishtopic_publish); mPublishtopicCon = (EditText) findViewById(R.id.publishtopic_con); mPublishtopicGv = (ImageView) findViewById(R.id.item_choose_video); mPublishtopicChooseTopic = (TextView) findViewById(R.id.publishtopic_choose_topic); mPublishtopicChoosePreview = (TextView) findViewById(R.id.publishtopic_choose_preview); mPublishtopicWordNum = (TextView) findViewById(R.id.publishtopic_word_num); mPublishTopicDe = (ImageView) findViewById(R.id.publishtopic_choose_topic_de); mItemVideoLl = (RelativeLayout) findViewById(R.id.item_video_ll); mItemVideo = (ImageView) findViewById(R.id.item_video); mItemVideoDelete = (View) findViewById(R.id.item_video_delete); if (intentData.getFrom().equals(PublishItemsActivity.FROM_TOPIC_DETAIL)) { chatRecommendBean = new ChatRecommendBean(); chatRecommendBean.topicId = Long.parseLong(intentData.getTopicId()); mPublishtopicChooseTopic.setText(intentData.getName()); mPublishTopicDe.setVisibility(View.VISIBLE); } mPublishtopicCon.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (b) { // 获得焦点 MobclickAgent.onEvent(getApplicationContext(), "1007"); } } }); mPublishtopicCon.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { String s = mPublishtopicCon.getText().toString().trim(); if (s.length() > 500) { mPublishtopicCon.setText(s.subSequence(0, 500)); mPublishtopicCon.setSelection(500); } updatePublishBtn(); if (TextUtils.isEmpty(s)) { mPublishtopicWordNum.setText("0/500"); } else { mPublishtopicWordNum.setText(s.length() + "/500"); } } }); mPublishtopicBack.setOnClickListener(this); mPublishtopicPublish.setOnClickListener(this); mPublishtopicChoosePreview.setOnClickListener(this); mPublishtopicChooseTopic.setOnClickListener(this); mPublishTopicDe.setOnClickListener(this); mItemVideoDelete.setOnClickListener(this); mPublishtopicGv.setOnClickListener(this); } private void updatePublishBtn() { if (null != media) { mPublishtopicPublish.setEnabled(true); mPublishtopicPublish.setBackgroundColor(Color.parseColor("#02b637")); } else { mPublishtopicPublish.setEnabled(false); mPublishtopicPublish.setBackgroundColor(Color.parseColor("#9ed3ae")); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.publishtopic_back: // 左上返回按钮事件 showDialogToExit(); break; case R.id.publishtopic_publish: // 右上发布事件 if (media == null) { ToastUtils.showLong("请选择视频!"); return; } MobclickAgent.onEvent(getApplicationContext(), "1035"); uploadDialog.show(); getYouPaiData(); break; case R.id.publishtopic_choose_topic: // 选择话题事件 MobclickAgent.onEvent(getApplicationContext(), "1031"); mPublishtopicCon.clearFocus(); startActivityForResult(new Intent(this, TopicActivity.class), reqTopic); break; case R.id.publishtopic_choose_preview: // 预览事件 暂时隐藏 break; case R.id.publishtopic_choose_topic_de: // 取消选择话题事件 MobclickAgent.onEvent(getApplicationContext(), "1034"); mPublishtopicChooseTopic.setText("# 选择话题"); mPublishTopicDe.setVisibility(View.GONE); chatRecommendBean = null; break; case R.id.item_choose_video: // 选择视频事件 MobclickAgent.onEvent(getApplicationContext(), "1008"); mPublishtopicCon.clearFocus(); PictureSelector.create(this) .openGallery(PictureMimeType.ofVideo())// 全部.PictureMimeType.ofAll()、图片.ofImage()、app_talk_video_icon.ofVideo() .theme(R.style.picture_default_style)// 主题样式设置 具体参考 libray中values/styles .maxSelectNum(9)// 最大图片选择数量 .minSelectNum(1)// 最小选择数量 .imageSpanCount(4)// 每行显示个数 .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE : PictureConfig.SINGLE .previewImage(true)// 是否可预览图片 .previewVideo(true)// 是否可预览视频 .enablePreviewAudio(true)// 是否预览音频 .isCamera(true)// 是否显示拍照按钮 .isZoomAnim(true)// 图片列表点击 缩放效果 默认true .setOutputCameraPath(IMAGE_CACHE)// 自定义拍照保存路径 .compress(true)// 是否压缩 .compressMode(PictureConfig.LUBAN_COMPRESS_MODE)//系统自带 or 鲁班压缩 PictureConfig.SYSTEM_COMPRESS_MODE or LUBAN_COMPRESS_MODE .glideOverride(160, 160)// glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度 .isGif(false)// 是否显示gif图片 .openClickSound(false)// 是否开启点击声音 .compressGrade(Luban.CUSTOM_GEAR) .compressMaxKB(1024)//压缩最大值kb compressGrade()为Luban.CUSTOM_GEAR有效 .minimumCompressSize(500) //add by tanhaiqin, 图片大小 <= 500KB(数字可变) 不需要压缩 .videoSecond(2 * 60)// 显示多少秒以内的视频 .recordVideoSecond(15)//录制视频秒数 默认60秒 .forResult(PictureConfig.CHOOSE_REQUEST); break; case R.id.item_video_delete: // 删除视频事件 MobclickAgent.onEvent(getApplicationContext(), "1014"); mItemVideoLl.setVisibility(View.GONE); mPublishtopicGv.setVisibility(View.VISIBLE); media = null; updatePublishBtn(); break; default: break; } } private void getYouPaiData() { String url = MainApplication.urlNew + "/topic/sign.do"; if (TextUtils.isEmpty(media.fName)) { ToastUtil.showToast(getApplicationContext(), "请重新选择视频", Toast.LENGTH_SHORT); return; } Map map = new HashMap<>(); map.put("fileNames", media.fName); map.put("targetType", ChatRecommendBean.TARGET_TYPE_VIDEO + ""); CommonParams.addCommonParams(map); OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT); uploadDialog.dismiss(); } @Override public void onResponse(String response) { String code = JsonUtils.getKeyResult(response, "code"); String desc = JsonUtils.getKeyResult(response, "desc"); if ("1000".equals(code)) { String data = JsonUtils.getKeyResult(response, "data"); ArrayList signBeans = (ArrayList) JsonUtils.parseToObjectList(data, AuthSignBean.class); if (null != signBeans && signBeans.size() > 0) { String sign = signBeans.get(0).sign; String policy = signBeans.get(0).policy; formUpload(media.getPath(), sign, policy); } } else { ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT); uploadDialog.dismiss(); } } }); } /** * 表单上传 * * @param SAMPLE_PIC_FILE * @param sign * @param policyServer */ private void formUpload(String SAMPLE_PIC_FILE, String sign, String policyServer) { File temp = new File(SAMPLE_PIC_FILE); // //进度回调,可为空 UpProgressListener progressListener = new UpProgressListener() { @Override public void onRequestProgress(long bytesWrite, long contentLength) { } }; //结束回调,不可为空 UpCompleteListener completeListener = new UpCompleteListener() { @Override public void onComplete(boolean isSuccess, String result) { if (isSuccess) { VideoUploadResult videoUploadResult = new VideoUploadResult(result); requestPublishServer("[" + videoUploadResult.formatResult() + "]"); } else { ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT); uploadDialog.dismiss(); MobclickAgent.onEvent(getApplicationContext(), "1037"); } } }; //表单上传(服务器签名方式) UploadEngine.getInstance().formUpload(temp, policyServer, "d1evvideo01", sign, completeListener, progressListener); } private void requestPublishServer(String urls) { String url = MainApplication.urlNew + "/topic/publish.do"; Map map = new HashMap<>(); map.put("content", mPublishtopicCon.getText().toString().trim()); map.put("urls", Base64.encode(urls.getBytes()).replaceAll("\\s*", "")); if (chatRecommendBean != null) { map.put("topicId", chatRecommendBean.topicId + ""); } map.put("targetType", ChatRecommendBean.TARGET_TYPE_VIDEO + ""); CommonParams.addCommonParams(map); OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT); uploadDialog.dismiss(); MobclickAgent.onEvent(getApplicationContext(), "1037"); } @Override public void onResponse(String response) { String code = JsonUtils.getKeyResult(response, "code"); if ("1000".equals(code)) { // 视频发布成功 ToastUtil.showToast(getApplicationContext(), "发布成功", Toast.LENGTH_SHORT); if (intentData.getFrom().equals(PublishItemsActivity.FROM_CHAT_HOME)) { startActivity(new Intent(getApplicationContext(), ChatActivity.class)); } else { startActivity(new Intent(getApplicationContext(), TopicDetailActivity.class)); } MobclickAgent.onEvent(getApplicationContext(), "1036"); } else { String desc = JsonUtils.getKeyResult(response, "desc"); ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT); MobclickAgent.onEvent(getApplicationContext(), "1037"); } uploadDialog.dismiss(); } }); } final int reqTopic = 100; ChatRecommendBean chatRecommendBean = null; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == reqTopic && resultCode == -100) { // 选择话题完成 chatRecommendBean = (ChatRecommendBean) data.getSerializableExtra("topic"); if (chatRecommendBean != null) { mPublishtopicChooseTopic.setText(Html.fromHtml(chatRecommendBean.name)); mPublishTopicDe.setVisibility(View.VISIBLE); } } else if (requestCode == PictureConfig.CHOOSE_REQUEST && resultCode == RESULT_OK) { List selectList = PictureSelector.obtainMultipleResult(data); if (selectList != null && selectList.size() > 0) { MobclickAgent.onEvent(getApplicationContext(), "1010"); media = selectList.get(0); String deviceId = JPushInterface.getUdid(MainApplication.context); media.fName = DateUtils.getSimpleCurrentDate(); if (TextUtils.isEmpty(deviceId)) { media.fName += "_" + Util.getRandom(15); } else { media.fName += "_" + deviceId; } String path = media.getPath(); if (TextUtils.isEmpty(path)) { media.fName = ""; } else { String suffix = path.substring(path.lastIndexOf(".") + 1); media.fName += "." + suffix; } if (TextUtils.isEmpty(media.getPath())) { return; } if (!fileIsExists(media.getPath())) { Log.e("yopic", "文件可能不存在了~"); return; } if (isDestroyed()) { return; } Glide.with(this) .load(Uri.fromFile(new File(media.getPath()))) .apply(new RequestOptions().centerCrop()) .into(mItemVideo); mItemVideoLl.setVisibility(View.VISIBLE); mPublishtopicGv.setVisibility(View.GONE); updatePublishBtn(); Log.e("yopic", "TEST===> video path = " + media.getPath() + ", compressPath = " + media.getCompressPath() + ", height = " + media.getHeight() + ", width = " + media.getWidth()); } } } public static boolean fileIsExists(String strFile) { if (TextUtils.isEmpty(strFile)) { return false; } try { File f = new File(strFile); if (!f.exists()) { return false; } } catch (Exception e) { return false; } return true; } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver); super.onDestroy(); } private void showDialogToExit() { String s = mPublishtopicCon.getText().toString().trim(); if (s.length() > 0 || media != null) { AlertDialog.Builder builder = new AlertDialog.Builder(PublishVideoTopicActivity.this); builder.setTitle("离开发布页"); builder.setMessage("小主您是否要离开发布页呢?"); builder.setCancelable(false); builder.setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MobclickAgent.onEvent(getApplicationContext(), "1006"); finish(); } }); builder.setNegativeButton("继续编辑", null); builder.create().show(); } else { MobclickAgent.onEvent(getApplicationContext(), "1006"); finish(); } } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { showDialogToExit(); return true; } return false; } }