blob: a42ab9e80e62d84f971d9b5e293386c695bc5be6 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.support.v17.leanback.supportleanbackshowcase.app.wizard;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v17.leanback.supportleanbackshowcase.R;
import android.support.v17.leanback.widget.GuidanceStylist;
import android.support.v17.leanback.widget.GuidedAction;
import android.support.v17.leanback.widget.GuidedDatePickerAction;
import android.text.TextUtils;
import java.util.Calendar;
import java.util.List;
/**
* A fragment for allowing users to enter a new payment information.
*/
public class WizardNewPaymentStepFragment extends WizardExampleBaseStepFragment {
private static final int ACTION_ID_CARD_NUMBER = 1;
private static final int ACTION_ID_PAYMENT_EXP = ACTION_ID_CARD_NUMBER + 1;
@NonNull
@Override
public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
String title = getString(R.string.wizard_example_new_payment_guidance_title);
String description = getString(R.string.wizard_example_new_payment_guidance_description);
String breadcrumb = mMovie.getBreadcrump();
GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(title, description,
breadcrumb, null);
return guidance;
}
@Override
public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
actions.add(new GuidedAction.Builder(getActivity())
.id(ACTION_ID_CARD_NUMBER)
.title(R.string.wizard_example_input_card)
.editTitle("")
.description(R.string.wizard_example_input_card)
.editDescription("Card number")
.editable(true)
.build()
);
actions.add(new GuidedDatePickerAction.Builder(getActivity())
.id(ACTION_ID_PAYMENT_EXP)
.title(R.string.wizard_example_expiration_date)
.datePickerFormat("MY")
.build()
);
}
@Override
public void onCreateButtonActions(@NonNull List<GuidedAction> actions,
Bundle savedInstanceState) {
actions.add(new GuidedAction.Builder(getActivity())
.clickAction(GuidedAction.ACTION_ID_OK)
.build()
);
actions.get(actions.size() - 1).setEnabled(false);
}
@Override
public void onGuidedActionClicked(GuidedAction action) {
if (action.getId() == GuidedAction.ACTION_ID_OK) {
CharSequence cardNumber = findActionById(ACTION_ID_CARD_NUMBER).getDescription();
WizardExample2ndStepFragment.sSelectedCard = WizardExample2ndStepFragment.sCards.size();
WizardExample2ndStepFragment.sCards.add(cardNumber.toString());
popBackStackToGuidedStepFragment(WizardNewPaymentStepFragment.class,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
@Override
public long onGuidedActionEditedAndProceed(GuidedAction action) {
boolean cardNumberCheck = false;
boolean expDateCheck = false;
if (action.getId() == ACTION_ID_CARD_NUMBER) {
CharSequence cardNumber = action.getEditTitle();
cardNumberCheck = isCardNumberValid(cardNumber);
expDateCheck = isExpDateValid(findActionById(ACTION_ID_PAYMENT_EXP));
updateOkButton(cardNumberCheck && expDateCheck);
if (cardNumberCheck) {
String last4Digits = cardNumber.subSequence(cardNumber.length() - 4,
cardNumber.length()).toString();
if ( (Integer.parseInt(last4Digits) & 1) == 0 )
action.setDescription(getString(R.string.wizard_example_visa,
last4Digits));
else
action.setDescription(getString(R.string.wizard_example_master,
last4Digits));
return GuidedAction.ACTION_ID_NEXT;
} else if (cardNumber.length() == 0) {
action.setDescription(getString(R.string.wizard_example_input_card));
return GuidedAction.ACTION_ID_CURRENT;
} else {
action.setDescription(getString(R.string.wizard_example_input_credit_wrong));
return GuidedAction.ACTION_ID_CURRENT;
}
} else if (action.getId() == ACTION_ID_PAYMENT_EXP) {
expDateCheck = isExpDateValid(action);
cardNumberCheck = isCardNumberValid(findActionById(ACTION_ID_CARD_NUMBER)
.getEditTitle());
updateOkButton(cardNumberCheck && expDateCheck);
if (expDateCheck) {
return GuidedAction.ACTION_ID_NEXT;
}
}
return GuidedAction.ACTION_ID_CURRENT;
}
private void updateOkButton(boolean enabled) {
findButtonActionById(GuidedAction.ACTION_ID_OK).setEnabled(enabled);
notifyButtonActionChanged(findButtonActionPositionById(GuidedAction.ACTION_ID_OK));
}
private static boolean isCardNumberValid(CharSequence number) {
return (TextUtils.isDigitsOnly(number) && number.length() == 16);
}
private static boolean isExpDateValid(GuidedAction dateAction) {
long date = ((GuidedDatePickerAction) dateAction).getDate();
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date);
return Calendar.getInstance().before(c);
}
}