package com.wisedu.scc.love.activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.wisedu.scc.love.R;
import com.wisedu.scc.love.activity.base.BaseActivity;
import com.wisedu.scc.love.application.LoveApplication;
import com.wisedu.scc.love.sqlite.ModelFactory;
import com.wisedu.scc.love.sqlite.SqlBuilder;
import com.wisedu.scc.love.sqlite.SqliteHelper;
import com.wisedu.scc.love.sqlite.model.User;
import com.wisedu.scc.love.utils.BitmapUtil;
import com.wisedu.scc.love.utils.CommonUtil;
import com.wisedu.scc.love.utils.RegExpUtil;
import com.wisedu.scc.love.widget.window.SelectPicPopupWindow;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import java.io.File;
import java.io.IOException;
/**
* Created by JZ on 2015/3/9.
*/
@EActivity(R.layout.activity_register)
public class RegisterActivity extends BaseActivity {
public final static int CAMERA_RESULT = 8888;
public final static int PHOTO_RESULT = 9999;
public final static int CROP_RESULT = 7777;
private File mPhotoFile;
private SelectPicPopupWindow popWindow;
private String avatarUri = "";
private String nickName = "";
private String location = "";
private String phone = "";
private String psw = "";
@Bean
public SqliteHelper sqliteHelper;
@ViewById(R.id.main)
public RelativeLayout layout;
@ViewById
public ImageView avatar;
@ViewById
public EditText nickEdit;
@ViewById
public EditText locationEdit;
@ViewById
public EditText phoneEdit;
@ViewById
public EditText pswEdit;
@ViewById
public Button registerButton;
@Click(R.id.registerButton)
public void doLogin(){
nickName = nickEdit.getText().toString();
location = locationEdit.getText().toString();
phone = phoneEdit.getText().toString();
psw = pswEdit.getText().toString();
/*if(null == avatar.getDrawable()){
CommonUtil.shortToast(RegisterActivity.this, "请设置头像!");
} else */if(CommonUtil.isEmpty(nickName)||
CommonUtil.isEmpty(location)||
CommonUtil.isEmpty(phone)||
CommonUtil.isEmpty(psw)){
CommonUtil.shortToast(RegisterActivity.this, "请填写完整再注册!");
} else if(!RegExpUtil.validatePhone(phone)){
CommonUtil.shortToast(RegisterActivity.this, "请正确填写手机号码!");
} else if(sqliteHelper.check(ModelFactory.getUserTableName(),
SqlBuilder.geneWhere("=", "phone"), new String[]{phone})){
CommonUtil.shortToast(RegisterActivity.this, "该手机号码已存在!");
} else {
// 保存用户
if(CommonUtil.isEmpty(avatarUri)){
avatarUri = BitmapUtil.getImagePath(getApplicationContext(), LoveApplication.DEFAULT_AVATAR);
}
storeUser(avatarUri, nickName, location, phone, psw);
CommonUtil.shortToast(RegisterActivity.this, "注册成功!请登录。");
Intent intent = new Intent(RegisterActivity.this, LoginActivity_.class);
intent.putExtra("curAvatar", avatarUri);
intent.putExtra("curPhone", phone);
startActivity(intent);
RegisterActivity.this.finish();
}
}
/**
* 插入用户数据
* @param avatar
* @param nickName
* @param location
* @param phone
* @param psw
*/
private void storeUser(String avatar, String nickName, String location, String phone, String psw) {
sqliteHelper.insert(ModelFactory.getUserTableName(),
new User(avatar, nickName, location, phone, psw));
}
/**
* 拍照和选择图片的底部弹出框
*/
@Click(R.id.avatar)
public void captureAvatar(){
// 实例化SelectPicPopupWindow
popWindow = new SelectPicPopupWindow(RegisterActivity.this, itemsOnClick);
// 设置PopupWindow在layout中显示的位置
popWindow.showAtLocation(layout, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
}
/**
* 为弹出窗口实现监听类
*/
private OnClickListener itemsOnClick = new OnClickListener(){
@Override
public void onClick(View v) {
popWindow.dismiss();
switch (v.getId()) {
case R.id.btn_take_photo:
takePhoto();
break;
case R.id.btn_pick_photo:
pickPhoto();
break;
default:
break;
}
}
};
/**
* 打开拍照界面
*/
private void takePhoto(){
try {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
mPhotoFile = BitmapUtil.getImageFile(getApplicationContext());
if (!mPhotoFile.exists()) {
mPhotoFile.createNewFile();
}
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(mPhotoFile));
startActivityForResult(intent, CAMERA_RESULT);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 选择照片
*/
private void pickPhoto(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PHOTO_RESULT);
}
/**
* 调用拍照Activity后的返回事件
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try{
if (requestCode == CAMERA_RESULT) {
Uri uri = Uri.fromFile(mPhotoFile);
startPhotoZoom(uri);
} else if(requestCode == PHOTO_RESULT){
// 读取uri所在的图片
Uri uri = data.getData();
startPhotoZoom(uri);
} else if(requestCode == CROP_RESULT){
dealImage(data);
}
} catch (Exception e){
e.printStackTrace();
}
}
/**
* 图片裁剪
* @param uri
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_RESULT);
}
/**
* 处理裁剪之后的图片数据
*/
private void dealImage(Intent data) {
Bundle extras = data.getExtras();
if (extras != null) {
// 取得处理后的图片
Bitmap photo = extras.getParcelable("data");
// 保存图片
File image = BitmapUtil.saveBitmap(getApplicationContext(), photo);
// 设置头像地址
avatarUri = image.getAbsolutePath();
// 设置图片给头像
Drawable drawable = new BitmapDrawable(getResources(), photo);
avatar.setImageDrawable(drawable); // 如果网络请求成功后才赋值好点,这里本地版先打开
}
}
}