diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java index 11cc403a6..1c199e053 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepActivity.java @@ -25,6 +25,7 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v17.leanback.app.GuidedStepFragment; import android.support.v17.leanback.widget.GuidedAction; +import android.support.v17.leanback.widget.GuidedDatePickerAction; import android.support.v17.leanback.widget.GuidedActionsStylist; import android.support.v17.leanback.widget.GuidanceStylist; import android.support.v17.leanback.widget.GuidanceStylist.Guidance; @@ -37,6 +38,7 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.inputmethod.EditorInfo; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; /** @@ -51,6 +53,7 @@ public class GuidedStepActivity extends Activity { private static final int PASSWORD = 5; private static final int PAYMENT = 6; private static final int NEW_PAYMENT = 7; + private static final int PAYMENT_EXPIRE = 8; private static final int OPTION_CHECK_SET_ID = 10; private static final int DEFAULT_OPTION = 0; @@ -139,6 +142,14 @@ public class GuidedStepActivity extends Activity { .build()); } + private static void addDatePickerAction(List actions, long id, String title) { + actions.add(new GuidedDatePickerAction.Builder(null) + .id(id) + .title(title) + .datePickerFormat("MY") + .build()); + } + private static void addEditableDescriptionAction(List actions, long id, String title, String desc, String editDescription, int descriptionEditInputType) { actions.add(new GuidedAction.Builder() @@ -223,6 +234,7 @@ public class GuidedStepActivity extends Activity { addEditableAction(actions, NEW_PAYMENT, "Input credit card number", "", InputType.TYPE_CLASS_NUMBER, "Input credit card number", "Input credit card number"); + addDatePickerAction(actions, PAYMENT_EXPIRE, "Exp:"); } @Override @@ -255,10 +267,10 @@ public class GuidedStepActivity extends Activity { public long onGuidedActionEditedAndProceed(GuidedAction action) { if (action.getId() == NEW_PAYMENT) { CharSequence editTitle = action.getEditTitle(); - if (TextUtils.isDigitsOnly(editTitle) && editTitle.length() == 16) { + if (isCardNumberValid(editTitle)) { editTitle = editTitle.subSequence(editTitle.length() - 4, editTitle.length()); action.setDescription("Visa XXXX-XXXX-XXXX-" + editTitle); - updateOkButton(true); + updateOkButton(isExpDateValid(findActionById(PAYMENT_EXPIRE))); return GuidedAction.ACTION_ID_NEXT; } else if (editTitle.length() == 0) { action.setDescription("Input credit card number"); @@ -269,10 +281,24 @@ public class GuidedStepActivity extends Activity { updateOkButton(false); return GuidedAction.ACTION_ID_CURRENT; } + } else if (action.getId() == PAYMENT_EXPIRE) { + updateOkButton(isExpDateValid(action) && + isCardNumberValid(findActionById(NEW_PAYMENT).getEditTitle())); } return GuidedAction.ACTION_ID_NEXT; } + boolean isCardNumberValid(CharSequence number) { + return TextUtils.isDigitsOnly(number) && number.length() == 16; + } + + boolean isExpDateValid(GuidedAction action) { + long date = ((GuidedDatePickerAction) action).getDate(); + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(date); + return Calendar.getInstance().before(c); + } + void updateOkButton(boolean enabled) { findButtonActionById(GuidedAction.ACTION_ID_OK).setEnabled(enabled); notifyButtonActionChanged(findButtonActionPositionById(GuidedAction.ACTION_ID_OK)); diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java index bfc50f6fe..0e527d92a 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/GuidedStepSupportActivity.java @@ -27,6 +27,7 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v17.leanback.app.GuidedStepSupportFragment; import android.support.v17.leanback.widget.GuidedAction; +import android.support.v17.leanback.widget.GuidedDatePickerAction; import android.support.v17.leanback.widget.GuidedActionsStylist; import android.support.v17.leanback.widget.GuidanceStylist; import android.support.v17.leanback.widget.GuidanceStylist.Guidance; @@ -39,6 +40,7 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.inputmethod.EditorInfo; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; /** @@ -53,6 +55,7 @@ public class GuidedStepSupportActivity extends FragmentActivity { private static final int PASSWORD = 5; private static final int PAYMENT = 6; private static final int NEW_PAYMENT = 7; + private static final int PAYMENT_EXPIRE = 8; private static final int OPTION_CHECK_SET_ID = 10; private static final int DEFAULT_OPTION = 0; @@ -141,6 +144,14 @@ public class GuidedStepSupportActivity extends FragmentActivity { .build()); } + private static void addDatePickerAction(List actions, long id, String title) { + actions.add(new GuidedDatePickerAction.Builder(null) + .id(id) + .title(title) + .datePickerFormat("MY") + .build()); + } + private static void addEditableDescriptionAction(List actions, long id, String title, String desc, String editDescription, int descriptionEditInputType) { actions.add(new GuidedAction.Builder() @@ -225,6 +236,7 @@ public class GuidedStepSupportActivity extends FragmentActivity { addEditableAction(actions, NEW_PAYMENT, "Input credit card number", "", InputType.TYPE_CLASS_NUMBER, "Input credit card number", "Input credit card number"); + addDatePickerAction(actions, PAYMENT_EXPIRE, "Exp:"); } @Override @@ -257,10 +269,10 @@ public class GuidedStepSupportActivity extends FragmentActivity { public long onGuidedActionEditedAndProceed(GuidedAction action) { if (action.getId() == NEW_PAYMENT) { CharSequence editTitle = action.getEditTitle(); - if (TextUtils.isDigitsOnly(editTitle) && editTitle.length() == 16) { + if (isCardNumberValid(editTitle)) { editTitle = editTitle.subSequence(editTitle.length() - 4, editTitle.length()); action.setDescription("Visa XXXX-XXXX-XXXX-" + editTitle); - updateOkButton(true); + updateOkButton(isExpDateValid(findActionById(PAYMENT_EXPIRE))); return GuidedAction.ACTION_ID_NEXT; } else if (editTitle.length() == 0) { action.setDescription("Input credit card number"); @@ -271,10 +283,24 @@ public class GuidedStepSupportActivity extends FragmentActivity { updateOkButton(false); return GuidedAction.ACTION_ID_CURRENT; } + } else if (action.getId() == PAYMENT_EXPIRE) { + updateOkButton(isExpDateValid(action) && + isCardNumberValid(findActionById(NEW_PAYMENT).getEditTitle())); } return GuidedAction.ACTION_ID_NEXT; } + boolean isCardNumberValid(CharSequence number) { + return TextUtils.isDigitsOnly(number) && number.length() == 16; + } + + boolean isExpDateValid(GuidedAction action) { + long date = ((GuidedDatePickerAction) action).getDate(); + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(date); + return Calendar.getInstance().before(c); + } + void updateOkButton(boolean enabled) { findButtonActionById(GuidedAction.ACTION_ID_OK).setEnabled(enabled); notifyButtonActionChanged(findButtonActionPositionById(GuidedAction.ACTION_ID_OK));