FeedBackActivity.java 11 KB
package com.hjx.personalcenter.activity;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.hjx.personalcenter.R;
import com.hjx.personalcenter.db.SaveParam;
import com.hjx.personalcenter.http.HttpManager;
import com.hjx.personalcenter.util.AlertUtils;
import com.hjx.personalcenter.util.CropUtils;
import com.hjx.personalcenter.util.DialogPermission;
import com.hjx.personalcenter.util.FileUtil;
import com.hjx.personalcenter.util.PermissionUtil;
import com.hjx.personalcenter.util.SharedPreferenceMark;
import com.mylhyl.circledialog.CircleDialog;
import com.mylhyl.circledialog.callback.ConfigButton;
import com.mylhyl.circledialog.callback.ConfigDialog;
import com.mylhyl.circledialog.params.ButtonParams;
import com.mylhyl.circledialog.params.DialogParams;

import java.io.File;

/**
 * Created by h on 2017/8/11.
 */

public class FeedBackActivity extends FragmentActivity implements View.OnClickListener {
    private ImageView iv_cance, iv_show, iv_take;
    private EditText content, phone;
    private TextView tv_sub;
    private static final int REQUEST_CODE_TAKE_PHOTO = 1;
    private static final int REQUEST_CODE_ALBUM = 2;
    private static final int REQUEST_CODE_CROUP_PHOTO = 3;
    private SimpleDraweeView mSimpleDraweeView;
    String type = "个人中心";
    private File file;
    private Uri uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_feedback);
        initView();
        initData();
        initLister();
    }

    private void initView() {
        iv_cance = (ImageView) findViewById(R.id.cancel);
        mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.show_iv);
        iv_take = (ImageView) findViewById(R.id.iv_take);
        content = (EditText) findViewById(R.id.feedback_content);
        phone = (EditText) findViewById(R.id.feedback_phone);
        tv_sub = (TextView) findViewById(R.id.feedback_sub);

    }

    private void initData() {
        file = new File(FileUtil.getCachePath(this), "user-feedback.jpg");
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            uri = Uri.fromFile(file);
        } else {
            //通过FileProvider创建一个content类型的Uri(android 7.0需要这样的方法跨应用访问)
            uri = FileProvider.getUriForFile(MyApplication.getContext(), "com.hjx.personalcenter", file);
        }

    }

    private void initLister() {
        iv_cance.setOnClickListener(this);
        iv_take.setOnClickListener(this);
        tv_sub.setOnClickListener(this);
        mSimpleDraweeView.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        String contents = content.getText().toString().trim();
        String contants = phone.getText().toString().trim();
        switch (v.getId()) {
            case R.id.cancel:
                finish();
                break;
            case R.id.iv_take:
                choiceAvatar();
                break;
            case R.id.feedback_sub:
                //提交用户反馈
                if (TextUtils.isEmpty(contents)) {
                    AlertUtils.showToast(FeedBackActivity.this, "写下两点宝贵的意见或建议吧");
                    return;
                }
                String userID = SaveParam.getInstance().getLoginParam(this, "userId");
                try {
                    HttpManager.getInstance().feedback(FeedBackActivity.this, userID,
                            contents,contants,file.getPath(),type);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case R.id.show_iv:


                break;
        }
    }

    //拍摄头像
    private void choiceAvatar() {
        final String[] items = {"拍照", "从相册选择"};
        new CircleDialog.Builder(this)
                .configDialog(new ConfigDialog() {
                    @Override
                    public void onConfig(DialogParams params) {
                        //增加弹出动画
                        params.gravity = Gravity.CENTER;
                    }
                })
                .setTitle("请选择图片来源")
                .setWidth(0.5f)
                .setItems(items, new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int
                            position, long id) {
                        switch (position) {
                            case 0:
                                if (PermissionUtil.hasCameraPermission(FeedBackActivity.this)) {
                                    uploadAvatarFromPhotoRequest();
                                }
                                break;
                            case 1:
                                uploadAvatarFromAlbumRequest();
                                break;
                        }

                    }
                })
                .setNegative("取消", null)
                .configNegative(new ConfigButton() {
                    @Override
                    public void onConfig(ButtonParams params) {
                        //取消按钮字体颜色
                        params.textColor = Color.RED;
                    }
                })
                .show();


    }

    //照相
    private void uploadAvatarFromPhotoRequest() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO);
    }

    //选择图库
    private void uploadAvatarFromAlbumRequest() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, REQUEST_CODE_ALBUM);
    }

    //回掉
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != -1) {
            return;
        }
        if (requestCode == REQUEST_CODE_ALBUM && data != null) {
            Uri newUri;
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                newUri = Uri.parse("file:///" + CropUtils.getPath(this, data.getData()));
            } else {
                newUri = data.getData();
            }
            if (newUri != null) {
                //uploadAvatarFromPhoto();
                //裁剪图片
                startPhotoZoom(newUri);
            } else {
                Toast.makeText(this, "没有得到相册图片", Toast.LENGTH_LONG).show();
            }
        } else if (requestCode == REQUEST_CODE_TAKE_PHOTO) {
            uploadAvatarFromPhoto();
        } else if (requestCode == REQUEST_CODE_CROUP_PHOTO) {
            uploadAvatarFromPhoto();
        }
    }

    private void uploadAvatarFromPhoto() {
        compressAndUploadAvatar(file.getPath());

    }

    private void compressAndUploadAvatar(String fileSrc) {


        //上传到服务器

        final File cover = FileUtil.getSmallBitmap(this, fileSrc);
        String mimeType = "image/*";
        //requestBody = RequestBody.create(MediaType.parse(mimeType), file);
        //String fileName = cover.getName();
        //HttpManager.getInstance().header(this, fileSrc);
        //photo = MultipartBody.Part.createFormData("portrait", fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()), requestBody);
        //Fresco设置圆形头像
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy hierarchy = builder
                .setDesiredAspectRatio(1f)
                .setFailureImage(R.mipmap.blank)
                //圆形头像
                .setRoundingParams(RoundingParams.fromCornersRadius(0.7f))
                .build();

        //加载本地图片
        Uri uri = Uri.fromFile(cover);
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(mSimpleDraweeView.getController())
                .setUri(uri)
                .build();
        mSimpleDraweeView.setHierarchy(hierarchy);
        mSimpleDraweeView.setController(controller);

    }

    public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面.
        intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例.
        intent.putExtra("aspectY", 1);// x:y=1:1
//        intent.putExtra("outputX", 400);//图片输出大小
//        intent.putExtra("outputY", 400);
        intent.putExtra("output", Uri.fromFile(file));
        intent.putExtra("outputFormat", "JPEG");// 返回格式
        startActivityForResult(intent, REQUEST_CODE_CROUP_PHOTO);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {

            case PermissionUtil.REQUEST_SHOWCAMERA:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // Permission Granted
                    uploadAvatarFromPhotoRequest();

                } else {
                    if (!SharedPreferenceMark.getHasShowCamera()) {
                        SharedPreferenceMark.setHasShowCamera(true);
                        new DialogPermission(this, "关闭摄像头权限影响扫描功能");

                    } else {
                        Toast.makeText(this, "未获取摄像头权限", Toast.LENGTH_SHORT)
                                .show();
                    }
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}