|
package com.electric.chargingpile.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
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.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.electric.chargingpile.R;
import com.electric.chargingpile.application.MainApplication;
import com.electric.chargingpile.data.AuthSignBean;
import com.electric.chargingpile.data.ChatRecommendBean;
import com.electric.chargingpile.data.PhotoUploadResult;
import com.electric.chargingpile.data.PublishItemSerializable;
import com.electric.chargingpile.data.UploadPic;
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.DensityUtil;
import com.electric.chargingpile.util.ImageItem;
import com.electric.chargingpile.util.JsonUtils;
import com.electric.chargingpile.util.LoadingDialog;
import com.electric.chargingpile.util.PublicWay;
import com.electric.chargingpile.util.Res;
import com.electric.chargingpile.util.ToastUtil;
import com.electric.chargingpile.util.Util;
import com.electric.chargingpile.view.LoggerDefault;
import com.google.gson.Gson;
import com.luck.picture.lib.tools.ScreenUtils;
import com.umeng.analytics.MobclickAgent;
import com.upyun.library.common.ParallelUploader;
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.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.jpush.android.api.JPushInterface;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import me.iwf.photopicker.PhotoPicker;
import okhttp3.Call;
import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions;
/**
* @desc : 发布话题
*/
public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
private static final String TAG = "PublishPicTopicActivity";
private static final int PIC_NUM = 9;
private ImageView ivBack;
private TextView tv_right;
private static String PHOTO_FILE_NAME = "";
private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
private GridView noScrollgridview;
private PopupWindow pop = null;
private LinearLayout ll_popup;
private File tempFile;
Bitmap bm = null;
private static final int PHOTO_REQUEST_CAMERA = 1;
private static final int PHOTO_REQUEST_GALLERY = 2;
private static final int PHOTO_REQUEST_CUT = 3;
private GridAdapter adapter;
private EditText et_context;
private TextView tvSubmit;
private ImageView point;
private ImageView mPublishTopicDe;
private TextView tv_point;
private RelativeLayout rl_point;
private android.view.animation.Animation animation;
InputMethodManager imm;
private String userContact;
private LinearLayout ll_contact;
List<UploadPic> list;
String json;
LoadingDialog dialog;
private ProgressDialog insertDialog;
private static final int RC_ALBUM_PERM = 123;
private int screenWidth;
private int itemWidth;
private TextView publishtopic_choose_topic, mPublishtopicChooseTopic, publishtopic_word_num;
private String topicId = "";
//空间名
public static String SPACE = "d1evcom01-fs";
private String policy = "";
private String OPERATER = "d1evvideo01";
@SuppressLint("SdCardPath")
private ParallelUploader parallelUploader;
private ProgressDialog uploadDialog;
private PublishItemSerializable intentData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_publish_picture_content);
BarColorUtil.initStatusBarColor(PublishPicTopicActivity.this);
initView();
Res.init(this);
PublicWay.activityList.add(this);
long appTime1 = System.currentTimeMillis() / 1000;
PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
dialog = new LoadingDialog(this);
dialog.setCanceledOnTouchOutside(false);
Init();
initYouPaiYun();
}
/**
* 初始化 又拍云
*/
private void initYouPaiYun() {
//初始化断点续传 (服务端签名可用)
if (parallelUploader == null) {
parallelUploader = new ParallelUploader();
}
//图文路径
// String p = "/d/file/liaoliao/img/" + y + "/" + m + "/" + d;
//视频路径
// p = "/d/file/liaoliao/video/" + y + "/" + m + "/" + d;
}
private void initView() {
intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data");
screenWidth = ScreenUtils.getScreenWidth(this);
itemWidth = (int) ((screenWidth - DensityUtil.dip2px(this, 15 * 2 + 10 * 2)) / 3f);
uploadDialog = new ProgressDialog(this);
uploadDialog.setMessage("图片上传中...");
uploadDialog.setCanceledOnTouchOutside(false);
mPublishTopicDe = (ImageView) findViewById(R.id.publishtopic_choose_topic_de);
mPublishTopicDe.setOnClickListener(this);
mPublishtopicChooseTopic = (TextView) findViewById(R.id.publishtopic_choose_topic);
publishtopic_choose_topic = (TextView) findViewById(R.id.publishtopic_choose_topic);
publishtopic_word_num = (TextView) findViewById(R.id.publishtopic_word_num);
publishtopic_choose_topic.setOnClickListener(this);
insertDialog = new ProgressDialog(this);
insertDialog.setMessage("正在插入图片...");
insertDialog.setCanceledOnTouchOutside(false);
tv_right = (TextView) findViewById(R.id.tv_right);
tv_right.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (imm.isActive()) {
view = getWindow().peekDecorView();
if (view != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
// dialog.show();
uploadDialog.show();
//获取又拍云数据
getYouPaiData();
}
});
rl_point = (RelativeLayout) findViewById(R.id.rl_point);
tv_point = (TextView) findViewById(R.id.tv_point);
animation = AnimationUtils.loadAnimation(PublishPicTopicActivity.this, R.anim.nn);
point = (ImageView) findViewById(R.id.tv_one);
ivBack = (ImageView) findViewById(R.id.iv_back);
ivBack.setOnClickListener(this);
et_context = (EditText) findViewById(R.id.et_context);
et_context.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
Log.d(TAG, "onFocusChange: ");
}
});
et_context.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 = et_context.getText().toString().trim();
if (s.length() > 500) {
et_context.setText(s.subSequence(0, 500));
et_context.setSelection(500);
}
// if (containsEmoji(s)) {
// tv_right.setEnabled(false);
// tv_right.setTextColor(getResources().getColor(R.color.ui_68));
// ToastUtil.showToast(getApplicationContext(), "不支持输入表情", Toast.LENGTH_SHORT);
// return;
// }
// if (s.length() > 500) {
// tv_right.setEnabled(false);
// tv_right.setBackgroundColor(Color.parseColor("color_9ed3ae"));
//// tv_right.setTextColor(getResources().getColor(R.color.ui_68));
// ToastUtil.showToast(getApplicationContext(), "输入字数不能超过500", Toast.LENGTH_SHORT);
// return;
// }
// if (!s.trim().isEmpty() && s.length() > 0 && null != Bimp.tempSelectBitmap && Bimp.tempSelectBitmap.size() > 0) {
// tv_right.setEnabled(true);
// tv_right.setBackgroundColor(Color.parseColor("#02b637"));
// } else {
// tv_right.setEnabled(false);
// tv_right.setBackgroundColor(Color.parseColor("#9ed3ae"));
// }
if (TextUtils.isEmpty(s))
publishtopic_word_num.setText("0");
else
publishtopic_word_num.setText(s.length() + "");
}
});
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
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);
}
}
private void getYouPaiData() {
if (null == Bimp.tempSelectBitmap)
return;
String fileNames = "";
for (int i = 0; i < Bimp.tempSelectBitmap.size(); i++) {
ImageItem imageItem = Bimp.tempSelectBitmap.get(i);
// String fileNameDir = Bimp.tempSelectBitmap.get(i).getImagePath();
// String fileName = fileNameDir.substring(fileNameDir.lastIndexOf("/") + 1);
if (TextUtils.isEmpty(fileNames)) {
fileNames = imageItem.fName;
} else {
fileNames += "," + imageItem.fName;
}
}
String url = MainApplication.urlNew + "/topic/sign.do";
Map<String, String> map = new HashMap<>();
map.put("fileNames", fileNames);
map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + "");
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) {
uploadDialog.dismiss();
ToastUtil.showToast(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT);
}
@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) {
publishCount = signBeans.size();
for (int i = 0; i < publishCount; i++) {
String sign = signBeans.get(i).sign;
String policy = signBeans.get(i).policy;
formUpload(Bimp.tempSelectBitmap.get(i).getImagePath(), sign, policy);
}
}
} else if ("8010".equals(code)) {
uploadDialog.dismiss();
startActivity(new Intent(getApplicationContext(), LoginActivity.class));
ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
} else {
uploadDialog.dismiss();
ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
}
}
});
}
private ArrayList<String> publishArray = new ArrayList<>();
private int publishCount = 0;
final int reqTopic = 100;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.publishtopic_choose_topic_de: // 取消选择的话题
mPublishtopicChooseTopic.setText("# 选择话题");
mPublishTopicDe.setVisibility(View.GONE);
chatRecommendBean = null;
break;
case R.id.publishtopic_choose_topic: // 选择话题
startActivityForResult(new Intent(this, TopicActivity.class), reqTopic);
break;
case R.id.iv_back:
if (imm.isActive()) {
View view = getWindow().peekDecorView();
if (view != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
showDialogToExit();
break;
}
}
ChatRecommendBean chatRecommendBean = null;
@Override
protected void onPause() {
super.onPause();
// requestManager.removeOnRequestFinishedListener(this);
MobclickAgent.onPause(this);
}
@Override
protected void onResume() {
super.onResume();
// requestManager.addOnRequestFinishedListener(this);
MobclickAgent.onResume(this);
}
private File getFile(String path) {
File f = new File(path);
if (!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return f;
}
private static String getPath(String path) {
File f = new File(path);
if (!f.exists()) {
f.mkdirs();
}
return f.getAbsolutePath();
}
private boolean hasSdcard() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
public void Init() {
pop = new PopupWindow(PublishPicTopicActivity.this);
View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
pop.setBackgroundDrawable(new BitmapDrawable());
pop.setFocusable(true);
pop.setOutsideTouchable(true);
pop.setContentView(view);
final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
parent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pop.dismiss();
ll_popup.clearAnimation();
}
});
bt1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
pop.dismiss();
ll_popup.clearAnimation();
if (MainScanActivity.isCameraUseable()) {
photo();
} else {
ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
}
}
});
bt2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(PublishPicTopicActivity.this,
AlbumActivityFeedback.class);
startActivity(intent);
overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
pop.dismiss();
ll_popup.clearAnimation();
}
});
bt3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
pop.dismiss();
ll_popup.clearAnimation();
}
});
noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
adapter = new GridAdapter(this);
adapter.update();
noScrollgridview.setAdapter(adapter);
noScrollgridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
imm.hideSoftInputFromWindow(arg1.getWindowToken(), 0);
if (arg2 == Bimp.tempSelectBitmap.size()) {
permissionTask();
} else {
Intent intent = new Intent(PublishPicTopicActivity.this,
GalleryActivityFeedback.class);
intent.putExtra("position", "1");
intent.putExtra("type", "1");
intent.putExtra("ID", arg2);
startActivity(intent);
}
}
});
}
/**
* 调用图库选择
*/
private void callGallery() {
Log.e(TAG, "callGallery: " + (Bimp.max - Bimp.tempSelectBitmap.size()));
//调用第三方图库选择
PhotoPicker.builder()
.setPhotoCount(PIC_NUM - Bimp.tempSelectBitmap.size())//可选择图片数量
.setShowCamera(true)//是否显示拍照按钮
.setShowGif(true)//是否显示动态图
.setPreviewEnabled(true)//是否可以预览
.start(this, PhotoPicker.REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, final 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);
}
}
if (resultCode == RESULT_OK) {
if (data != null) {
if (requestCode == 1) {
//处理调用系统图库
} else if (requestCode == PhotoPicker.REQUEST_CODE) {
//异步方式插入图片
insertImagesSync(data);
}
}
}
}
/**
* 异步方式插入图片
*
* @param data
*/
private void insertImagesSync(final Intent data) {
insertDialog.show();
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
try {
ArrayList<String> photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
//可以同时插入多张图片
int i = 0;
for (String imagePath : photos) {
i++;
Log.e(TAG, "call: imagePath " + imagePath);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);//压缩图片
bitmap = imageZoom(bitmap);
ImageItem takePhoto = new ImageItem();
String deviceId = JPushInterface.getUdid(MainApplication.context);
takePhoto.fName = DateUtils.getSimpleCurrentDate();
if (TextUtils.isEmpty(deviceId)) {
takePhoto.fName += "_" + Util.getRandom(15);
} else {
takePhoto.fName += "_" + deviceId;
}
takePhoto.fName += "_00" + i;
String suffix = imagePath.substring(imagePath.lastIndexOf(".") + 1);
takePhoto.fName += "." + suffix;
takePhoto.setBitmap(bitmap);
takePhoto.setImagePath(imagePath);
Bimp.tempSelectBitmap.add(takePhoto);
subscriber.onNext(imagePath);
}
subscriber.onComplete();
} catch (Exception e) {
e.printStackTrace();
subscriber.onError(e);
}
}
})
.subscribeOn(Schedulers.io())//生产事件在io
.observeOn(AndroidSchedulers.mainThread())//消费事件在UI线程
.subscribe(new Observer<String>() {
@Override
public void onComplete() {
Log.e(TAG, "onCompleted: -------------");
insertDialog.dismiss();
adapter.update();
}
@Override
public void onError(Throwable e) {
insertDialog.dismiss();
Log.e(TAG, "onError: " + "图片插入失败:" + e.getMessage());
ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT);
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String imagePath) {
}
});
}
public class GridAdapter extends BaseAdapter {
private LayoutInflater inflater;
private int selectedPosition = -1;
private boolean shape;
public boolean isShape() {
return shape;
}
public void setShape(boolean shape) {
this.shape = shape;
}
public GridAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public void update() {
loading();
}
public int getCount() {
if (Bimp.tempSelectBitmap.size() == 9) {
return 9;
}
return (Bimp.tempSelectBitmap.size() + 1);
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
public void setSelectedPosition(int position) {
selectedPosition = position;
}
public int getSelectedPosition() {
return selectedPosition;
}
public View getView(final int position, View convertView, ViewGroup parent) {
GridAdapter.ViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_publish_picture,
parent, false);
holder = new GridAdapter.ViewHolder();
holder.image = (ImageView) convertView
.findViewById(R.id.item_publish_image);
holder.imageDelete = convertView.findViewById(R.id.item_publish_image_delete);
convertView.setTag(holder);
} else {
holder = (GridAdapter.ViewHolder) convertView.getTag();
}
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.image.getLayoutParams();
params.width = itemWidth;
params.height = itemWidth;
if (position % 3 != 0) {
params.leftMargin = DensityUtil.dip2px(getApplicationContext(), 10);
}
holder.image.setLayoutParams(params);
if (position == Bimp.tempSelectBitmap.size()) {
holder.imageDelete.setVisibility(View.GONE);
holder.image.setImageResource(R.drawable.add_picture);
holder.image.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
holder.image.setBackgroundColor(Color.parseColor("#f5f5f5"));
if (position == 9) {
holder.image.setVisibility(View.GONE);
}
} else {
holder.imageDelete.setVisibility(View.VISIBLE);
holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap());
holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.image.setBackgroundColor(Color.WHITE);
}
holder.imageDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Bimp.tempSelectBitmap.remove(position);
Bimp.max--;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
});
return convertView;
}
public class ViewHolder {
public ImageView image;
public ImageView imageDelete;
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (null != Bimp.tempSelectBitmap && Bimp.tempSelectBitmap.size() > 0) {
tv_right.setEnabled(true);
tv_right.setBackgroundColor(Color.parseColor("#02b637"));
} else {
tv_right.setEnabled(false);
tv_right.setBackgroundColor(Color.parseColor("#9ed3ae"));
}
adapter.notifyDataSetChanged();
break;
}
super.handleMessage(msg);
}
};
public void loading() {
new Thread(new Runnable() {
public void run() {
while (true) {
if (Bimp.max == Bimp.tempSelectBitmap.size()) {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
break;
} else {
Bimp.max += 1;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
}
}
}).start();
}
}
public void photo() {
if (hasSdcard()) {
int currentapiVersion = Build.VERSION.SDK_INT;
Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
}
}
@Override
protected void onRestart() {
adapter.update();
super.onRestart();
}
@Override
protected void onDestroy() {
super.onDestroy();
Bimp.tempSelectBitmap.clear();
Bimp.max = 0;
}
private Bitmap imageZoom(Bitmap bm) {
// 图片允许最大空间 单位:KB
double maxSize = 200.00;
// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
// 将字节换成KB
double mid = b.length / 1024;
// 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
if (mid > maxSize) {
// 获取bitmap大小 是允许最大大小的多少倍
double i = mid / maxSize;
// 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍
// (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
bm = zoomImage(bm, bm.getWidth() / Math.sqrt(i), bm.getHeight() / Math.sqrt(i));
}
return bm;
}
public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) {
// 获取这个图片的宽和高
float width = bgimage.getWidth();
float height = bgimage.getHeight();
// 创建操作图片用的matrix对象
Matrix matrix = new Matrix();
// 计算宽高缩放率
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 缩放图片动作
matrix.postScale(scaleWidth, scaleHeight);
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
(int) height, matrix, true);
return bitmap;
}
/**
* 检测是否有emoji表情
*
* @param source
* @return
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}
/**
* 判断是否是Emoji
*
* @param codePoint 比较的单个字符
* @return
*/
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
(codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
&& (codePoint <= 0x10FFFF));
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
}
@AfterPermissionGranted(RC_ALBUM_PERM)
public void permissionTask() {
if (isPermissionOK()) {
callGallery();
} else {
EasyPermissions.requestPermissions(
this, "充电桩想要获取您的图片读取权限,是否允许?",
RC_ALBUM_PERM,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE);
}
}
private boolean isPermissionOK() {
return EasyPermissions.hasPermissions(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
);
}
/**
* 表单上传
*
* @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) {
// bp_form.setProgress((int) ((100 * bytesWrite) / contentLength));
// tv_form.setText((100 * bytesWrite) / contentLength + "%");
Log.e(TAG, (100 * bytesWrite) / contentLength + "%");
Log.e(TAG, bytesWrite + "::" + contentLength);
uploadDialog.setProgress((int) (100 * bytesWrite / contentLength));
}
};
//结束回调,不可为空
UpCompleteListener completeListener = new UpCompleteListener() {
@Override
public void onComplete(boolean isSuccess, String result) {
// tv_form.setText(isSuccess + ":" + result);
Log.e(TAG, isSuccess + result);
if (isSuccess) {
PhotoUploadResult photoUploadResult = new PhotoUploadResult(result);
publishArray.add(photoUploadResult.formatResult());
}
if (publishCount == publishArray.size()) {
String urls = "";
for (int i = 0; i < publishArray.size(); i++) {
if (TextUtils.isEmpty(urls))
urls = publishArray.get(i);
else
urls = urls + "," + publishArray.get(i);
}
requestPublishServer("[" + urls + "]");
}
}
};
//表单上传(服务器签名方式)
UploadEngine.getInstance().formUpload(temp, policyServer, OPERATER, sign, completeListener,
progressListener);
}
private void requestPublishServer(String urls) {
String url = MainApplication.urlNew + "/topic/publish.do";
Map<String, String> map = new HashMap<>();
map.put("content", et_context.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_IMAGE_TEXT + "");
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) {
uploadDialog.dismiss();
dialog.cancel();
publishArray.clear();
publishCount = 0;
ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT);
}
@Override
public void onResponse(String response) {
uploadDialog.dismiss();
dialog.cancel();
publishArray.clear();
publishCount = 0;
String code = JsonUtils.getKeyResult(response, "code");
String desc = JsonUtils.getKeyResult(response, "desc");
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));
}
} else {
ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
}
}
});
}
private void showDialogToExit() {
String s = et_context.getText().toString().trim();
if (s.length() > 0 || Bimp.tempSelectBitmap.size() > 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(PublishPicTopicActivity.this);
builder.setTitle("离开发布页");
builder.setMessage("小主您是否要离开发布页呢?");
builder.setCancelable(false);
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MobclickAgent.onEvent(getApplicationContext(), "1022");
finish();
}
});
builder.setNegativeButton("继续编辑", null);
builder.create().show();
} else {
MobclickAgent.onEvent(getApplicationContext(), "1022");
finish();
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
showDialogToExit();
return true;
}
return false;
}
}
|