AccountActivity.java 14.3 KB
package com.hjx.parent;

import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.NetworkRequest;
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.ImageView;
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.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.prws.common.base.BaseActivity;
import com.prws.common.base.BasePresenter;
import com.prws.common.bean.ResponseResult;
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;
import okhttp3.ResponseBody;

public class AccountActivity extends BaseActivity {


    @Override
    protected int layoutResId() {
        return R.layout.activity_setac;
    }

    @Override
    public Object getContract() {
        return null;
    }

    @Override
    public BasePresenter getPresenter() {
        return null;
    }

    private static int CAMERA_REQUEST_CODE = 343;
    private static int ALBUM_REQUEST_CODE = 456;
    private static int CROP_REQUEST_CODE = 234;
    private File tempFile;
    private String path;
    TextView tv_6;
    @BindView(R.id.iv_3)
    ImageView iv_3;

    @Override
    protected void initView() {
        tv_6 = findViewById(R.id.tv_6);
        String phone = (String) SharedPreferencesUtil.getData("phone", "");
        String photo = (String) SharedPreferencesUtil.getData("photo", "");
        if (!TextUtils.isEmpty(photo)) {
            RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45));
            RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
            Glide.with(AccountActivity.this).load(photo).apply(options).into(iv_3);
        }
        if (phone != null && phone.length() > 0)
            tv_6.setText(phone);
    }

    @Override
    protected void initListener() {
        findViewById(R.id.iv_back).setOnClickListener(view -> onBackPressed());
        findViewById(R.id.tv_7).setOnClickListener(view -> startActivity(ChangePwdActivity.class));
    }

    @Override
    protected void initData() {

    }

    @Override
    public void onNetChanged(int netWorkState) {

    }

    private void uploadAvatar(File file) {

        NetWorks.uploadAvatar(file, new Observer<ResponseResult<Map<String, String>>>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(ResponseResult<Map<String, String>> responseBody) {
                if (responseBody.getData() != null && responseBody.getCode() == 200) {
                    path = responseBody.getData().get("imageUrl");
                    editUser(path);
                }
            }

            @Override
            public void onError(Throwable e) {
                e.toString();
            }

            @Override
            public void onComplete() {

            }
        });
    }

    public void editUser(String path) {
        Map map = new HashMap();
        map.put("userId", SharedPreferencesUtil.getData("userId", ""));
        map.put("photo", path);

        NetWorks.editUser(NetWorks.getMapRequestBody(map), new Observer<ResponseBody>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(ResponseBody responseBody) {
                try {
                    String str = responseBody.string().toString();
                    LogUtil.e(TAG, "----" + str);
                    JSONObject jo = new JSONObject(str);
                    boolean isSucceed = jo.getBoolean("success");
                    if (isSucceed) {
                        SharedPreferencesUtil.putData("photo", path);
                        RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45));
                        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
                        Glide.with(AccountActivity.this).load(path).apply(options).into(iv_3);
                        Toast.makeText(AccountActivity.this, "修改成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(AccountActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(AccountActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onError(Throwable e) {

            }

            @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;
    }

    @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);
            }
        }
    }

    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 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);
    }

    /**
     * 从相册获取图片
     */
    private void getPicFromAlbm() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE);
    }

    @OnClick(R.id.iv_3)
    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(AccountActivity.this, Permission.CAMERA)) {
                    XXPermissions.with(AccountActivity.this)
                            // 申请多个权限
                            .permission(Permission.CAMERA)
                            .request(new OnPermissionCallback() {
                                @Override
                                public void onGranted(List<String> permissions, boolean all) {
                                    if (all) {
                                        //开启扫码界面
                                        getPicFromCamera();
                                    } else {
                                        Toast.makeText(AccountActivity.this, "需要相机权限", Toast.LENGTH_SHORT).show();
                                    }
                                }

                                @Override
                                public void onDenied(List<String> permissions, boolean never) {
                                    XXPermissions.startPermissionActivity(AccountActivity.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();
    }

    @OnClick(R.id.logout)
    public void logout(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
        builder.setTitle("温馨提示");
        builder.setMessage("是否退出登录?");
        builder.setCancelable(false);
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                SharedPreferencesUtil.clear(AccountActivity.this);
                restartApp();
            }
        });
        builder.show();
    }

    private void restartApp() {
        //重启app,这一步一定要加上,如果不重启app,可能打开新的页面显示的语言会不正确
        Intent intent = new Intent(this, SmsLoginActivity.class);
        intent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }

}