第一篇博客 Go
package com.zontek.smartdevicecontrol.fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.*;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.zontek.smartdevicecontrol.BaseApplication;
import com.zontek.smartdevicecontrol.R;
import com.zontek.smartdevicecontrol.activity.CommonActivity;
import com.zontek.smartdevicecontrol.model.Device;
import com.zontek.smartdevicecontrol.util.Constants;
import com.zontek.smartdevicecontrol.util.HttpClient;
import com.zontek.smartdevicecontrol.util.Util;
import com.zontek.smartdevicecontrol.view.gesture.Drawl;
import com.zontek.smartdevicecontrol.view.gesture.GuestureLockView;
import org.apache.http.Header;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.PASS_ERROR;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.PASS_RIRHT;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.RESET_LOCKED;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.RESET_PASS;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.UNLOCK_TYPE;
import static com.zontek.smartdevicecontrol.fragment.DoorLockModeFragment.UNLOCK_TYPE_GRAPHICS;
public class DoorGraphicsUnLockFragment extends BaseFragment {
private static final String TAG = DoorGraphicsUnLockFragment.class.getSimpleName();
@BindView(R.id.framelayout)
FrameLayout framelayout;
@BindView(R.id.textview_description)
TextView textviewDescription;
@BindView(R.id.btn_submit)
Button btnSubmit;
@BindView(R.id.door)
ImageView imageViewDoor;
TextView textInputError;
private ActionBar mActionBar;
private GuestureLockView mGuestureLockView;
//解锁密码
private String unLockPassword;
//输入的密码
private String inputPassword;
//true 给门锁设置过密码,则进入解锁页面 否则设置解锁密码
private boolean hasDefaultPassword = true;
public final static String ACTION_CHECKOLDPASS = "check_old_pass";
public final static String ACTION_SAVENEWPASS = "save_new_pass";
private String action = "";
private String type;
private String snId;
/**
* action bar title
*/
private TextView mTvActionTitle;
private Device mDevice;
private LockStateBroadCastReceiver mBroadCastReceiver;
private ImageButton addImageView;
private Map<String,String> lockInfoMap = new HashMap<>();
private OperationLockStateCallback lockStateCallback;
private int putResetPwdLimit = 5;
private int putPwdLimit = 5;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected int getFragmentRes() {
return R.layout.fragment_gesture_unlock;
}
@Override
protected void initView(View view) {
ButterKnife.bind(this, view);
textInputError = (TextView) view.findViewById(R.id.text_input_error);
mDevice = (Device) bundle.getSerializable(CommonActivity.BUNDLE_MODEL);
lockInfoMap = (Map<String, String>) bundle.getSerializable("data");
hasDefaultPassword = bundle.getBoolean("hasPass");
unLockPassword = bundle.getString("unLockPass");
snId = bundle.getString("snid");
mGuestureLockView = new GuestureLockView(getActivity(), new Drawl.GestureCallBack() {
@Override
public void checkedSuccess(String password) {
textInputError.setText("");
if (password.equals("")) return;
if (hasDefaultPassword) { // 重置、解锁执行
inputPassword = password;
//修改密码,开锁前都要先验证密码。
HttpClient.validateOriginalPwd(snId, password, mValidateOriginalPwd);
} else { // 初次设置时执行
if (TextUtils.isEmpty(unLockPassword)) {
unLockPassword = password;
textviewDescription.setText(getString(R.string.hint_unlock_pass_setting_again));
} else {
//如果Variate.PASSWORD不为空代表是第二次输入新密码,判断两次输入密码是否相同
if (password.equals(unLockPassword)) {
if (action.equals(ACTION_SAVENEWPASS)) {
BaseApplication.showShortToast(R.string.gesture_pass_setting_success);
HttpClient.setUnlockPassword(snId, password, mSetUnlockPassword);
getActivity().finish();
} else {
HttpClient.setUnlockPassword(snId, password, mSetUnlockPassword);
imageViewDoor.setVisibility(View.VISIBLE);
mTvActionTitle.setText(getString(R.string.title_unlock_gesture));
addImageView.setVisibility(View.VISIBLE);
}
textviewDescription.setText(getString(R.string.gesture_pass_setting_success));
hasDefaultPassword = true;
} else {
//如果两次输入密码不一样,PASSWORD设为null,提示密码设置失败
unLockPassword = null;
textviewDescription.setText(getString(R.string.gesture_pass_setting_failed));
}
}
}
}
@Override
public void checkedFail() {
}
});
mGuestureLockView.setParentView(framelayout);
AppCompatActivity activity = (AppCompatActivity) getActivity();
mActionBar = activity.getSupportActionBar();
mTvActionTitle = (TextView) mActionBar.getCustomView().findViewById(R.id.tv_actionbar_title);
addImageView = (ImageButton) mActionBar.getCustomView().findViewById(R.id.btn_actionbar_setting);
addImageView.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.btn_setup));
// if (hasDefaultPassword) {
addImageView.setVisibility(View.VISIBLE);
// }
addImageView.setOnClickListener(this);
if (hasDefaultPassword) {
mTvActionTitle.setText(getString(R.string.title_unlock_gesture));
imageViewDoor.setVisibility(View.VISIBLE);
} else {
imageViewDoor.setVisibility(View.GONE);
mTvActionTitle.setText(getString(R.string.title_set_pass));
}
type = bundle.getString(RESET_PASS);
if ("reset_unlock_graphics".equals(type)) {
mTvActionTitle.setText(getString(R.string.title_reset_gesture));
imageViewDoor.setVisibility(View.GONE);
// addImageView.setVisibility(View.GONE);
textviewDescription.setText(getString(R.string.check_old_gesture_pass));
action = ACTION_CHECKOLDPASS;
}
if (mBroadCastReceiver == null) {
mBroadCastReceiver = new LockStateBroadCastReceiver();
registerBoradcastReceiver();
}
registerReceiver();
}
@Override
protected void initData() {
BaseApplication.getSerial().queryDoorlockSwitchState(mDevice.getuId());
}
private class LockStateBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Constants.ACTION_CALLBACK_LOCKSTATE)) {
int state = intent.getIntExtra("state", -1);
if (state==1){
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door_lock));
}else {
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door));
}
}
}
}
public void registerBoradcastReceiver() {
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction(Constants.ACTION_CALLBACK_LOCKSTATE);
getActivity().registerReceiver(mBroadCastReceiver, myIntentFilter);
}
@Override
public void onPause() {
super.onPause();
//mGuestureLockView.destroy();
}
@Override
public void onDestroy() {
super.onDestroy();
mGuestureLockView.destroy();
if(mBroadCastReceiver!=null){
getActivity().unregisterReceiver(mBroadCastReceiver);
}
if (lockStateCallback != null){
getActivity().unregisterReceiver(lockStateCallback);
}
}
@OnClick({R.id.btn_submit})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_actionbar_setting:
// Bundle bundle = new Bundle();
// String task = CommonActivity.BUNDLE_TASK_RESETDOORPASS;
// bundle.putString(CommonActivity.BUNDLE_KEY_TASK, task);
// bundle.putString(UNLOCK_TYPE, UNLOCK_TYPE_GRAPHICS);
// bundle.putBoolean("hasPass", hasDefaultPassword);
// bundle.putString("unLockPass", unLockPassword);
// bundle.putString(RESET_PASS, "reset_unlock_graphics");
// bundle.putString("snid", snId);
// bundle.putSerializable(CommonActivity.BUNDLE_MODEL, mDevice);
// Util.openActivity(getActivity(), CommonActivity.class, bundle);
Bundle bundle = new Bundle();
String task = CommonActivity.BUNDLE_TASK_LOCK_SETTING;
bundle.putString(CommonActivity.BUNDLE_KEY_TASK, task);
bundle.putSerializable(CommonActivity.BUNDLE_MODEL, mDevice);
bundle.putSerializable("data", (Serializable) lockInfoMap);
Util.openActivity(getActivity(), CommonActivity.class, bundle);
break;
}
}
private final AsyncHttpResponseHandler mSetDefaultUnLockMode = new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
try {
String result = new String(arg2);
if ("1".equals(result)){
}
} catch (Exception e) {
e.printStackTrace();
onFailure(arg0, arg1, arg2, e);
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
}
};
private final AsyncHttpResponseHandler mSetUnlockPassword = new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
try {
String result = new String(arg2);
if ("1".equals(result)){
BaseApplication.showShortToast(R.string.gesture_pass_setting_success);
}
} catch (Exception e) {
e.printStackTrace();
onFailure(arg0, arg1, arg2, e);
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
}
};
private final AsyncHttpResponseHandler mValidateOriginalPwd = new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
try {
String result = new String(arg2);
if (RESET_LOCKED.equals(result)){
BaseApplication.showShortToast(R.string.pass_error_max_limit);
}else if (PASS_RIRHT.equals(result)){ //如果是重置密码的话 再次设置密码,否则执行解锁
if (action.equals(ACTION_CHECKOLDPASS)){
BaseApplication.showShortToast(R.string.hint_unlock_new_pass_setting);
textviewDescription.setText(getString(R.string.hint_unlock_new_pass_setting));
action = ACTION_SAVENEWPASS;
unLockPassword = "";
hasDefaultPassword = false;
}else {
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door_lock));
BaseApplication.getSerial().setDoorlockSwitchState(mDevice.getuId(), Constants.openDoor);
BaseApplication.showLongToast(R.string.door_lock_opened);
}
textInputError.setText("");
} else if (PASS_ERROR.equals(result)){
if (action.equals(ACTION_CHECKOLDPASS)){
BaseApplication.showShortToast(R.string.old_gesture_pass_error);
if (putResetPwdLimit > 0){
putResetPwdLimit--;
textInputError.setText(String.format(getString(R.string.pwd_old_limit),String.valueOf(putResetPwdLimit)));
}else {
textInputError.setText(getString(R.string.old_gesture_pass_error));
}
}else {
Toast.makeText(getActivity(), R.string.password_error, Toast.LENGTH_SHORT).show();
if (putPwdLimit > 0){
putPwdLimit--;
textInputError.setText(String.format(getString(R.string.pwd_old_limit),String.valueOf(putPwdLimit)));
}else {
textInputError.setText(getString(R.string.password_error));
}
}
}
} catch (Exception e) {
e.printStackTrace();
onFailure(arg0, arg1, arg2, e);
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
}
};
class OperationLockStateCallback extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Constants.ACTION_CALLBACK_OPERATION_LOCK_STATE)){
int state = intent.getIntExtra("operation_event", -1);
if (state==1 ||state == 3){
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door));
}else if (state==2){
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door_lock));
}else {
imageViewDoor.setImageDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.door));
}
}
}
}
private void registerReceiver(){
IntentFilter filter = new IntentFilter();
filter.addAction(Constants.ACTION_CALLBACK_OPERATION_LOCK_STATE);
lockStateCallback = new OperationLockStateCallback();
getActivity().registerReceiver(lockStateCallback,filter);
}
}