package com.example.fei.yhb_20.ui; import android.app.AlertDialog; import android.app.Dialog; import android.content.ContentResolver; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.example.fei.yhb_20.R; import com.example.fei.yhb_20.bean.Merchant; import com.example.fei.yhb_20.bean.MyInfo; import com.example.fei.yhb_20.bean.OtherInfo; import com.example.fei.yhb_20.utils.MyUtils; import com.marshalchen.common.uimodule.huitanScrollView.PullScrollView; import com.squareup.picasso.Picasso; import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.BmobUser; import cn.bmob.v3.listener.FindListener; import cn.bmob.v3.listener.GetListener; import cn.bmob.v3.listener.UpdateListener; public class SettingMerchantActivity extends FragmentActivity implements View.OnClickListener ,PullScrollView.OnTurnListener{ private static final String TAG = "SettingMerchantActivity"; @InjectView(R.id.rl_setting_gender)RelativeLayout rlGender; @InjectView(R.id.rl_setting_hometown)RelativeLayout rlHometown; @InjectView(R.id.rl_setting_certification)RelativeLayout rlCertification; @InjectView(R.id.tv_setting_gender)TextView mGender; @InjectView(R.id.tv_setting_hometown)TextView mHometown; @InjectView(R.id.scroll_view)PullScrollView pullScrollView; @InjectView(R.id.background_img)ImageView background_img; @InjectView(R.id.user_avatar)ImageView avatar; @InjectView(R.id.user_name)TextView mUsername; @InjectView(R.id.user_follow)TextView mFollower; @InjectView(R.id.user_following)TextView mFollowing; @InjectView(R.id.user_des)TextView mMotto; @InjectView(R.id.tv_setting_certification)TextView mCertification; private Merchant merchant; private PopupWindow pop = null; private View parentView ; private LinearLayout ll_popup; private byte[] mContent; Bitmap myBitmap; private Picasso picasso; private String avatarPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); parentView = getLayoutInflater().inflate(R.layout.activity_setting,null); setContentView(parentView); ButterKnife.inject(this); merchant = BmobUser.getCurrentUser(this,Merchant.class); picasso = Picasso.with(this); initViews(); initEvents(); } private void initViews() { if (merchant!=null){ mUsername.setText(merchant.getUsername()); if (merchant.getMyInfo().getGender()!=null){ mGender.setText(merchant.getMyInfo().getGender()); }else{ mGender.setText("未填写"); } BmobQuery<OtherInfo> queryOtherInfo = new BmobQuery<>(); String [] followerIds = {merchant.getObjectId()}; queryOtherInfo.addWhereContainedIn("userId", Arrays.asList(followerIds)); queryOtherInfo.findObjects(this,new FindListener<OtherInfo>() { @Override public void onSuccess(List<OtherInfo> otherInfos) { Toast.makeText(SettingMerchantActivity.this,"查询成功",Toast.LENGTH_LONG).show(); if (otherInfos!=null){ if (otherInfos.get(0).getFollowerIds()!=null){ mFollower.setText("粉丝:"+otherInfos.get(0).getFollowerIds().size()); } if (otherInfos.get(0).getFollowingIds()!=null){ mFollowing.setText("关注:"+otherInfos.get(0).getFollowingIds().size()); } } } @Override public void onError(int i, String s) { Toast.makeText(SettingMerchantActivity.this,"查询失败",Toast.LENGTH_LONG).show(); } }); refreshAvatar(); } } /** * 头像更改后刷新 */ private void refreshAvatar(){ BmobQuery<Merchant> query = new BmobQuery<Merchant>(); query.getObject(this,merchant.getObjectId(),new GetListener<Merchant>() { @Override public void onSuccess(Merchant merchant) { //得到当前的merchant最新的信息,这样用才能得到最新的 avatarPath = merchant.getAvatarPaht(); if (merchant.getAvatarPaht()!=null){ Picasso.with(SettingMerchantActivity.this).load(merchant.getAvatarPaht()).placeholder(R.drawable.pull_scroll_view_avatar_default).error(R.drawable.pull_scroll_view_avatar_default).resize(68, 68).into(avatar); }else{ Log.d(TAG, "没有设置头像"); } if (merchant.getMotto() != null) { mMotto.setText(merchant.getMotto()); } else { mMotto.setText("这个人很懒,什么都没有留下。。。"); } if (merchant.getMerchantInfo() != null) { if (merchant.getMerchantInfo().isAuthenticated()) { mCertification.setText("已认证"); } else { mCertification.setText("未认证"); } } if (merchant.getMyInfo().getHometown() != null) { Log.d(TAG, "hometown"); mHometown.setText(merchant.getMyInfo().getHometown()); } else { mHometown.setText("未填写"); } } @Override public void onFailure(int i, String s) { } }); } private void initEvents() { avatar.setOnClickListener(this); rlGender.setOnClickListener(this); rlCertification.setOnClickListener(this); rlHometown.setOnClickListener(this); pullScrollView.setHeader(background_img); pullScrollView.setOnTurnListener(this); mMotto.setOnClickListener(this); background_img.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_setting, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onRestart() { super.onRestart(); refreshAvatar(); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.rl_setting_gender: new AlertDialog.Builder(this) .setTitle("性别") .setSingleChoiceItems(new String[]{"男士", "女士"}, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { mGender.setText("男士"); setGenderInCloud("男士"); } else { mGender.setText("女士"); setGenderInCloud("女士"); } dialog.dismiss(); } }) .show(); break; case R.id.rl_setting_hometown: showChangeHometown(mHometown.getText().toString()); break; case R.id.rl_setting_certification: //暂不实现 break; case R.id.user_des: showChangeMotto(); break; case R.id.background_img: //TODO 点击可以更改背景,未实现 break; case R.id.user_avatar: //TODO 需要对照片进行裁剪,这个学要另一个类来实现,裁剪之后上传服务器 //要先联网来获取图片,然后才传送 pop = new PopupWindow(SettingMerchantActivity.this); View view = LayoutInflater.from(this).inflate(R.layout.change_avatar_pop,null); Button change = (Button) view.findViewById(R.id.change_avatar_change); Button show = (Button) view.findViewById(R.id.change_avatar_show); Button cancel = (Button) view.findViewById(R.id.change_avatar_cancel); RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent); ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup); //更换头像 change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //TODO 先要改变,有图像,一个大致的计划是:研究怎么从相册选择照片;返回照片之后得到这个照片并掉转到另一个activity中进行图像的修剪 pop.dismiss(); final PopupWindow subPop = new PopupWindow(SettingMerchantActivity.this); View subView = LayoutInflater.from(SettingMerchantActivity.this).inflate(R.layout.choose_way_to_get_picture,null); Button take = (Button) subView.findViewById(R.id.choose_picture_take); Button gallery = (Button) subView.findViewById(R.id.choose_picture_gallery); Button cancel = (Button) subView.findViewById(R.id.choose_picture_cancel); //取消 cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { subPop.dismiss(); ll_popup.clearAnimation(); } }); //从图库进行选取 gallery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType("image/jpeg"); startActivityForResult(getImage, 0); subPop.dismiss(); } }); //拍照进行选取 take.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent getImageByCamera= new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(getImageByCamera, 1); subPop.dismiss(); } }); subPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); subPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); subPop.setBackgroundDrawable(new BitmapDrawable()); subPop.setFocusable(true); subPop.setOutsideTouchable(true); subPop.setContentView(subView); subPop.showAtLocation(parentView, Gravity.BOTTOM, 0, 0); } }); //显示大头像 show.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //点击后放大 if (avatarPath == null || avatarPath.equals("")) { Toast.makeText(SettingMerchantActivity.this, "您没有设置大头像", Toast.LENGTH_LONG).show(); } else { //这个地方是可以优化一下 String[] paths = {avatarPath}; Intent intent; intent = new Intent(SettingMerchantActivity.this, GalleryUrlActivity.class); intent.putExtra("photoUrls", paths); SettingMerchantActivity.this.startActivity(intent); } } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pop.dismiss(); ll_popup.clearAnimation(); } }); /** * 设置点击空白部分后消失 */ parent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pop.dismiss(); ll_popup.clearAnimation(); } }); pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); pop.setBackgroundDrawable(new BitmapDrawable()); pop.setFocusable(true); pop.setOutsideTouchable(true); pop.setContentView(view); ll_popup.startAnimation(AnimationUtils.loadAnimation(SettingMerchantActivity.this, R.anim.activity_translate_in)); pop.showAtLocation(parentView, Gravity.BOTTOM, 0, 0); break; default: break; } } /** * 得到相应的信息后跳转过去 * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ContentResolver resolver = getContentResolver(); if (requestCode==0){ try { //通过相册 //获得图片的uri Uri originalUri = data.getData(); //将图片内容解析成字节数组 mContent= MyUtils.readStream(resolver.openInputStream(Uri.parse(originalUri.toString()))); Intent intent = new Intent(SettingMerchantActivity.this,CropperImageActivity.class); intent.putExtra("bitmapUri",originalUri); intent.putExtra("flag",0); intent.putExtra("merchant",merchant); startActivity(intent); } catch (Exception e) { System.out.println(e.getMessage()); } }else if (requestCode==1){ //通过照相 try { Bundle extras = data.getExtras(); myBitmap = (Bitmap) extras.get("data"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); mContent=baos.toByteArray(); Intent intent = new Intent(SettingMerchantActivity.this,CropperImageActivity.class); intent.putExtra("bitmap",myBitmap); intent.putExtra("flag",1); startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } } /** * 更改云端性别属性 * @param str */ private void setGenderInCloud(String str){ MyInfo myInfo = new MyInfo(); myInfo.setGender(str); merchant.setMyInfo(myInfo); merchant.update(SettingMerchantActivity.this,new UpdateListener() { @Override public void onSuccess() { Toast.makeText(SettingMerchantActivity.this,"更改成功",Toast.LENGTH_LONG).show(); } @Override public void onFailure(int i, String s) { Toast.makeText(SettingMerchantActivity.this,"更改失败",Toast.LENGTH_LONG).show(); } }); } @Override public void onTurn() { } /** * 更改常住地 * @param from */ private void showChangeHometown(final String from){ View view = LayoutInflater.from(this).inflate(R.layout.change_info_dialog,null); final Dialog dialog = new Dialog(this,R.style.normal_dialog_style); dialog.setContentView(view); TextView mFrom = (TextView) view.findViewById(R.id.tv_change_info); mFrom.setText(from); final EditText mTo = (EditText) view.findViewById(R.id.et_change_info); Button cancel = (Button) view.findViewById(R.id.change_info_cancel); Button ok = (Button) view.findViewById(R.id.change_info_ok); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mTo.getText().toString()!=null){ mHometown.setText(mTo.getText()); // MyInfo myInfo; if (merchant.getMyInfo()!=null){ myInfo= merchant.getMyInfo(); }else{ myInfo = new MyInfo(); } myInfo.setHometown(mTo.getText().toString()); merchant.setMyInfo(myInfo); merchant.update(SettingMerchantActivity.this,new UpdateListener() { @Override public void onSuccess() { Toast.makeText(SettingMerchantActivity.this,"更改成功",Toast.LENGTH_LONG).show(); dialog.dismiss(); } @Override public void onFailure(int i, String s) { Toast.makeText(SettingMerchantActivity.this,"更改失败",Toast.LENGTH_LONG).show(); } }); }else{ Toast.makeText(SettingMerchantActivity.this,"您还没有填入更改信息",Toast.LENGTH_LONG).show(); } } }); dialog.setCanceledOnTouchOutside(false); dialog.show(); } /** *更改签名 */ private void showChangeMotto(){ View view = LayoutInflater.from(this).inflate(R.layout.change_motto,null); final Dialog dialog = new Dialog(this,R.style.normal_dialog_style); dialog.setContentView(view); final EditText etMotto = (EditText) view.findViewById(R.id.et_change_motto); Button cancel = (Button) view.findViewById(R.id.change_info_cancel); Button ok = (Button) view.findViewById(R.id.change_info_ok); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (etMotto.getText().toString()!=null){ merchant.setMotto(etMotto.getText().toString()); merchant.update(SettingMerchantActivity.this,new UpdateListener() { @Override public void onSuccess() { mMotto.setText(etMotto.getText().toString()); Toast.makeText(SettingMerchantActivity.this,"签名发布成功",Toast.LENGTH_LONG).show(); dialog.dismiss(); } @Override public void onFailure(int i, String s) { Toast.makeText(SettingMerchantActivity.this,"签名未发布",Toast.LENGTH_LONG).show(); } }); }else{ Toast.makeText(SettingMerchantActivity.this,"您还没有填入签名",Toast.LENGTH_LONG).show(); } } }); dialog.setCanceledOnTouchOutside(false); dialog.show(); } }