Add example of DatePicker

Bug 25390757

Change-Id: Iec578a2a195a7f8c6873fd95ceb08a33f502894b
This commit is contained in:
Dake Gu
2016-01-11 12:06:09 -08:00
parent f5b1907589
commit 7d3da1d678
2 changed files with 56 additions and 4 deletions

View File

@@ -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;
@@ -137,6 +140,14 @@ public class GuidedStepActivity extends Activity {
.build());
}
private static void addDatePickerAction(List<GuidedAction> actions, long id, String title) {
actions.add(new GuidedDatePickerAction.Builder(null)
.id(id)
.title(title)
.datePickerFormat("MY")
.build());
}
private static void addEditableDescriptionAction(List<GuidedAction> actions, long id,
String title, String desc, String editDescription, int descriptionEditInputType) {
actions.add(new GuidedAction.Builder()
@@ -221,6 +232,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
@@ -253,10 +265,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");
@@ -267,10 +279,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));

View File

@@ -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;
@@ -139,6 +142,14 @@ public class GuidedStepSupportActivity extends FragmentActivity {
.build());
}
private static void addDatePickerAction(List<GuidedAction> actions, long id, String title) {
actions.add(new GuidedDatePickerAction.Builder(null)
.id(id)
.title(title)
.datePickerFormat("MY")
.build());
}
private static void addEditableDescriptionAction(List<GuidedAction> actions, long id,
String title, String desc, String editDescription, int descriptionEditInputType) {
actions.add(new GuidedAction.Builder()
@@ -223,6 +234,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
@@ -255,10 +267,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");
@@ -269,10 +281,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));