package com.databases.example.features.checkbook.transactions; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import com.databases.example.R; import com.databases.example.database.DatabaseHelper; import com.databases.example.database.MyContentProvider; import com.databases.example.utils.DateTime; import com.databases.example.utils.Money; import com.wizardpager.wizard.WizardDialogFragment; import com.wizardpager.wizard.model.AbstractWizardModel; import com.wizardpager.wizard.model.PageList; import com.wizardpager.wizard.ui.StepPagerStrip; import java.util.Locale; public class TransactionWizard extends WizardDialogFragment { private final AbstractWizardModel mWizardModel = new TransactionWizardModel(getActivity()); public static TransactionWizard newInstance(Transaction record) { TransactionWizard frag = new TransactionWizard(); if (record != null) { final Bundle bundle = new Bundle(); final Bundle bdl1 = new Bundle(); bdl1.putInt("id", record.id); bdl1.putInt("acct_id", record.acctId); bdl1.putInt("plan_id", record.planId); bdl1.putString("name", record.name); bdl1.putString("value", record.value); bdl1.putString("type", record.type); bdl1.putString("category", record.category); bundle.putBundle("Transaction Info", bdl1); final Bundle bdl2 = new Bundle(); bdl2.putString("checknum", record.checknum); bdl2.putString("memo", record.memo); bdl2.putString("date", record.date); bdl2.putString("time", record.time); bdl2.putString("cleared", record.cleared); bundle.putBundle("Optional", bdl2); frag.setArguments(bundle); } return frag; } //Set Style & Theme of Dialog @SuppressLint("InlinedApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (android.os.Build.VERSION.SDK_INT > 14) { setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_DeviceDefault_Light_Dialog); } else { setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Dialog); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myFragmentView = inflater.inflate(R.layout.wizard, container, false); ViewPager mPager = (ViewPager) myFragmentView.findViewById(R.id.pager); mPager.setOffscreenPageLimit(5); StepPagerStrip mStepPagerStrip = (StepPagerStrip) myFragmentView.findViewById(R.id.strip); Button mNextButton = (Button) myFragmentView.findViewById(R.id.next_button); Button mPrevButton = (Button) myFragmentView.findViewById(R.id.prev_button); setControls(mPager, mStepPagerStrip, mNextButton, mPrevButton); //Load Data into Wizard final Bundle bundle = getArguments(); if (bundle != null) { mWizardModel.load(bundle); } return myFragmentView; } //Create Wizard @Override public AbstractWizardModel onCreateModel() { return mWizardModel; } //Method that runs after wizard is finished @Override public void onSubmit() { final Bundle bundleInfo = mWizardModel.findByKey("Transaction Info").getData(); final Bundle bundleOptional = mWizardModel.findByKey("Optional").getData(); final Locale locale = getResources().getConfiguration().locale; String value = ""; final DateTime transactionDate = new DateTime(); transactionDate.setStringReadable(bundleOptional.getString(TransactionWizardOptionalPage.DATE_DATA_KEY).trim()); final DateTime transactionTime = new DateTime(); transactionTime.setStringReadable(bundleOptional.getString(TransactionWizardOptionalPage.TIME_DATA_KEY).trim()); //Check to see if value is a number boolean validValue; try { Money transactionValue = new Money(bundleInfo.getString(TransactionWizardInfoPage.VALUE_DATA_KEY).trim()); value = transactionValue.getBigDecimal(locale) + ""; validValue = true; } catch (Exception e) { validValue = false; Toast.makeText(getActivity(), "Please enter a valid value", Toast.LENGTH_SHORT).show(); } if (validValue) { getDialog().cancel(); if (getArguments() != null) { ContentValues transactionValues = new ContentValues(); transactionValues.put(DatabaseHelper.TRANS_ID, bundleInfo.getInt(TransactionWizardInfoPage.ID_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_ACCT_ID, bundleInfo.getInt(TransactionWizardInfoPage.ACCOUNT_ID_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_PLAN_ID, bundleInfo.getInt(TransactionWizardInfoPage.PLAN_ID_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_NAME, bundleInfo.getString(TransactionWizardInfoPage.NAME_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_VALUE, value); transactionValues.put(DatabaseHelper.TRANS_TYPE, bundleInfo.getString(TransactionWizardInfoPage.TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_CATEGORY, bundleInfo.getString(TransactionWizardInfoPage.CATEGORY_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_CHECKNUM, bundleOptional.getString(TransactionWizardOptionalPage.CHECKNUM_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_MEMO, bundleOptional.getString(TransactionWizardOptionalPage.MEMO_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_TIME, transactionTime.getSQLTime(locale)); transactionValues.put(DatabaseHelper.TRANS_DATE, transactionDate.getSQLDate(locale)); transactionValues.put(DatabaseHelper.TRANS_CLEARED, bundleOptional.getString(TransactionWizardOptionalPage.CLEARED_DATA_KEY)); getActivity().getContentResolver().update(Uri.parse(MyContentProvider.TRANSACTIONS_URI + "/" + bundleInfo.getInt(TransactionWizardInfoPage.ID_DATA_KEY)), transactionValues, DatabaseHelper.TRANS_ID + "=" + bundleInfo.getInt(TransactionWizardInfoPage.ID_DATA_KEY), null); } else { ContentValues transactionValues = new ContentValues(); transactionValues.put(DatabaseHelper.TRANS_ACCT_ID, TransactionsFragment.account.id); transactionValues.put(DatabaseHelper.TRANS_PLAN_ID, -1); transactionValues.put(DatabaseHelper.TRANS_NAME, bundleInfo.getString(TransactionWizardInfoPage.NAME_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_VALUE, value); transactionValues.put(DatabaseHelper.TRANS_TYPE, bundleInfo.getString(TransactionWizardInfoPage.TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_CATEGORY, bundleInfo.getString(TransactionWizardInfoPage.CATEGORY_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_CHECKNUM, bundleOptional.getString(TransactionWizardOptionalPage.CHECKNUM_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_MEMO, bundleOptional.getString(TransactionWizardOptionalPage.MEMO_DATA_KEY)); transactionValues.put(DatabaseHelper.TRANS_TIME, transactionTime.getSQLTime(locale)); transactionValues.put(DatabaseHelper.TRANS_DATE, transactionDate.getSQLDate(locale)); transactionValues.put(DatabaseHelper.TRANS_CLEARED, bundleOptional.getString(TransactionWizardOptionalPage.CLEARED_DATA_KEY)); getActivity().getContentResolver().insert(MyContentProvider.TRANSACTIONS_URI, transactionValues); } } } //Allow back button to be used to go back a step in the wizard @Override public boolean useBackForPrevious() { return true; } } class TransactionWizardModel extends AbstractWizardModel { public TransactionWizardModel(Context context) { super(context); } @Override protected PageList onNewRootPageList() { return new PageList( new TransactionWizardInfoPage(this, "Transaction Info") .setRequired(true), new TransactionWizardOptionalPage(this, "Optional") ); } }