package com.xiaomai.geek.ui.module.password; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.design.widget.TextInputLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.util.ColorGenerator; import com.xiaomai.geek.GeekApplication; import com.xiaomai.geek.R; import com.xiaomai.geek.common.utils.InputMethodUtils; import com.xiaomai.geek.data.module.Password; import com.xiaomai.geek.di.IComponent; import com.xiaomai.geek.di.component.ActivityComponent; import com.xiaomai.geek.di.component.DaggerActivityComponent; import com.xiaomai.geek.di.module.ActivityModule; import com.xiaomai.geek.event.PasswordEvent; import com.xiaomai.geek.presenter.password.EditAccountPresenter; import com.xiaomai.geek.ui.base.BaseActivity; import com.xiaomai.geek.view.IEditAccountView; import org.greenrobot.eventbus.EventBus; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * Created by XiaoMai on 2017/3/30 14:01. */ public class EditAccountActivity extends BaseActivity implements IEditAccountView, IComponent<ActivityComponent> { public static final int MODE_CREATE = 1; public static final int MODE_UPDATE = 2; private static final String EXTRA_PASSWORD = "EXTRA_CONTENT"; @BindView(R.id.iv_generate_pwd) ImageView ivGeneratePwd; private int mCurrentMode = MODE_CREATE; @BindView(R.id.tool_bar) Toolbar toolBar; @BindView(R.id.edit_platform) EditText editPlatform; @BindView(R.id.edit_userName) EditText editUserName; @BindView(R.id.edit_password) EditText editPassword; @BindView(R.id.edit_note) EditText editNote; @BindView(R.id.layout_platform) TextInputLayout layoutPlatform; @BindView(R.id.layout_userName) TextInputLayout layoutUserName; @BindView(R.id.layout_password) TextInputLayout layoutPassword; @BindView(R.id.circle_view_icon) ImageView circleViewIcon; private String mPlatform; private String mUserName; private String mPassword; private String mNote; private int mPasswordId; private EditAccountPresenter mPresenter; private final ColorGenerator mGenerator = ColorGenerator.MATERIAL; public static void launch(Context context) { context.startActivity(new Intent(context, EditAccountActivity.class)); } public static void launch(Context context, Password password) { Intent intent = new Intent(context, EditAccountActivity.class); intent.putExtra(EXTRA_PASSWORD, password); context.startActivity(intent); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_account); ButterKnife.bind(this); initViews(); initData(); } private void initData() { Intent intent = getIntent(); if (null == intent) { return; } Password password = intent.getParcelableExtra(EXTRA_PASSWORD); if (password == null) { return; } mCurrentMode = MODE_UPDATE; mPasswordId = password.getId(); editPlatform.setText(password.getPlatform()); editUserName.setText(password.getUserName()); editPassword.setText(password.getPassword()); editNote.setText(password.getNote()); } private void initViews() { mPresenter = new EditAccountPresenter(); mPresenter.attachView(this); setSupportActionBar(toolBar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } editPlatform.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { final String platform = editPlatform.getText().toString().trim(); if (platform.length() > 0) { String substring = platform.substring(0, 1); TextDrawable textDrawable = TextDrawable.builder().beginConfig().toUpperCase() .endConfig().buildRound(substring, mGenerator.getColor(platform)); circleViewIcon.setImageDrawable(textDrawable); } else { circleViewIcon.setImageResource(R.drawable.ic_jike); } } @Override public void afterTextChanged(Editable s) { layoutPlatform.setErrorEnabled(false); } }); editUserName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { layoutUserName.setErrorEnabled(false); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { /** * 必须先调用setSupportActionBar(toolBar),否则菜单不显示 */ getMenuInflater().inflate(R.menu.edit_account_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; case R.id.menu_ok: saveInfo(); return true; } return super.onOptionsItemSelected(item); } private void saveInfo() { mPlatform = editPlatform.getText().toString().trim(); mUserName = editUserName.getText().toString().trim(); mPassword = editPassword.getText().toString().trim(); mNote = editNote.getText().toString().trim(); if (mCurrentMode == MODE_CREATE) { mPresenter.savePassword(mContext, mPlatform, mUserName, mPassword, mNote); } else if (mCurrentMode == MODE_UPDATE) { mPresenter.updatePassword(mContext, mPasswordId, mPlatform, mUserName, mPassword, mNote); } } @Override public void onSaveComplete(boolean save) { if (save) { EventBus.getDefault().post(new PasswordEvent(PasswordEvent.TYPE_ADD, new Password())); finish(); } else { Snackbar.make(toolBar, "保存失败", Snackbar.LENGTH_LONG).show(); } } @Override public void onUpdateComplete(boolean update) { if (update) { EventBus.getDefault() .post(new PasswordEvent(PasswordEvent.TYPE_UPDATE, new Password())); finish(); } else { Snackbar.make(toolBar, "修改失败", Snackbar.LENGTH_LONG).show(); } } @Override public void onPlatformError() { layoutPlatform.setError("不能为空"); layoutPlatform.setEnabled(true); } @Override public void onUserNameError() { layoutUserName.setError("不能为空"); layoutUserName.setEnabled(true); } @Override public void onPasswordError() { layoutPassword.setError("不能为空"); layoutPassword.setEnabled(true); } @Override public Password generateRandomPassword() { return null; } @Override public ActivityComponent getComponent() { return DaggerActivityComponent.builder() .applicationComponent(GeekApplication.get(mContext).getComponent()) .activityModule(new ActivityModule(this)).build(); } private int mLength = 6; private int mPasswordType = EditAccountPresenter.TYPE_ALL; private AlertDialog mDialog = null; @OnClick(R.id.iv_generate_pwd) public void onClick() { InputMethodUtils.hideSoftInput(this); View view = getLayoutInflater().inflate(R.layout.dialog_generate_pwd, null); final TextView tvPassword = (TextView) view.findViewById(R.id.tv_password); SeekBar seekBar = (SeekBar) view.findViewById(R.id.seek_bar); final TextView tvLength = (TextView) view.findViewById(R.id.tv_length); Spinner spinner = (Spinner) view.findViewById(R.id.spinner); View refresh = view.findViewById(R.id.refresh); final View cancel = view.findViewById(R.id.bt_cancel); View ok = view.findViewById(R.id.bt_ok); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mLength = progress + 6; tvLength.setText("密码长度:" + mLength); tvPassword.setText(getPassword()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: mPasswordType = EditAccountPresenter.TYPE_ALL; break; case 1: mPasswordType = EditAccountPresenter.TYPE_NUM_LETTER; break; case 2: mPasswordType = EditAccountPresenter.TYPE_NUM; break; case 3: mPasswordType = EditAccountPresenter.TYPE_LETTER; break; } tvPassword.setText(getPassword()); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); refresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tvPassword.setText(getPassword()); } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDialog != null && mDialog.isShowing()) { mDialog.dismiss(); } mLength = 6; mPasswordType = EditAccountPresenter.TYPE_ALL; } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDialog != null && mDialog.isShowing()) { mDialog.dismiss(); } editPassword.setText(mPassword); } }); mDialog = new AlertDialog.Builder(mContext).setView(view).create(); mDialog.show(); } private String getPassword() { mPassword = mPresenter.generatePassword(mPasswordType, mLength); return mPassword; } }