|
package com.electric.chargingpile.activity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.electric.chargingpile.R;
import com.electric.chargingpile.entity.CarBrandGroupEntity;
import com.electric.chargingpile.entity.CarSeriesEntity;
import com.electric.chargingpile.event.CarBrandEvent;
import com.electric.chargingpile.event.CarSerieEvent;
import com.electric.chargingpile.util.BarColorUtil;
import com.electric.chargingpile.util.FileUtils;
import com.electric.chargingpile.util.JsonUtils;
import com.electric.chargingpile.util.LoadingDialog;
import com.electric.chargingpile.util.ToastUtil;
import com.electric.chargingpile.view.TextImageView;
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zhihu.matisse.Matisse;
import com.zhihu.matisse.MimeType;
import com.zhihu.matisse.engine.impl.GlideEngine;
import com.zhihu.matisse.internal.entity.CaptureStrategy;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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 okhttp3.Call;
/**
* 车主认证
*/
public class CarOwnerCertificateActivity extends AppCompatActivity implements View.OnClickListener {
private static final int RC_ALBUM_PERM = 123;
private static final int REQUEST_CODE_CHOOSE = 342;
private Bitmap insertBitmap;
private String u_path = "";
private int drivingLicenseType = 1;
private ProgressDialog insertDialog;
private TextView nav_title;
private Button submit_btn;
private TextImageView driving_license_type_first;
private TextImageView driving_license_type_second;
private TextImageView driving_license_type_third;
private TextView add_car_model_btn;
private LoadingDialog loadDialog;
private ArrayList<CarBrandGroupEntity> groups;
private CarSeriesEntity carSeriesEntity;
private ConstraintLayout car_model_constraint_layout;
private ConstraintLayout car_model_selected_constraint_layout;
private ImageView car_icon;
private TextView car_name;
private TextView car_series;
private ConstraintLayout driving_license;
private ImageView driving_license_icon;
private ImageView driving_license_upload_icon;
private TextView driving_license_text_view;
private Drawable selected;
private Drawable normal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 禁止顶部固定部分滑动
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
setContentView(R.layout.activity_car_owner_certificate);
BarColorUtil.initStatusBarColor(CarOwnerCertificateActivity.this);
initViews();
brandListRequest(false);
add_car_model_btn.setVisibility(View.GONE);
EventBus.getDefault().register(this);
}
private void initViews() {
loadDialog = new LoadingDialog(this);
loadDialog.setCanceledOnTouchOutside(false);
insertDialog = new ProgressDialog(this);
insertDialog.setMessage("正在插入图片...");
insertDialog.setCanceledOnTouchOutside(false);
nav_title = findViewById(R.id.nav_title);
findViewById(R.id.iv_back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
add_car_model_btn = findViewById(R.id.add_car_model_btn);
car_model_constraint_layout = findViewById(R.id.car_model_constraint_layout);
car_model_selected_constraint_layout = findViewById(R.id.car_model_selected_constraint_layout);
add_car_model_btn.setOnClickListener(this);
car_model_selected_constraint_layout.setOnClickListener(this);
car_icon = findViewById(R.id.car_icon);
car_name = findViewById(R.id.car_name);
car_series = findViewById(R.id.car_series);
driving_license = findViewById(R.id.driving_license);
driving_license.setOnClickListener(this);
driving_license_icon = findViewById(R.id.driving_license_icon);
driving_license_upload_icon = findViewById(R.id.driving_license_upload_icon);
driving_license_text_view = findViewById(R.id.driving_license_text_view);
driving_license_type_first = findViewById(R.id.driving_license_type_first);
driving_license_type_second = findViewById(R.id.driving_license_type_second);
driving_license_type_third = findViewById(R.id.driving_license_type_third);
driving_license_type_first.setOnClickListener(this);
driving_license_type_second.setOnClickListener(this);
driving_license_type_third.setOnClickListener(this);
selected = getResources().getDrawable(R.drawable.icon_radio_selected, null);
selected.setBounds(0, 0, selected.getMinimumWidth(), selected.getMinimumHeight());
normal = getResources().getDrawable(R.drawable.icon_radio_normal, null);
normal.setBounds(0, 0, normal.getMinimumWidth(), normal.getMinimumHeight());
submit_btn = findViewById(R.id.submit_btn);
submit_btn.setOnClickListener(this);
}
private void brandListRequest(Boolean showLoading) {
if (showLoading)
loadDialog.show();
// https://www.jianshu.com/p/10382cc71127
// String url = "https://api.touchev.com:83/car/api/v1000/brand/list.do";
String url = "http://car.d1ev.com/car/api/v1000/brand/list.do";
// String url = MainApplication.url + "/zhannew/basic/web/index.php/member/get-score?id=" + MainApplication.userId +
// "&phone=" + MainApplication.userPhone + "&password=" + MainApplication.userPassword + "&token=" + "xxxxxx";
OkHttpUtils.get().url(url).build().connTimeOut(5000).readTimeOut(5000).execute(new StringCallback() {
@Override
public void onError(Call call, Exception e) {
Toast.makeText(getApplicationContext(), "网络不给力,请检查网络状态", Toast.LENGTH_SHORT).show();
loadDialog.dismiss();
add_car_model_btn.setVisibility(View.VISIBLE);
}
@Override
public void onResponse(String response) {
loadDialog.dismiss();
add_car_model_btn.setVisibility(View.VISIBLE);
String code = JsonUtils.getKeyResult(response, "code");
String desc = JsonUtils.getKeyResult(response, "desc");
if ("1000".equals(code)) {
String data = JsonUtils.getKeyResult(response, "data");
Gson gson = new Gson();
groups = gson.fromJson(data, new TypeToken<ArrayList<CarBrandGroupEntity>>() {
}.getType());
if (groups == null || groups.size() == 0) {
if (showLoading)
ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
} else {
if (showLoading) {
EventBus.getDefault().postSticky(new CarBrandEvent(groups));
startActivity(new Intent(CarOwnerCertificateActivity.this, CarBrandActivity.class));
}
}
} else {
if (showLoading)
ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT);
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.add_car_model_btn:
case R.id.car_model_selected_constraint_layout:
if (groups == null || groups.size() == 0) {
brandListRequest(true);
} else {
EventBus.getDefault().postSticky(new CarBrandEvent(groups));
startActivity(new Intent(CarOwnerCertificateActivity.this, CarBrandActivity.class));
}
break;
case R.id.driving_license:
Matisse.from(CarOwnerCertificateActivity.this)
.choose(MimeType.of(MimeType.JPEG, MimeType.PNG))
.showSingleMediaType(true)
.countable(true)
.maxSelectable(1)
.capture(true)
.captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
.imageEngine(new GlideEngine())
.forResult(REQUEST_CODE_CHOOSE);
break;
case R.id.driving_license_type_first:
drivingLicenseType = 1;
driving_license_type_first.setCompoundDrawables(selected, null, null, null);
driving_license_type_second.setCompoundDrawables(normal, null, null, null);
driving_license_type_third.setCompoundDrawables(normal, null, null, null);
break;
case R.id.driving_license_type_second:
drivingLicenseType = 2;
driving_license_type_first.setCompoundDrawables(normal, null, null, null);
driving_license_type_second.setCompoundDrawables(selected, null, null, null);
driving_license_type_third.setCompoundDrawables(normal, null, null, null);
break;
case R.id.driving_license_type_third:
drivingLicenseType = 3;
driving_license_type_first.setCompoundDrawables(normal, null, null, null);
driving_license_type_second.setCompoundDrawables(normal, null, null, null);
driving_license_type_third.setCompoundDrawables(selected, null, null, null);
break;
case R.id.submit_btn:
if (carSeriesEntity == null) {
ToastUtil.showToast(this, "请添加车型" + drivingLicenseType, Toast.LENGTH_SHORT);
return;
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onCarSeriesMessage(CarSerieEvent event) {
if (event != null && event.getCarSeriesEntity() != null) {
carSeriesEntity = event.getCarSeriesEntity();
car_model_constraint_layout.setVisibility(View.GONE);
car_model_selected_constraint_layout.setVisibility(View.VISIBLE);
car_name.setText(carSeriesEntity.getBrandName());
car_series.setText(carSeriesEntity.getSeriesName());
Glide.with(CarOwnerCertificateActivity.this).load(carSeriesEntity.getIcon()).placeholder(android.R.color.white).fitCenter().into(car_icon);
} else {
carSeriesEntity = null;
car_model_constraint_layout.setVisibility(View.VISIBLE);
car_model_selected_constraint_layout.setVisibility(View.GONE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (data != null) {
if (requestCode == REQUEST_CODE_CHOOSE) {
insertImagesSync(data);
}
}
}
}
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;
}
/**
* 异步方式插入图片
*
* @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 {
List<Uri> uriList = Matisse.obtainResult(data);
Uri uri = uriList.get(0);
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
bitmap = FileUtils.rotateIfRequired(file, bitmap);
bitmap = imageZoom(bitmap);
insertBitmap = bitmap;
u_path = SDCardUtil.saveToSdCard(bitmap);
subscriber.onNext(u_path);
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() {
insertDialog.dismiss();
driving_license_icon.setImageBitmap(insertBitmap);
driving_license_upload_icon.setVisibility(View.GONE);
driving_license_text_view.setVisibility(View.GONE);
// uploadPic(insertBitmap, u_path); // TODO EditAnswerActivity
}
@Override
public void onError(Throwable e) {
insertDialog.dismiss();
ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT);
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String imagePath) {
}
});
}
}
|