AddStudentActivity.java 14 KB
package com.hjx.parent;

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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
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.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.Map;

import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;

public class AddStudentActivity extends BaseActivity {
    @Override
    protected int layoutResId() {
        return R.layout.activity_add_stu;
    }

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

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

    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;

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

    boolean isName = false;
    boolean isSex = false;
    boolean isNian = false;
    boolean isShen = false;
    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;

    @Override
    protected void onStart() {
        super.onStart();
        String name = (String) SharedPreferencesUtil.getData("setName", "");
        String sex = (String) SharedPreferencesUtil.getData("setSex", "");
        String nian = (String) SharedPreferencesUtil.getData("setNian", "") + SharedPreferencesUtil.getData("setXueq", "");
        String shen = (String) SharedPreferencesUtil.getData("setShen", "");

        if (name != null && name.length() > 0) {
            tv_name.setText(name);
            isName = true;
        } else {
            isName = false;
        }
        if (sex != null && sex.length() > 0) {
            tv_sex.setText(sex);
            isSex = true;
        } else {
            isSex = false;
        }
        if (nian != null && nian.length() > 0) {
            tv_nian.setText(nian);
            isNian = true;
        } else {
            isNian = false;
        }
        if (shen != null && shen.length() > 0) {
            tv_shen.setText(shen);
            isShen = true;
        } else {
            isShen = false;
        }

        if (isName && isSex && isNian && isShen) {
            btn_next.setTextColor(Color.WHITE);
            btn_next.setBackground(getResources().getDrawable(R.drawable.bg_solid_btn));
        }

    }

    @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 (isName && isSex && isNian && isShen) {
                addStudent();
            } else {
                Toast.makeText(this, "请完成设置后点击", Toast.LENGTH_SHORT).show();
            }
        });
    }

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


    public void addStudent() {
        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", "");


        Map map = new HashMap();
        map.put("nickName", name);
        map.put("gender", "男".equals(sex) ? 0 : 1);
        map.put("gradeId", SharedPreferencesUtil.getData("grade", 1));
        map.put("parentIdentity", shen);
        map.put("term", xueq);
        if (path != null) {
            map.put("photo", path);
        }

        NetWorks.registerStudent(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) {
                        finish();
                    } else {
                        Toast.makeText(AddStudentActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(AddStudentActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }

        });
    }

    @Override
    protected void initData() {

    }

    @Override
    public void onNetChanged(int netWorkState) {

    }

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

    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(AddStudentActivity.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 uploadAvatar(File file) {
        RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(this, 45));
        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
        Glide.with(this).load(file).apply(options).into(iv_avatar);
        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");
                }
            }

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

}