package com.application.zhangshi_app_android.ui.personal_center;
|
|
import android.content.ComponentName;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.graphics.Bitmap;
|
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.Drawable;
|
import android.net.Uri;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.PopupWindow;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.core.content.ContextCompat;
|
import androidx.fragment.app.Fragment;
|
|
import com.android.app_base.base.dialog.BaseDialog;
|
import com.android.app_base.base.dialog.TipsDialog;
|
import com.android.app_base.base.dialog.UIDialog;
|
import com.android.app_base.base.dialog.WaitDialog;
|
import com.android.app_base.base.view.BaseFragment;
|
import com.android.app_base.manager.AppManager;
|
import com.android.app_base.manager.UserManager;
|
import com.android.app_base.utils.GlideEngine;
|
import com.android.app_base.utils.ScreenSizeUtils;
|
import com.android.app_base.utils.Utils;
|
import com.android.app_base.utils.rxbus.MessageEvent;
|
import com.android.app_base.utils.rxbus.RxBus;
|
import com.android.app_base.widget.SwitchButton;
|
import com.application.zhangshi_app_android.BR;
|
import com.application.zhangshi_app_android.R;
|
import com.application.zhangshi_app_android.bean.AnnualHealthStatusBean;
|
import com.application.zhangshi_app_android.bean.GrowthExperienceInformationBean;
|
import com.application.zhangshi_app_android.databinding.FragmentPersonalCenterBinding;
|
import com.application.zhangshi_app_android.ui.DLBaseFragment;
|
import com.application.zhangshi_app_android.ui.dialog.PetOwnerInfoDialog;
|
import com.application.zhangshi_app_android.ui.function.PetMemoActivity;
|
import com.application.zhangshi_app_android.ui.login.LoginActivity;
|
import com.application.zhangshi_app_android.ui.main.MainActivity;
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.request.target.CustomTarget;
|
import com.bumptech.glide.request.transition.Transition;
|
import com.luck.picture.lib.basic.PictureSelector;
|
import com.luck.picture.lib.config.SelectMimeType;
|
import com.luck.picture.lib.engine.CropFileEngine;
|
import com.luck.picture.lib.entity.LocalMedia;
|
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
|
import com.luck.picture.lib.style.PictureSelectorStyle;
|
import com.luck.picture.lib.style.SelectMainStyle;
|
import com.luck.picture.lib.style.TitleBarStyle;
|
import com.luck.picture.lib.utils.PictureFileUtils;
|
import com.luck.picture.lib.utils.StyleUtils;
|
import com.yalantis.ucrop.UCrop;
|
import com.yalantis.ucrop.UCropImageEngine;
|
import com.yalantis.ucrop.model.AspectRatio;
|
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import io.reactivex.Observer;
|
import io.reactivex.functions.Consumer;
|
|
/**
|
* @author Ljj
|
* @date 2023.03.15. 20:19
|
* @desc 个人中心 Fragment
|
*/
|
public class PersonalCenterFragment extends DLBaseFragment<FragmentPersonalCenterBinding,PersonalCenterFragmentViewModel> {
|
private PopupWindow popupWindow;
|
private BaseDialog mWaitDialog;
|
|
|
public PersonalCenterFragment() {
|
}
|
|
public static PersonalCenterFragment newInstance() {
|
PersonalCenterFragment fragment = new PersonalCenterFragment();
|
Bundle args = new Bundle();
|
fragment.setArguments(args);
|
return fragment;
|
}
|
@Override
|
protected int getLayoutId() {
|
return R.layout.fragment_personal_center;
|
}
|
|
@Override
|
protected int getVariableId() {
|
return BR.viewModel;
|
}
|
|
@Override
|
protected void initParam() {
|
|
}
|
|
@Override
|
protected void initView() {
|
View view = View.inflate(getSelfActivity(),R.layout.pop_operate_person_center,null);
|
popupWindow = initPopUpWindow(view);
|
setOnClickListener(
|
view.findViewById(R.id.tv_basic_info),
|
view.findViewById(R.id.tv_change_login_bg)
|
);
|
|
binding.ivOperate.setOnClickListener(v -> {
|
popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(getSelfActivity(),85) +binding.ivOperate.getWidth(),0);
|
});
|
|
binding.tvLoginOut.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
new UIDialog.Builder(getSelfActivity())
|
.setTitle("提示")
|
.setContent("确定要退出登录吗?")
|
.setConfirm("确定")
|
.setCancel("取消")
|
.setListener(new UIDialog.OnListener() {
|
@Override
|
public void onConfirm(BaseDialog dialog) {
|
UserManager.getInstance().loginOut();
|
AppManager.getAppManager().startActivity(new Intent(getSelfActivity(), LoginActivity.class));
|
getSelfActivity().finish();
|
}
|
})
|
.show();
|
|
}
|
});
|
binding.ivTakePhoto.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
PictureSelector.create(getSelfActivity())
|
.openGallery(SelectMimeType.ofImage())
|
.setImageEngine(GlideEngine.createGlideEngine())
|
.setCropEngine(new ImageFileCropEngine())// 设置裁剪引擎
|
.isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
|
.setMaxSelectNum(1)
|
.forResult(new OnResultCallbackListener<LocalMedia>() {
|
@Override
|
public void onResult(ArrayList<LocalMedia> result) {
|
if (result.size() == 0) return;
|
for (LocalMedia media : result) {
|
if (media.isCut()){
|
viewModel.updateInfo(media.getCutPath());
|
}else {
|
viewModel.updateInfo(media.getRealPath());
|
}
|
}
|
|
}
|
|
@Override
|
public void onCancel() {
|
|
}
|
});
|
}
|
});
|
binding.ivHead.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
PictureSelector.create(getSelfActivity())
|
.openGallery(SelectMimeType.ofImage())
|
.setImageEngine(GlideEngine.createGlideEngine())
|
.setCropEngine(new ImageFileCropEngine())// 设置裁剪引擎
|
.isMaxSelectEnabledMask(true)// 达到最大选择数是否开启禁选蒙层
|
.setMaxSelectNum(1)
|
.forResult(new OnResultCallbackListener<LocalMedia>() {
|
@Override
|
public void onResult(ArrayList<LocalMedia> result) {
|
if (result.size() == 0) return;
|
for (LocalMedia media : result) {
|
if (media.isCut()){
|
viewModel.updateInfo(media.getCutPath());
|
}else {
|
viewModel.updateInfo(media.getRealPath());
|
}
|
}
|
|
}
|
|
@Override
|
public void onCancel() {
|
|
}
|
});
|
}
|
});
|
|
binding.switchBtn.setChecked(UserManager.getInstance().getNightModeState());
|
binding.switchBtn.setOnCheckedChangeListener(new SwitchButton.OnCheckedChangeListener() {
|
@Override
|
public void onCheckedChanged(SwitchButton button, boolean checked) {
|
if (checked == UserManager.getInstance().getNightModeState()) return;
|
new UIDialog.Builder(getContext())
|
.setTitle("提示")
|
.setContent("切换模式需要重启应用才能生效,是否重启?")
|
.setConfirm("确定")
|
.setCancel("取消")
|
.setListener(new UIDialog.OnListener() {
|
@Override
|
public void onConfirm(BaseDialog dialog) {
|
UserManager.getInstance().saveNightModeState(checked);
|
AppManager.getAppManager().restartApp(getContext());
|
}
|
|
@Override
|
public void onCancel(BaseDialog dialog) {
|
UIDialog.OnListener.super.onCancel(dialog);
|
binding.switchBtn.setChecked(!checked);
|
}
|
})
|
.setCancelable(false)
|
.show();
|
}
|
});
|
}
|
|
@Override
|
protected void initData() {
|
viewModel.getInfo();
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
initData();
|
}
|
|
@Override
|
protected void initLiveDataObserve() {
|
|
}
|
|
@Override
|
public void onClick(View v) {
|
super.onClick(v);
|
int id = v.getId();
|
if (id == R.id.tv_basic_info){
|
popupWindow.dismiss();
|
AppManager.getAppManager().startActivity(new Intent(getSelfActivity(),BasicInfoActivity.class)
|
.putExtra("bean",viewModel.getInfoLiveData().getValue()));
|
}else if (id == R.id.tv_change_login_bg){
|
popupWindow.dismiss();
|
AppManager.getAppManager().startActivity(LoginBgChangeActivity.class);
|
}
|
}
|
|
@Override
|
protected boolean isStatusBarImmersionEnabled() {
|
return true;
|
}
|
|
@Override
|
protected void dialogLoading() {
|
if (mWaitDialog == null) {
|
mWaitDialog = new WaitDialog.Builder(getSelfActivity())
|
// 消息文本可以不用填写
|
.setMessage("正在上传头像")
|
.create();
|
}
|
if (!mWaitDialog.isShowing()) {
|
mWaitDialog.show();
|
}
|
}
|
|
@Override
|
protected void dialogDismiss() {
|
if (mWaitDialog != null && mWaitDialog.isShowing()) {
|
mWaitDialog.dismiss();
|
mWaitDialog = null;
|
}
|
}
|
|
/**
|
* 自定义裁剪
|
*/
|
private class ImageFileCropEngine implements CropFileEngine {
|
|
@Override
|
public void onStartCrop(Fragment fragment, Uri srcUri, Uri destinationUri, ArrayList<String> dataSource, int requestCode) {
|
UCrop.Options options = buildOptions();
|
UCrop uCrop = UCrop.of(srcUri, destinationUri, dataSource);
|
uCrop.withOptions(options);
|
uCrop.setImageEngine(new UCropImageEngine() {
|
@Override
|
public void loadImage(Context context, String url, ImageView imageView) {
|
Glide.with(context).load(url).override(180, 180).into(imageView);
|
}
|
|
@Override
|
public void loadImage(Context context, Uri url, int maxWidth, int maxHeight, OnCallbackListener<Bitmap> call) {
|
Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight).into(new CustomTarget<Bitmap>() {
|
@Override
|
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
if (call != null) {
|
call.onCall(resource);
|
}
|
}
|
|
@Override
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
if (call != null) {
|
call.onCall(null);
|
}
|
}
|
});
|
}
|
});
|
uCrop.start(fragment.requireActivity(), fragment, requestCode);
|
}
|
}
|
/**
|
* 配制UCrop,可根据需求自我扩展
|
*
|
* @return
|
*/
|
private UCrop.Options buildOptions() {
|
PictureSelectorStyle selectorStyle = new PictureSelectorStyle();
|
|
UCrop.Options options = new UCrop.Options();
|
options.setHideBottomControls(true);//是否显示底部裁剪菜单栏
|
options.setFreeStyleCropEnabled(false);//裁剪框or图片拖动
|
options.setShowCropFrame(true);//是否显示裁剪边框
|
options.setShowCropGrid(true);//是否显示裁剪网格线
|
options.setCircleDimmedLayer(false);//是否圆形裁剪
|
options.withAspectRatio(1, 1);//裁剪比例
|
options.setAspectRatioOptions(3,
|
new AspectRatio("16:9", 16, 9),
|
new AspectRatio("3:2", 3, 2),
|
new AspectRatio("4:3", 4, 3),
|
new AspectRatio("1:1", 1, 1));//自选裁剪比例,受setHideBottomControls影响可见
|
options.setCropOutputPathDir(getSandboxPath());//裁剪输出路径
|
options.isCropDragSmoothToCenter(false);//裁剪拖动是否自动居中
|
options.isForbidSkipMultipleCrop(true);//是否多图裁剪时禁止跳过
|
options.setMaxScaleMultiplier(100);//设置最大缩放比例
|
if (selectorStyle != null && selectorStyle.getSelectMainStyle().getStatusBarColor() != 0) {
|
SelectMainStyle mainStyle = selectorStyle.getSelectMainStyle();
|
boolean isDarkStatusBarBlack = mainStyle.isDarkStatusBarBlack();
|
int statusBarColor = mainStyle.getStatusBarColor();
|
options.isDarkStatusBarBlack(isDarkStatusBarBlack);
|
if (StyleUtils.checkStyleValidity(statusBarColor)) {
|
options.setStatusBarColor(statusBarColor);
|
options.setToolbarColor(statusBarColor);
|
} else {
|
options.setStatusBarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey));
|
options.setToolbarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey));
|
}
|
TitleBarStyle titleBarStyle = selectorStyle.getTitleBarStyle();
|
if (StyleUtils.checkStyleValidity(titleBarStyle.getTitleTextColor())) {
|
options.setToolbarWidgetColor(titleBarStyle.getTitleTextColor());
|
} else {
|
options.setToolbarWidgetColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_white));
|
}
|
} else {
|
options.setStatusBarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey));
|
options.setToolbarColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_grey));
|
options.setToolbarWidgetColor(ContextCompat.getColor(getSelfActivity(), com.luck.picture.lib.R.color.ps_color_white));
|
}
|
return options;
|
}
|
|
/**
|
* 创建自定义输出目录
|
*
|
* @return
|
*/
|
private String getSandboxPath() {
|
File externalFilesDir = getSelfActivity().getExternalFilesDir("");
|
File customFile = new File(externalFilesDir.getAbsolutePath(), "Sandbox");
|
if (!customFile.exists()) {
|
customFile.mkdirs();
|
}
|
return customFile.getAbsolutePath() + File.separator;
|
}
|
}
|