|
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<String, String> 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<AuthSignBean> signBeans = (ArrayList<AuthSignBean>) 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<String, String> 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<LocalMedia> 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;
}
}
|