package net.qiujuer.tips.view.fragment; import android.app.Fragment; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import net.qiujuer.genius.res.Resource; import net.qiujuer.tips.R; import net.qiujuer.tips.factory.presenter.UserPresenter; import net.qiujuer.tips.factory.util.TipsCalender; import net.qiujuer.tips.factory.view.UserView; import net.qiujuer.tips.view.activity.AccountActivity; import net.qiujuer.tips.view.activity.BaseActivity; import net.qiujuer.tips.view.util.ColorSelector; import net.qiujuer.tips.view.util.DateManager; import java.util.Calendar; import java.util.Random; /** * A simple {@link Fragment} subclass. */ public class UserFragment extends Fragment implements View.OnClickListener, UserView, CompoundButton.OnCheckedChangeListener { private UserPresenter mPresenter; private ImageView mCode; private TextView mAccount, mBirthday; private EditText mName; private RadioGroup mSex; private CheckBox mDateWay; private View mColor, mSave; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View root = inflater.inflate(R.layout.fragment_user, container, false); mCode = (ImageView) root.findViewById(R.id.img_user_code); mColor = root.findViewById(R.id.btn_user_color); mSave = root.findViewById(R.id.btn_save); mAccount = (TextView) root.findViewById(R.id.txt_user_account); mBirthday = (TextView) root.findViewById(R.id.txt_user_birthday); mName = (EditText) root.findViewById(R.id.edit_user_name); mSex = (RadioGroup) root.findViewById(R.id.radio_user_sex); mDateWay = (CheckBox) root.findViewById(R.id.check_user_date_way); onInitValues(); // Presenter mPresenter = new UserPresenter(this); mPresenter.init(); mDateWay.setOnCheckedChangeListener(this); mColor.setOnClickListener(this); mSave.setOnClickListener(this); mBirthday.setOnClickListener(this); return root; } protected void onInitValues() { // Check setSex(1); // Color int color = Resource.Color.COLORS[new Random().nextInt(20) + 1]; setColor(color); // Time Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); long date = year * 100000; date += month * 1000; date += day * 10; date += 1; TipsCalender tipsCalender = new TipsCalender(date); setBirthday(tipsCalender); } @Override public void onDestroy() { super.onDestroy(); mPresenter.destroy(); } @Override public void onClick(View v) { final int id = v.getId(); final BaseActivity activity = (BaseActivity) getActivity(); if (id == R.id.btn_user_color) { final ColorSelector selector = new ColorSelector(activity.getLayoutInflater(), getColor()); AlertDialog dialog = activity.showDialog(activity, R.string.title_select_color, selector.getView(), null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setColor(selector.getColor()); } }); dialog.show(); } else if (id == R.id.txt_user_birthday) { final DateManager selector = new DateManager(activity.getLayoutInflater(), getBirthday()); AlertDialog dialog = activity.showDialog(activity, R.string.title_select_date, selector.getView(), null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setBirthday(selector.getDate()); } }); dialog.show(); } else if (id == R.id.btn_save) { setEnable(false); mPresenter.save(); } } @Override public String getName() { return mName.getText().toString(); } @Override public TipsCalender getBirthday() { return (TipsCalender) mBirthday.getTag(); } @Override public int getSex() { int id = mSex.getCheckedRadioButtonId(); if (id == R.id.radio_user_sex_man) return 1; else if (id == R.id.radio_user_sex_woman) return 2; return 0; } @Override public int getColor() { return (int) mColor.getTag(); } @Override public void setAccount(String account) { mAccount.setText(account); } @Override public void setName(String title) { mName.setText(title); } @Override public void setBirthday(TipsCalender date) { mDateWay.setChecked(date.getIsLunar()); if (date.getIsLunar()) { mDateWay.setText(getResources().getText(R.string.txt_date_lunar)); } else { mDateWay.setText(getResources().getText(R.string.txt_date_sun)); } mBirthday.setTag(date); mBirthday.setText(date.toDate()); } @Override public void setSex(int sex) { if (sex == 1) mSex.check(R.id.radio_user_sex_man); else if (sex == 2) mSex.check(R.id.radio_user_sex_woman); } @Override public void setColor(int color) { mColor.setTag(color); mColor.setBackgroundColor(color); } @Override public void setQRCode(Bitmap bitmap) { mCode.setImageBitmap(bitmap); } @Override public void setStatus(long status) { setEnable(true); BaseActivity activity = (BaseActivity) getActivity(); if (status == STATUS_OK) { Toast.makeText(activity, R.string.txt_user_status_ok, Toast.LENGTH_SHORT).show(); } else if (status == STATUS_ERROR_ACCOUNT) { Toast.makeText(activity, R.string.txt_user_status_account, Toast.LENGTH_SHORT).show(); activity.startActivity(new Intent(activity, AccountActivity.class)); activity.finish(); } else if (status == STATUS_ERROR_NAME) { Toast.makeText(activity, R.string.txt_user_status_name, Toast.LENGTH_SHORT).show(); } else if (status == STATUS_ERROR_SYNC) { Toast.makeText(activity, R.string.txt_user_status_sync, Toast.LENGTH_SHORT).show(); } } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { TipsCalender date = (TipsCalender) mBirthday.getTag(); date.setLunar(isChecked); int y = date.getYear(); int m = date.getMonth(); int d = date.getDay(); int newDays = TipsCalender.coercionDay(y, m, d, isChecked); if (date.getDay() > newDays) { date.setDay(newDays); } setBirthday(date); } private void setEnable(boolean isEnable) { mSave.setEnabled(isEnable); mName.setEnabled(isEnable); mSex.setEnabled(isEnable); mDateWay.setEnabled(isEnable); mBirthday.setEnabled(isEnable); mColor.setEnabled(isEnable); } }