package com.classic.car.ui.activity; import android.app.Activity; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import com.classic.car.R; import com.classic.car.app.CarApplication; import com.classic.car.consts.Consts; import com.classic.car.db.dao.ConsumerDao; import com.classic.car.entity.ConsumerDetail; import com.classic.car.ui.base.AppBaseActivity; import com.classic.car.ui.fragment.DatePickerFragment; import com.classic.car.utils.DateUtil; import com.classic.car.utils.ToastUtil; import com.classic.car.utils.Util; import com.jakewharton.rxbinding.view.RxView; import com.jaredrummler.materialspinner.MaterialSpinner; import com.rengwuxian.materialedittext.MaterialEditText; import java.util.Calendar; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import butterknife.BindView; import rx.functions.Action1; /** * 应用名称: CarAssistant * 包 名 称: com.classic.car.ui.activity * * 文件描述:添加消费信息 * 创 建 人:续写经典 * 创建时间:16/6/5 下午2:07 */ public class AddConsumerActivity extends AppBaseActivity implements Toolbar.OnMenuItemClickListener, MaterialSpinner.OnItemSelectedListener, DatePickerFragment.Callback{ public static final int TYPE_ADD = 0; public static final int TYPE_MODIFY = 1; private static final String TAG = "datePicker"; private static final String PARAMS_TYPE = "type"; private static final String PARAMS_CONSUMER = "consumerDetail"; private static final String EMPTY = ""; @BindView(R.id.add_consumer_fuel_layout) View mFuelLayout; @BindView(R.id.add_consumer_time) TextView mConsumerTime; @BindView(R.id.add_consumer_spinner) MaterialSpinner mSpinner; @BindView(R.id.add_consumer_fuel_spinner) MaterialSpinner mFuelSpinner; @BindView(R.id.add_consumer_money) MaterialEditText mAddConsumerMoney; @BindView(R.id.add_consumer_unit_price) MaterialEditText mAddConsumerUnitPrice; @BindView(R.id.add_consumer_current_mileage) MaterialEditText mAddConsumerCurrentMileage; @BindView(R.id.add_consumer_notes) MaterialEditText mAddConsumerNotes; @Inject ConsumerDao mConsumerDao; private DatePickerFragment mDatePickerFragment; private Calendar mSelectCalendar; private Integer mType; private ConsumerDetail mConsumerDetail; public static void start(Activity activity, int type, ConsumerDetail consumerDetail){ Intent intent = new Intent(activity, AddConsumerActivity.class); intent.putExtra(PARAMS_TYPE, type); if(null != consumerDetail){ intent.putExtra(PARAMS_CONSUMER, consumerDetail); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInMultiWindowMode()){ intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT); } activity.startActivity(intent); } @Override public int getLayoutResId() { return R.layout.activity_add_consumer; } @Override protected boolean canBack() { return true; } @Override public void initView(Bundle savedInstanceState) { ((CarApplication)getApplicationContext()).getAppComponent().inject(this); super.initView(savedInstanceState); if(getIntent().hasExtra(PARAMS_TYPE)){ mType = getIntent().getIntExtra(PARAMS_TYPE, TYPE_ADD); } if(getIntent().hasExtra(PARAMS_CONSUMER)){ mConsumerDetail = (ConsumerDetail) getIntent().getSerializableExtra(PARAMS_CONSUMER); } if(null == mType || (mType == TYPE_MODIFY && null == mConsumerDetail)){ finish(); return; } getToolbar().setOnMenuItemClickListener(this); setTitle(mType == TYPE_ADD ? R.string.add_consumer_title : R.string.modify_consumer_title); mSpinner.setItems(Consts.TYPE_MENUS); mFuelSpinner.setItems(Consts.FUEL_MENUS); mSpinner.setOnItemSelectedListener(this); addSubscription( RxView.clicks(mConsumerTime) .throttleFirst(Consts.SHIELD_TIME, TimeUnit.SECONDS) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { showDatePickerFragment(); } }) ); initValues(); } private void initValues(){ if(mType == TYPE_ADD){ mSpinner.setSelectedIndex(Consts.TYPE_FUEL); mFuelSpinner.setSelectedIndex(Consts.FUEL_GASOLINE_92); }else if(mType == TYPE_MODIFY){ mSelectCalendar = Calendar.getInstance(); mSelectCalendar.setTimeInMillis(mConsumerDetail.getConsumptionTime()); mSpinner.setSelectedIndex(mConsumerDetail.getType()); mConsumerTime.setText(DateUtil.formatDate(DateUtil.FORMAT_DATE, mConsumerDetail.getConsumptionTime())); Util.setText(mAddConsumerMoney, mConsumerDetail.getMoney()); mAddConsumerNotes.setText(TextUtils.isEmpty(mConsumerDetail.getNotes()) ? EMPTY : mConsumerDetail.getNotes()); setFuelViews(mConsumerDetail.getType() == Consts.TYPE_FUEL ? View.VISIBLE : View.GONE); if(mConsumerDetail.getType() == Consts.TYPE_FUEL){ mFuelSpinner.setSelectedIndex(mConsumerDetail.getOilType()); Util.setText(mAddConsumerUnitPrice, mConsumerDetail.getUnitPrice()); Util.setText(mAddConsumerCurrentMileage, mConsumerDetail.getCurrentMileage()); } } } private boolean verifyData(){ long time = System.currentTimeMillis(); if(mType == TYPE_ADD){ mConsumerDetail = new ConsumerDetail(); mConsumerDetail.setCreateTime(time); } mConsumerDetail.setLastUpdateTime(time); mConsumerDetail.setType(mSpinner.getSelectedIndex()); final String money = mAddConsumerMoney.getText().toString().trim(); if (TextUtils.isEmpty(money)) { ToastUtil.showToast(mAppContext, R.string.consumer_money_hint); Util.setFocusable(mAddConsumerMoney); return false; } mConsumerDetail.setMoney(Float.valueOf(money)); if (null == mSelectCalendar) { ToastUtil.showToast(mAppContext, R.string.consumer_select_time_hint); return false; } mConsumerDetail.setConsumptionTime(mSelectCalendar.getTimeInMillis()); if (mSpinner.getSelectedIndex() == Consts.TYPE_FUEL) { final String unitPrice = mAddConsumerUnitPrice.getText().toString().trim(); if (TextUtils.isEmpty(unitPrice)){ ToastUtil.showToast(mAppContext, R.string.consumer_unit_price_hint); Util.setFocusable(mAddConsumerUnitPrice); return false; } final String currentMileage = mAddConsumerCurrentMileage.getText().toString().trim(); if(TextUtils.isEmpty(currentMileage)){ ToastUtil.showToast(mAppContext, R.string.consumer_current_mileage_hint); Util.setFocusable(mAddConsumerCurrentMileage); return false; } mConsumerDetail.setOilType(mFuelSpinner.getSelectedIndex()); mConsumerDetail.setUnitPrice(Float.valueOf(unitPrice)); mConsumerDetail.setCurrentMileage(Long.valueOf(currentMileage)); } final String notes = mAddConsumerNotes.getText().toString().trim(); if(!TextUtils.isEmpty(notes)){ mConsumerDetail.setNotes(notes); } return true; } private void addConsumer() { if(!verifyData()) { return; } if(mConsumerDao.insert(mConsumerDetail) > 0){ ToastUtil.showToast(mAppContext, R.string.add_consumer_success); reset(); } else { ToastUtil.showToast(mAppContext, R.string.add_consumer_fail); } } private void modifyConsumer() { if(!verifyData()) { return; } if (mConsumerDao.update(mConsumerDetail) > 0){ ToastUtil.showToast(mAppContext, R.string.modify_consumer_success); finish(); } else { ToastUtil.showToast(mAppContext, R.string.modify_consumer_fail); } } private void showDatePickerFragment() { if (null == mDatePickerFragment) { mDatePickerFragment = DatePickerFragment.newInstance(); mDatePickerFragment.setCallback(this); } mDatePickerFragment.show(getSupportFragmentManager(), TAG); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(mType == TYPE_ADD ? R.menu.add_menu : R.menu.modify_menu, menu); return true; } @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.action_add) { addConsumer(); }else if(item.getItemId() == R.id.action_modify){ modifyConsumer(); } return true; } @Override public void onItemSelected(MaterialSpinner view, int position, long id, Object item) { final int visibility = position == Consts.TYPE_FUEL ? View.VISIBLE : View.GONE; setFuelViews(visibility); } private void setFuelViews(int visibility){ mAddConsumerUnitPrice.setVisibility(visibility); mAddConsumerCurrentMileage.setVisibility(visibility); mFuelLayout.setVisibility(visibility); } private void reset() { mSpinner.setSelectedIndex(Consts.TYPE_FUEL); mFuelSpinner.setSelectedIndex(Consts.FUEL_GASOLINE_92); mAddConsumerMoney.setText(EMPTY); mAddConsumerUnitPrice.setText(EMPTY); mAddConsumerCurrentMileage.setText(EMPTY); mAddConsumerNotes.setText(EMPTY); mConsumerTime.setText(R.string.consumer_select_time_hint); setFuelViews(View.VISIBLE); Util.setFocusable(mAddConsumerMoney); mSelectCalendar = null; } @Override public void onCancel() { } @Override public void onFinish(Calendar calendar) { this.mSelectCalendar = calendar; mConsumerTime.setText(DateUtil.formatDate(DateUtil.FORMAT_DATE, calendar.getTimeInMillis())); } }