From 945d8d29706b66dfc2a3b134a73b9a3f70fc1a84 Mon Sep 17 00:00:00 2001 From: Monomachus Date: Fri, 17 Apr 2015 12:36:36 +0300 Subject: [PATCH] Added support for Dates --- res/layout/fragment_date.xml | 21 +++ res/values/strings.xml | 1 + .../wizardpager/SandwichWizardModel.java | 3 + .../wizardpager/wizard/model/DatePage.java | 36 +++++ .../wizardpager/wizard/ui/DateFragment.java | 129 ++++++++++++++++++ 5 files changed, 190 insertions(+) create mode 100644 res/layout/fragment_date.xml create mode 100644 src/com/example/android/wizardpager/wizard/model/DatePage.java create mode 100644 src/com/example/android/wizardpager/wizard/ui/DateFragment.java diff --git a/res/layout/fragment_date.xml b/res/layout/fragment_date.xml new file mode 100644 index 0000000..243252f --- /dev/null +++ b/res/layout/fragment_date.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index b2baedb..64930d1 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -30,4 +30,5 @@ Place the order with the deli? You will receive an email confirmation. Place order + Date ... diff --git a/src/com/example/android/wizardpager/SandwichWizardModel.java b/src/com/example/android/wizardpager/SandwichWizardModel.java index 3359f5a..3be929b 100644 --- a/src/com/example/android/wizardpager/SandwichWizardModel.java +++ b/src/com/example/android/wizardpager/SandwichWizardModel.java @@ -19,6 +19,7 @@ import com.example.android.wizardpager.wizard.model.AbstractWizardModel; import com.example.android.wizardpager.wizard.model.BranchPage; import com.example.android.wizardpager.wizard.model.CustomerInfoPage; +import com.example.android.wizardpager.wizard.model.DatePage; import com.example.android.wizardpager.wizard.model.MultipleFixedChoicePage; import com.example.android.wizardpager.wizard.model.PageList; import com.example.android.wizardpager.wizard.model.SingleFixedChoicePage; @@ -72,6 +73,8 @@ protected PageList onNewRootPageList() { .setRequired(true), + new DatePage(this, "When do you want this order to arrive ?").setRequired(true), + new CustomerInfoPage(this, "Your info") .setRequired(true) ); diff --git a/src/com/example/android/wizardpager/wizard/model/DatePage.java b/src/com/example/android/wizardpager/wizard/model/DatePage.java new file mode 100644 index 0000000..04594c9 --- /dev/null +++ b/src/com/example/android/wizardpager/wizard/model/DatePage.java @@ -0,0 +1,36 @@ +package com.example.android.wizardpager.wizard.model; + + +import android.support.v4.app.Fragment; +import android.text.TextUtils; + +import com.example.android.wizardpager.wizard.ui.DateFragment; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Locale; + +public class DatePage extends Page { + + public static final String DATE_DATA_KEY = "date"; + public static SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US); + + public DatePage(ModelCallbacks callbacks, String title) { + super(callbacks, title); + } + + @Override + public Fragment createFragment() { + return DateFragment.create(getKey()); + } + + @Override + public void getReviewItems(ArrayList dest) { + dest.add(new ReviewItem(getTitle(), mData.getString(DATE_DATA_KEY), getKey())); + } + + @Override + public boolean isCompleted() { + return !TextUtils.isEmpty(mData.getString(DATE_DATA_KEY)); + } +} \ No newline at end of file diff --git a/src/com/example/android/wizardpager/wizard/ui/DateFragment.java b/src/com/example/android/wizardpager/wizard/ui/DateFragment.java new file mode 100644 index 0000000..ea162b1 --- /dev/null +++ b/src/com/example/android/wizardpager/wizard/ui/DateFragment.java @@ -0,0 +1,129 @@ +package com.example.android.wizardpager.wizard.ui; + +import android.app.Activity; +import android.app.DatePickerDialog; +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.TextView; + +import com.example.android.wizardpager.R; +import com.example.android.wizardpager.wizard.model.DatePage; + +import java.util.Calendar; + +public class DateFragment extends Fragment { + + private static final String ARG_KEY = "key"; + + private PageFragmentCallbacks mCallbacks; + private String mKey; + private DatePage mPage; + private EditText mDateView; + private DatePickerDialog mDatePickerDialog; + + public static DateFragment create(String key) { + Bundle args = new Bundle(); + args.putString(ARG_KEY, key); + + DateFragment fragment = new DateFragment(); + fragment.setArguments(args); + return fragment; + } + + public DateFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle args = getArguments(); + mKey = args.getString(ARG_KEY); + mPage = (DatePage) mCallbacks.onGetPage(mKey); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View rootView = inflater.inflate(R.layout.fragment_date, container, false); + + ((TextView) rootView.findViewById(android.R.id.title)).setText(mPage.getTitle()); + + mDateView = ((EditText) rootView.findViewById(R.id.etDate)); + mDateView.setText(mPage.getData().getString(DatePage.DATE_DATA_KEY)); + + return rootView; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + + if (!(activity instanceof PageFragmentCallbacks)) { + throw new ClassCastException("Activity must implement PageFragmentCallbacks"); + } + + mCallbacks = (PageFragmentCallbacks) activity; + } + + @Override + public void onDetach() { + super.onDetach(); + mCallbacks = null; + } + + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + mDateView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mDatePickerDialog.show(); + } + }); + + Calendar newCalendar = Calendar.getInstance(); + mDatePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { + + public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { + Calendar newDate = Calendar.getInstance(); + newDate.set(year, monthOfYear, dayOfMonth); + + String formattedDate = DatePage.dateFormatter.format(newDate.getTime()); + + mDateView.setText(formattedDate); + + mPage.getData().putString(DatePage.DATE_DATA_KEY, formattedDate); + mPage.notifyDataChanged(); + } + + },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); + } + + @Override + public void setMenuVisibility(boolean menuVisible) { + super.setMenuVisibility(menuVisible); + + // In a future update to the support library, this should override setUserVisibleHint + // instead of setMenuVisibility. + if (mDateView != null) { + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService( + Context.INPUT_METHOD_SERVICE); + if (!menuVisible) { + imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); + } + } + } +}