package com.dingmouren.dingdingmusic.ui.personal;
import android.Manifest;
import android.animation.Animator;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.dingmouren.dingdingmusic.Constant;
import com.dingmouren.dingdingmusic.MyApplication;
import com.dingmouren.dingdingmusic.R;
import com.dingmouren.dingdingmusic.base.BaseActivity;
import com.dingmouren.dingdingmusic.ui.about.AboutActivity;
import com.dingmouren.dingdingmusic.ui.collected.CollectedActivity;
import com.dingmouren.dingdingmusic.ui.home.MainActivity;
import com.dingmouren.dingdingmusic.ui.localmusic.LocalMusicActivity;
import com.dingmouren.dingdingmusic.utils.MyGlideImageLoader;
import com.dingmouren.dingdingmusic.utils.SPUtil;
import com.dingmouren.greendao.MusicBeanDao;
import com.yancy.gallerypick.config.GalleryConfig;
import com.yancy.gallerypick.config.GalleryPick;
import com.yancy.gallerypick.inter.IHandlerCallBack;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import butterknife.BindView;
import butterknife.OnClick;
import de.hdodenhof.circleimageview.CircleImageView;
import rx.Observable;
import rx.Subscriber;
/**
* Created by dingmouren on 2017/1/17.
*/
public class PersonalCenterActivity extends BaseActivity {
private static final String TAG = PersonalCenterActivity.class.getName();
@BindView(R.id.img_header) CircleImageView mImgHeader;
@BindView(R.id.tv_username)TextView mUserName;
@BindView(R.id.tv_local_music) TextView mLocalMusicCount;
@BindView(R.id.tv_like) TextView mLikeMusic;
@BindView(R.id.img_setting)ImageView mSetting;
@BindView(R.id.container) LinearLayout mRootLayout;
private Cursor mCursor;
private long mCountLike;
private int enterX;//传递过来的x坐标,是点击View的中心点的x坐标,揭露动画
private int enterY;//传递过来的y坐标,是点击View的中心点的y坐标,揭露动画
private GalleryConfig mGalleryConfig;//图片选择器的配置
private List<String> mNavHeaderImgPaths = new ArrayList<>();//记录已选的图片
private String mName;
private Observable observable;
private Subscriber subscriber;
@Override
public int setLayoutResourceID() {
return R.layout.activity_personal;
}
@Override
public void init(Bundle savedInstanceState) {
observable = Observable.just(1).delay(1, TimeUnit.SECONDS);
subscriber = new Subscriber<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
finish();
}
};
}
@Override
public void initView() {
mCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if (null != mCursor)mLocalMusicCount.setText("本地歌曲("+mCursor.getCount()+"首)");
mCountLike = MyApplication.getDaoSession().getMusicBeanDao().queryBuilder().where(MusicBeanDao.Properties.IsCollected.eq(true)).count();
if (0 != mCountLike){
mLikeMusic.setText("收藏歌曲("+mCountLike+"首)");
}
//揭露动画
mRootLayout.post(new Runnable() {
@Override
public void run() {
mRootLayout.setVisibility(View.VISIBLE);
enterX = getIntent().getIntExtra("x",0);
enterY = getIntent().getIntExtra("y",0);
if (0 != enterX && 0 != enterY){
Animator animator = createRevealAnimator(false,enterX,enterY);
animator.start();
}
}
});
}
@Override
public void initListener() {
mImgHeader.setOnClickListener((view -> changeHeader()));
mUserName.setOnClickListener(view -> changeName());
}
@Override
public void initData() {
}
@Override
protected void onResume() {
mName = (String) SPUtil.get(this,Constant.USER_NAME,"Your name");
mUserName.setText(mName);
super.onResume();
}
@Override
protected void onDestroy() {
if (subscriber.isUnsubscribed()){
subscriber.unsubscribe();
}
super.onDestroy();
}
@OnClick({R.id.card_local_music,R.id.card_like,R.id.img_setting,R.id.card_about})
public void onClick(View view){
switch (view.getId()){
case R.id.card_local_music:
Intent intent = new Intent(PersonalCenterActivity.this,LocalMusicActivity.class);
startActivity(intent);
// new Handler().postDelayed(()-> finish(),1000);
delayFinish();
break;
case R.id.card_like:
Intent intent1 = new Intent(PersonalCenterActivity.this,CollectedActivity.class);
startActivity(intent1);
delayFinish();
break;
case R.id.img_setting:
break;
case R.id.card_about:
Intent intent2 = new Intent(PersonalCenterActivity.this,AboutActivity.class);
startActivity(intent2);
delayFinish();
break;
}
}
private void changeName() {
startActivity(new Intent(this,EditActivity.class));
}
private void delayFinish(){
observable.subscribe(subscriber);
}
/**
* 初始化用户头像
*/
private void initHeader(){
if (!TextUtils.isEmpty((String)SPUtil.get(this,Constant.HEADER_IMG_PATH,"")))
Glide.with(this).load((String)SPUtil.get(this, Constant.HEADER_IMG_PATH, "")).into(mImgHeader);
}
/**
* 揭露动画
*/
private Animator createRevealAnimator( boolean reversed,int x, int y) {
float hypot = (float) Math.hypot(mRootLayout.getHeight(),mRootLayout.getWidth());
float startRadius = reversed ? hypot : 0;
float endRadius = reversed ? 0 : hypot;
Animator animator = ViewAnimationUtils.createCircularReveal(mRootLayout,x,y,startRadius,endRadius);
animator.setDuration(800);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
if (reversed){
animator.addListener(animatorListener);
}
return animator;
}
private Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
mRootLayout.setVisibility(View.INVISIBLE);
finish();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
};
@Override
public void onBackPressed() {
if (enterX != 0 && enterY != 0) {
Animator animator = createRevealAnimator(true, enterX, enterY);
animator.start();
}else {
super.onBackPressed();
}
}
//更换头像
private void changeHeader(){
initGalleryConfig();//初始化图片选择器的配置参数
initPermissions();//授权管理
}
private void initGalleryConfig() {
mGalleryConfig = new GalleryConfig.Builder()
.imageLoader(new MyGlideImageLoader())
.iHandlerCallBack(imgTakeListener)
.pathList(mNavHeaderImgPaths)
.multiSelect(false)//是否多选
.crop(true)//开启快捷裁剪功能
.isShowCamera(true)//显示相机按钮,默认是false
.filePath("/EasyMvp")//图片存放路径
.build();
}
//更换头像时的授权管理
private void initPermissions() {
if (ContextCompat.checkSelfPermission(PersonalCenterActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
//需要授权
if (ActivityCompat.shouldShowRequestPermissionRationale(PersonalCenterActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)){
//拒绝过了
Snackbar.make(mRootLayout,"请在 设置-应用管理 中开启此应用的存储权限",Snackbar.LENGTH_SHORT).show();
}else {
//进行授权
ActivityCompat.requestPermissions(PersonalCenterActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},8);//这个8做什么的不知道,以后再研究
}
} else{
//不需要授权
GalleryPick.getInstance().setGalleryConfig(mGalleryConfig).open(PersonalCenterActivity.this);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 8){
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//同意授权
GalleryPick.getInstance().setGalleryConfig(mGalleryConfig).open(PersonalCenterActivity.this);
}else {
//拒绝授权
}
}
}
//图片选择器的监听接口
IHandlerCallBack imgTakeListener = new IHandlerCallBack() {
@Override
public void onStart() {
}
@Override
public void onSuccess(List<String> photoList) {
SPUtil.put(PersonalCenterActivity.this, Constant.HEADER_IMG_PATH,photoList.get(0));//记录选择的头像图片的路径
Glide.with(PersonalCenterActivity.this).load(photoList.get(0)).into(mImgHeader);
}
@Override
public void onCancel() {
}
@Override
public void onFinish() {
}
@Override
public void onError() {
}
};
}