package com.yidianling.user.mine; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.hardware.Camera; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.text.TextUtils; import android.view.View; import android.widget.DatePicker; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import com.alibaba.android.arouter.facade.annotation.Route; import com.tbruyelle.rxpermissions2.RxPermissions; import com.ydl.ydl_image.module.GlideApp; import com.ydl.ydl_image.transform.GlideCircleTransform; import com.ydl.ydlcommon.base.BaseActivity; import com.ydl.ydlcommon.bean.StatusBarOptions; import com.ydl.ydlcommon.data.http.RxUtils; import com.ydl.ydlcommon.data.http.ThrowableConsumer; import com.ydl.ydlcommon.modular.ModularServiceManager; import com.ydl.ydlcommon.utils.FileUtils; import com.ydl.ydlcommon.utils.PopUtils; import com.ydl.ydlcommon.utils.remind.ToastHelper; import com.ydl.ydlcommon.view.JumpTextView; import com.ydl.ydlcommon.view.ListNoCancelDialog; import com.ydl.ydlcommon.view.TitleBar; import com.ydl.ydlcommon.view.dialog.ListDialog; import com.yidianling.common.tools.ToastUtil; import com.yidianling.im.api.service.IImService; import com.yidianling.user.R; import com.yidianling.user.UserHelper; import com.yidianling.user.api.bean.UserResponseBean; import com.yidianling.user.http.UserHttp; import com.yidianling.user.http.UserHttpImpl; import com.yidianling.user.http.request.HeadParam; import com.yidianling.user.http.request.UserInfoParam; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import de.greenrobot.event.EventBus; import io.reactivex.android.schedulers.AndroidSchedulers; /** * 个人资料 * Created by softrice on 15/12/2. */ @Route(path = "/user/personInfo") public class PersonalInfoActivity extends BaseActivity implements View.OnClickListener { public static final int REQUEST_NAME = 1; UserResponseBean.UserInfo userInfoData; private static final int REQUEST_IMAGE = 2; TitleBar tb_title; ImageView persion_head_iv; ImageView person_head_hint_iv; RelativeLayout persion_head_rel; JumpTextView jtv_nick; JumpTextView jtv_sex; JumpTextView jtv_birthday; JumpTextView jtv_marriage_state; JumpTextView jtv_career; JumpTextView jtv_jianjie; private ArrayList<String> mSelectPath = new ArrayList<>(); List<String> name = new ArrayList<String>(); DatePickerDialogFragment datePickerDialogFragment = new DatePickerDialogFragment(); private PopupWindow popupWindow; private Uri imgUri; FileUtils fileUtils; private String head_dir;//目录 private String head_path;//路径 File head_filec; private RxPermissions rxPermissions; public static Intent newIntent(Activity activity) { return new Intent(activity, PersonalInfoActivity.class); } @NotNull @Override public StatusBarOptions getStatusViewOptions() { return new StatusBarOptions(true,true); } @Override protected int layoutResId() { return R.layout.user_mine_activity_personal_info; } @Override protected void initDataAndEvent() { tb_title = findViewById(R.id.tb_title); persion_head_iv = findViewById(R.id.persion_head_iv); person_head_hint_iv = findViewById(R.id.person_head_hint_iv); persion_head_rel = findViewById(R.id.persion_head_rel); jtv_nick = findViewById(R.id.jtv_nick); jtv_sex = findViewById(R.id.jtv_sex); jtv_birthday = findViewById(R.id.jtv_birthday); jtv_marriage_state = findViewById(R.id.jtv_marriage_state); jtv_career = findViewById(R.id.jtv_career); jtv_jianjie = findViewById(R.id.jtv_jianjie); userInfoData = UserHelper.INSTANCE.getUserInfo().getUserInfo(); jtv_nick.setOnClickListener(this); jtv_sex.setOnClickListener(this); jtv_birthday.setOnClickListener(this); jtv_career.setOnClickListener(this); jtv_marriage_state.setOnClickListener(this); jtv_jianjie.setOnClickListener(this); persion_head_rel.setOnClickListener(this); init(); } void init() { rxPermissions = new RxPermissions(this); tb_title.setRightImageListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow = PopUtils.showMoreItem(PersonalInfoActivity.this, tb_title.getRootView(), 0, 0); } }); tb_title.setRightImageIfShouldSee(); setData(); // mChooseSexDialog.setListener(this); datePickerDialogFragment.setDateChangedListener(new DatePicker.OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { monthOfYear++; updateInfo("birthday", year + "-" + monthOfYear + "-" + dayOfMonth); } }); fileUtils = new FileUtils(this); head_dir = fileUtils.getStorageDirectory() + "/img/head_img/"; } private void setData() { if (userInfoData == null || userInfoData == null) return; String head_url = UserHelper.INSTANCE.getUserInfo().getUserInfo().getHead(); GlideApp.with(PersonalInfoActivity.this) .load(head_url) .override(100, 100) .transform(new GlideCircleTransform(PersonalInfoActivity.this)) .error(R.drawable.platform_head_place_hold_pic) .into(persion_head_iv); String nick_name = UserHelper.INSTANCE.getUserInfo().getUserInfo().getNick_name(); if (!TextUtils.isEmpty(nick_name)) jtv_nick.setRightText(nick_name); else jtv_nick.setRightText(""); if (userInfoData.getGender() == 1) jtv_sex.setRightText("男"); else jtv_sex.setRightText("女"); setCareer(userInfoData.getProfession()); setMarriage(userInfoData.getMarriage()); if (userInfoData.getProfession() == 0) { jtv_career.setRightText("请选择"); } jtv_birthday.setRightText(userInfoData.getBirthday()); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.persion_head_rel) { rxPermissions.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) .subscribe(granted -> { if (granted) { List<String> name = new ArrayList<>(); name.add("相册"); name.add("拍照"); ListNoCancelDialog.Builder builders = new ListNoCancelDialog.Builder(PersonalInfoActivity.this, name, 0); builders.SetOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() { @Override public void onItemClick(Dialog dialog, View view, int position) { File file_dir = new File(head_dir); if (file_dir.exists()) { fileUtils.deleteAllFiles(file_dir); file_dir.mkdirs(); } switch (position) { case 0://相册 Intent intent1 = new Intent(Intent.ACTION_PICK, null); intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent1, 21001); dialog.dismiss(); break; case 1://拍照 head_path = head_dir + System.currentTimeMillis() + "hand_carmer.jpg"; showCameraAction(21002, head_path); dialog.dismiss(); break; } } @Override public void onItemLongClick(Dialog dialog, View view, int position) { } }); if (!PersonalInfoActivity.this.isFinishing()) { builders.create().show(); } } else { ToastUtil.toastLong(this, "缺少使用相机和读取存储权限,无法获取图片"); } }); } else if (id == R.id.jtv_nick) {//昵称 Intent intent = new Intent(this, SetInfoActivity.class); intent.putExtra("mOldString", jtv_nick.getRightText()); intent.putExtra("mTitle", "修改昵称"); startActivityForResult(intent, REQUEST_NAME); } else if (id == R.id.jtv_sex) {//性别 List<String> sexs = new ArrayList<String>(); sexs.add("男"); sexs.add("女"); ListNoCancelDialog.Builder builder1 = new ListNoCancelDialog.Builder(PersonalInfoActivity.this, sexs, 0); builder1.SetOnItemClickLister(new ListNoCancelDialog.Builder.OnItemClickLister() { @Override public void onItemClick(Dialog dialog, View view, int position) { switch (position) { case 0: if (userInfoData != null && userInfoData.getGender() == 1) { } else { updateInfo("gender", "1"); } dialog.dismiss(); break; case 1: if (userInfoData != null && userInfoData.getGender() == 2) { } else { updateInfo("gender", "2"); } dialog.dismiss(); break; } } @Override public void onItemLongClick(Dialog dialog, View view, int position) { } }); builder1.create().show(); } else if (id == R.id.jtv_birthday) {//生日 datePickerDialogFragment.show(getFragmentManager(), datePickerDialogFragment.getClass().getName()); } else if (id == R.id.jtv_career) {//职业 List<String> jobs = new ArrayList<String>(); jobs.add("学生党"); jobs.add("上班族"); jobs.add("全职父母"); jobs.add("商人"); ListDialog.Builder builderj = new ListDialog.Builder(PersonalInfoActivity.this, jobs, 0); builderj.SetLastStr("取消"); builderj.SetLastButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builderj.SetOnItemClickLister(new ListDialog.Builder.OnItemClickLister() { @Override public void onItemClick(Dialog dialog, View view, int position) { switch (position) { case 0: case 1: case 2: case 3: updateInfo("profession", String.valueOf(position + 1)); dialog.dismiss(); break; } } @Override public void onItemLongClick(Dialog dialog, View view, int position) { } }); builderj.create().show(); } else if (id == R.id.jtv_marriage_state) {//婚姻状态 List<String> marriages = new ArrayList<String>(); marriages.add("单身"); marriages.add("恋爱中"); marriages.add("已婚"); ListDialog.Builder builderm = new ListDialog.Builder(PersonalInfoActivity.this, marriages, 0); builderm.SetLastStr("取消"); builderm.SetLastButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builderm.SetOnItemClickLister(new ListDialog.Builder.OnItemClickLister() { @Override public void onItemClick(Dialog dialog, View view, int position) { switch (position) { case 0: case 1: case 2: updateInfo("marriage", String.valueOf(position + 1)); dialog.dismiss(); break; } } @Override public void onItemLongClick(Dialog dialog, View view, int position) { } }); builderm.create().show(); } else if (id == R.id.jtv_jianjie) {//个人简介 Intent intent1 = new Intent(this, PersonalDesActivity.class); startActivity(intent1); } } /** * 调用系统拍照 */ private void showCameraAction(int type_code, String file_path) { File file_dir = new File(head_dir); if (file_dir.exists()) { fileUtils.deleteAllFiles(file_dir); } file_dir.mkdirs(); head_filec = new File(file_path); // fileUtils.isFilleExit(head_dir); // BigHeadFile = new File(file_path); // try { // if (BigHeadFile.exists()) { // BigHeadFile.delete(); // } // } catch (Exception e) { // e.printStackTrace(); // } final Intent intent = new Intent(); final Intent intent_camera = getPackageManager() .getLaunchIntentForPackage("com.android.camera"); if (intent_camera != null) { intent.setPackage("com.android.camera"); } intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); // Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); /*获取当前系统的android版本号*/ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头 intent.putExtra("autofocus", true); // 自动对焦 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(head_filec)); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); startActivityForResult(intent, type_code); } else { try { head_filec.createNewFile(); } catch (IOException e) { e.printStackTrace(); } Uri uri = fileUtils.getImageContentUri(PersonalInfoActivity.this, new File(file_path)); intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_FRONT); // 调用前置摄像头 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("autofocus", true); // 自动对焦 startActivityForResult(intent, type_code); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case 21001: if (data != null) { imgUri = data.getData(); startPhotoZoom(data.getData()); } break; case 21002: imgUri = null; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { if (head_filec.exists()) { startPhotoZoom(Uri.fromFile(head_filec)); } } else { Uri uri = fileUtils.getImageContentUri(PersonalInfoActivity.this, head_filec); if (uri != null) { startPhotoZoom(uri); } } break; case 21003: if (imgUri != null) { showProgressDialog("保存中..."); String path = fileUtils.getPathByUri4kitkat(this, imgUri); Bitmap bitmap = BitmapFactory.decodeFile(path); bitmap = fileUtils.getZoomImage(bitmap, 200); try { File out_file = fileUtils.SaveBitmap(bitmap, path); uploadImage(out_file.getAbsolutePath(), 1001); } catch (IOException e) { e.printStackTrace(); } imgUri = null; } break; case REQUEST_NAME: { updateInfo("nickName", SetInfoActivity.getInput(data)); break; } } } } /** * 裁剪图片方法实现 */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // 图片拉伸,就不会出现黑框了 intent.putExtra("scaleUpIfNeeded", true); //宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //裁剪图片宽高 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); if (imgUri != null) { // 输出路径 fileUtils.isFilleExit(head_dir); imgUri = Uri.fromFile(new File(head_dir + System.currentTimeMillis() + "my_head1.jpg")); intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); // return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败 intent.putExtra("return-data", false); // 是否需要人脸识别 // intent.putExtra("noFaceDetection", false); startActivityForResult(intent, 21003); } else { File bigfile = new File(head_path); imgUri = Uri.fromFile(bigfile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); // return-data=true传递的为缩略图,小米手机默认传递大图,所以会导致onActivityResult调用失败 intent.putExtra("return-data", false); // 是否需要人脸识别 intent.putExtra("noFaceDetection", false); startActivityForResult(intent, 21003); } } @SuppressLint("CheckResult") void updateInfo(final String changType, final String value) { showProgressDialog("保存中..."); UserHttp userHttp = UserHttpImpl.Companion.getInstance(); userHttp.setUserInfo(new UserInfoParam(changType, value)) .compose(com.ydl.ydlcommon.data.http.RxUtils.resultData()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(o -> { jtv_sex.postDelayed(() -> { dismissProgressDialog(); ToastUtil.toastShort("保存成功"); }, 500); UserResponseBean.UserInfo userInfo = UserHelper.INSTANCE.getUserInfo().getUserInfo(); switch (changType) { case "gender": switch (value) { case "1": jtv_sex.setRightText("男"); userInfo.setGender(1); break; case "2": jtv_sex.setRightText("女"); userInfo.setGender(2); break; } break; case "nickName": jtv_nick.setRightText(value); userInfo.setNick_name(value); //更新用户昵称到云信 try { ModularServiceManager.INSTANCE.provide(IImService.class).updateUserName(value); }catch (Exception e) {} break; case "profession": setCareer(Integer.valueOf(value)); userInfo.setProfession(Integer.valueOf(value)); break; case "marriage": setMarriage(Integer.valueOf(value)); userInfo.setMarriage(Integer.valueOf(value)); break; case "birthday": jtv_birthday.setRightText(value); userInfo.setBirthday(value); break; case "homeBg": //封面背景 userInfo.setHome_bg(value); break; case "home_desc": //简介 userInfo.setDescription(value); break; } EventBus.getDefault().post(userInfoData); }, new ThrowableConsumer() { @Override public void accept(@NotNull String msg) { ToastHelper.Companion.show(msg); } }); } /** * 上传图片 */ @SuppressLint("CheckResult") void uploadImage(final String path, final int requestCode) { UserHttp userHttp = UserHttpImpl.Companion.getInstance(); userHttp.uploadHead(new HeadParam(new File(path))) .compose(RxUtils.resultData()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(o -> { Map map = (Map) o; String head_url = (String) map.get("url"); userInfoData.setHead(head_url); // 跟新本地云信数据库信息 try { ModularServiceManager.INSTANCE.provide(IImService.class).updateUserHead(userInfoData.getHead()); }catch (Exception e) {} UserResponseBean.UserInfo userInfo = UserHelper.INSTANCE.getUserInfo().getUserInfo(); if (userInfo != null) { userInfo.setHead(head_url); } UserChangeEvent changeEvent = new UserChangeEvent(true); EventBus.getDefault().post(changeEvent); EventBus.getDefault().post(userInfoData); if (head_url != null && !"".equals(head_url)) { GlideApp.with(PersonalInfoActivity.this) .load(userInfoData.getHead()) .override(100, 100) .transform(new GlideCircleTransform(PersonalInfoActivity.this)) .error(R.drawable.platform_head_place_hold_pic) .into(persion_head_iv); } else { GlideApp.with(PersonalInfoActivity.this) .load(R.drawable.platform_head_place_hold_pic) .transform(new GlideCircleTransform(PersonalInfoActivity.this)) .into(persion_head_iv); } dismissProgressDialog(); }, new ThrowableConsumer() { @Override public void accept(@NotNull String msg) { ToastHelper.Companion.show(msg); dismissProgressDialog(); } }); } private void setCareer(int select) { switch (select) { case 0: jtv_career.setRightText("请选择"); break; case 1: jtv_career.setRightText("学生党"); break; case 2: jtv_career.setRightText("上班族"); break; case 3: jtv_career.setRightText("全职父母"); break; case 4: jtv_career.setRightText("商人"); break; } } private void setMarriage(int select) { switch (select) { case 0: jtv_marriage_state.setRightText("请选择"); break; case 1: jtv_marriage_state.setRightText("单身"); break; case 2: jtv_marriage_state.setRightText("恋爱中"); break; case 3: jtv_marriage_state.setRightText("已婚"); break; } } }