package com.hjx.parent; import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import androidx.core.content.FileProvider; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.google.gson.Gson; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjx.parent.bean.StudentBean; import com.prws.common.base.BaseActivity; import com.prws.common.base.BasePresenter; import com.prws.common.bean.ResponseResult; import com.prws.common.bean.Teacher; import com.prws.common.net.NetWorks; import com.prws.common.utils.LogUtil; import com.prws.common.utils.ScreenUtils; import com.prws.common.utils.SharedPreferencesUtil; import org.json.JSONObject; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.OnClick; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; public class EditStudentActivity extends BaseActivity { View view_2; View view_3; View view_4; View view_5; Button btn_next; TextView tv_name, tv_sex, tv_nian, tv_shen; @BindView(R.id.iv_avatar) ImageView iv_avatar; @BindView(R.id.tv_teacher) TextView tv_teacher; @BindView(R.id.iv_teacher) ImageView iv_teacher; @BindView(R.id.rl_teacher) RelativeLayout rl_teacher; @BindView(R.id.tv_bind) TextView tv_bind; @BindView(R.id.view_6) LinearLayout view_6; private static int CAMERA_REQUEST_CODE = 343; private static int ALBUM_REQUEST_CODE = 456; private static int CROP_REQUEST_CODE = 234; private static int BIND_TEACHER_CODE = 345; private File tempFile; private String path; StudentBean studentBean; private Teacher teacher; @Override protected int layoutResId() { return R.layout.activity_edit_stu; } @Override public Object getContract() { return null; } @Override public BasePresenter getPresenter() { return null; } @Override protected void initView() { view_2 = findViewById(R.id.view_2); view_3 = findViewById(R.id.view_3); view_4 = findViewById(R.id.view_4); view_5 = findViewById(R.id.view_5); tv_name = findViewById(R.id.tv_name); tv_sex = findViewById(R.id.tv_sex); tv_nian = findViewById(R.id.tv_nian); tv_shen = findViewById(R.id.tv_shen); btn_next = findViewById(R.id.btn_next); } @SuppressLint({"SetTextI18n", "UseCompatLoadingForDrawables"}) @Override protected void onStart() { super.onStart(); String name = (String) SharedPreferencesUtil.getData("setName", ""); String sex = (String) SharedPreferencesUtil.getData("setSex", ""); String nian = (String) SharedPreferencesUtil.getData("setNian", ""); String shen = (String) SharedPreferencesUtil.getData("setShen", ""); String xueq = (String) SharedPreferencesUtil.getData("setXueq", ""); btn_next.setTextColor(Color.WHITE); btn_next.setBackground(getResources().getDrawable(R.drawable.bg_solid_btn)); studentBean = new Gson().fromJson(getIntent().getStringExtra("student"), StudentBean.class); if (name != null && name.length() > 0) { studentBean.setNickName(name); } if (sex != null && sex.length() > 0) { studentBean.setGender(sex); } if (nian != null && nian.length() > 0) { studentBean.setGrade(nian); } if (xueq != null && xueq.length() > 0) { studentBean.setTerm(xueq); } if (shen != null && shen.length() > 0) { studentBean.setParentIdentity(shen); } tv_name.setText(studentBean.getNickName()); tv_nian.setText(studentBean.getGrade() + studentBean.getTerm()); tv_sex.setText(studentBean.getGender()); tv_shen.setText(studentBean.getParentIdentity()); if (!TextUtils.isEmpty(studentBean.getPhoto())) { RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 45)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(this).load(studentBean.getPhoto()).apply(options).into(iv_avatar); } else { iv_avatar.setImageResource("男".equals(studentBean.getGender()) ? R.mipmap.ic_avatar_male : R.mipmap.ic_avatar_female); } if (studentBean.getIsIntention() == 1) { rl_teacher.setVisibility(View.VISIBLE); tv_bind.setText("重新绑定"); tv_teacher.setText(studentBean.getTeacherName()); if (!TextUtils.isEmpty(studentBean.getTeacherAvatar())) { RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 25)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(this).load(studentBean.getTeacherAvatar()).apply(options).into(iv_teacher); } else { iv_teacher.setImageResource(R.mipmap.ic_teacher_female); } } else { rl_teacher.setVisibility(View.GONE); if ((studentBean.getState() != null && studentBean.getState() == 0)) { tv_bind.setText("待通过"); tv_bind.setTextColor(Color.parseColor("#FF3737")); view_6.setEnabled(false); } } } @Override protected void initListener() { view_2.setOnClickListener(view -> startActivity(NickActivity.class)); view_3.setOnClickListener(view -> startActivity(SexActivity.class)); view_4.setOnClickListener(view -> startActivity(NianActivity.class)); view_5.setOnClickListener(view -> startActivity(ShenActivity.class)); findViewById(R.id.tv_cancel).setOnClickListener(view -> onBackPressed()); btn_next.setOnClickListener(view -> { if (teacher != null || studentBean.getIsIntention() == 1 || (studentBean.getState() != null && studentBean.getState() == 0)) { editStudent(); } else { showDialog("温馨提示", "您还未绑定老师,是否绑定?", "去绑定", "暂不绑定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); showDialog("温馨提示", "您暂未绑定老师,如需绑定老师\n" + "请联系400-800-3813", "确定", "", null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { editStudent(); } }); } }, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(EditStudentActivity.this, AddTeacherActivity.class); startActivityForResult(intent, BIND_TEACHER_CODE); } }); } }); } @OnClick(R.id.view_6) public void toAddTeacher(View view) { Intent intent = new Intent(EditStudentActivity.this, AddTeacherActivity.class); startActivityForResult(intent, BIND_TEACHER_CODE); } public void editStudent() { Map map = new HashMap<>(); map.put("nickName", studentBean.getNickName()); map.put("gender", studentBean.getGender()); map.put("parentIdentity", studentBean.getParentIdentity()); map.put("term", studentBean.getTerm()); if (teacher != null) { map.put("teacherId", teacher.getId()); } map.put("stuId", studentBean.getStuId()); NetWorks.editStudent(NetWorks.getMapRequestBody(map), new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseResult responseResult) { try { boolean isSucceed = responseResult.getSuccess(); if (isSucceed) { finish(); } else { Toast.makeText(EditStudentActivity.this, responseResult.getMsg(), Toast.LENGTH_SHORT).show(); } } catch (Exception e) { } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override protected void initData() { } @Override public void onNetChanged(int netWorkState) { } private void cropPhoto(Uri uri) { Uri contentUri = Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg")); Intent intent = new Intent("com.android.camera.action.CROP"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //Android 7.0需要临时添加读取Url的权限, 添加此属性是为了解决:调用裁剪框时候提示:图片无法加载或者加载图片失败或者无法加载此图片 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true");//发送裁剪信号,去掉也能进行裁剪 intent.putExtra("scale", true);// 设置缩放 intent.putExtra("scaleUpIfNeeded", true);// 去黑边 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //上述两个属性控制裁剪框的缩放比例。 //当用户用手拉伸裁剪框时候,裁剪框会按照上述比例缩放。 intent.putExtra("outputX", 300);//属性控制裁剪完毕,保存的图片的大小格式。 intent.putExtra("outputY", 300);//你按照1:1的比例来裁剪的,如果最后成像是800*400,那么按照2:1的样式保存, intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出裁剪文件的格式 intent.putExtra("return-data", true);//是否返回裁剪后图片的Bitmap intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);//设置输出路径 startActivityForResult(intent, CROP_REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == CAMERA_REQUEST_CODE) { if (resultCode == RESULT_OK) { //用相机返回的照片去调用剪裁也需要对Uri进行处理 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".fileprovider", tempFile); cropPhoto(contentUri); } else { cropPhoto(Uri.fromFile(tempFile)); } } } else if (requestCode == ALBUM_REQUEST_CODE) { if (resultCode == RESULT_OK) { Uri uri = intent.getData(); cropPhoto(uri); } } else if (requestCode == CROP_REQUEST_CODE) { if (intent == null) { return; } Bundle bundle = intent.getExtras(); if (bundle != null) { //在这里获得了剪裁后的Bitmap对象,可以用于上传 Bitmap image = bundle.getParcelable("data"); //设置到ImageView上 //也可以进行一些保存、压缩等操作后上传 File file = saveImage("head_output", image); uploadAvatar(file); // Log.d("dsadsadsa",path); } } else if (requestCode == BIND_TEACHER_CODE && resultCode == 1000) { String t = intent.getStringExtra("teacher"); teacher = new Gson().fromJson(t, Teacher.class); rl_teacher.setVisibility(View.VISIBLE); tv_bind.setText("重新绑定"); tv_teacher.setText(teacher.getUserName()); if (!TextUtils.isEmpty(teacher.getPhoto())) { RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(EditStudentActivity.this, 20)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(EditStudentActivity.this).load(teacher.getPhoto()).apply(options).into(iv_teacher); } } } private void uploadAvatar(File file) { NetWorks.uploadStudentAvatar(file, studentBean.getStuId(), new Observer>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseResult> responseBody) { if (responseBody.getData() != null && responseBody.getCode() == 200) { String filePath = responseBody.getData().get("imageUrl"); RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(EditStudentActivity.this, 45)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(EditStudentActivity.this).load(filePath).apply(options).into(iv_avatar); } } @Override public void onError(Throwable e) { e.toString(); } @Override public void onComplete() { } }); } public File saveImage(String name, Bitmap bmp) { File appDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath()); if (!appDir.exists()) { appDir.mkdir(); } String fileName = name + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); return file; } catch (IOException e) { Log.d("dsadsadsa", e.getLocalizedMessage()); e.printStackTrace(); } return null; } private void getPicFromCamera() { //用于保存调用相机拍照后所生成的文件 tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg"); //跳转到调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //判断版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".fileprovider", tempFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri); } else { //否则使用Uri.fromFile(file)方法获取Uri intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); } startActivityForResult(intent, CAMERA_REQUEST_CODE); } /** * 从相册获取图片 */ private void getPicFromAlbm() { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE); } @Override protected void onDestroy() { super.onDestroy(); SharedPreferencesUtil.putData("setName", ""); SharedPreferencesUtil.putData("setSex", ""); SharedPreferencesUtil.putData("setNian", ""); SharedPreferencesUtil.putData("setShen", ""); SharedPreferencesUtil.putData("setXueq", ""); SharedPreferencesUtil.putData("grade", 0); } @OnClick(R.id.iv_avatar) public void showButtonDialog(View view) { BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.BottomSheetDialog); View bottomView = LayoutInflater.from(this).inflate(R.layout.bottom_sheet_layout, null); dialog.setContentView(bottomView); bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); if (!XXPermissions.isGranted(EditStudentActivity.this, Permission.CAMERA)) { XXPermissions.with(EditStudentActivity.this) // 申请多个权限 .permission(Permission.CAMERA) .request(new OnPermissionCallback() { @Override public void onGranted(List permissions, boolean all) { if (all) { //开启扫码界面 getPicFromCamera(); } else { Toast.makeText(EditStudentActivity.this, "需要相机权限", Toast.LENGTH_SHORT).show(); } } @Override public void onDenied(List permissions, boolean never) { XXPermissions.startPermissionActivity(EditStudentActivity.this, permissions); } }); } else { getPicFromCamera(); } } }); bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); getPicFromAlbm(); } }); bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } }