1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14
15package android.support.v17.leanback.supportleanbackshowcase.app.wizard;
16
17import android.app.FragmentManager;
18import android.graphics.Color;
19import android.graphics.drawable.Drawable;
20import android.os.Bundle;
21import android.support.annotation.NonNull;
22import android.support.v17.leanback.app.GuidedStepFragment;
23import android.support.v17.leanback.supportleanbackshowcase.R;
24import android.support.v17.leanback.widget.GuidanceStylist;
25import android.support.v17.leanback.widget.GuidedAction;
26import android.support.v17.leanback.widget.GuidedActionsStylist;
27import android.widget.Toast;
28
29import java.util.ArrayList;
30import java.util.List;
31
32/**
33 * Displays the second screen of the rental wizard which requires the user to confirm his purchase.
34 */
35public class WizardExample2ndStepFragment extends WizardExampleBaseStepFragment {
36
37    private static final String ARG_HD = "hd";
38    private static final int ACTION_ID_CONFIRM = 1;
39    private static final int ACTION_ID_PAYMENT_METHOD = ACTION_ID_CONFIRM + 1;
40    private static final int ACTION_ID_NEW_PAYMENT = ACTION_ID_PAYMENT_METHOD + 1;
41
42    protected static ArrayList<String> sCards = new ArrayList();
43    protected static int sSelectedCard = -1;
44
45    static {
46        sCards.add("Visa-1234");
47        sCards.add("Master-4321");
48    }
49
50
51    public static GuidedStepFragment build(boolean hd, WizardExampleBaseStepFragment previousFragment) {
52        GuidedStepFragment fragment = new WizardExample2ndStepFragment();
53        // Reuse the same arguments this fragment was given.
54        Bundle args = previousFragment.getArguments();
55        args.putBoolean(ARG_HD, hd);
56        fragment.setArguments(args);
57        return fragment;
58    }
59
60    @NonNull
61    @Override
62    public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
63        GuidanceStylist.Guidance guidance = new GuidanceStylist.Guidance(mMovie.getTitle(),
64                getString(R.string.wizard_example_rental_period),
65                mMovie.getBreadcrump(), null);
66        return guidance;
67
68    }
69
70    @Override
71    public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
72        boolean rentHighDefinition = getArguments().getBoolean(ARG_HD);
73
74        GuidedAction action = new GuidedAction.Builder(getActivity())
75                .id(ACTION_ID_CONFIRM)
76                .title(R.string.wizard_example_rent)
77                .description(rentHighDefinition ? mMovie.getPriceHd() : mMovie.getPriceSd())
78                .editable(false)
79                .build();
80        action.setEnabled(false);
81        actions.add(action);
82        List<GuidedAction> subActions = new ArrayList();
83        action = new GuidedAction.Builder(getActivity())
84                .id(ACTION_ID_PAYMENT_METHOD)
85                .title(R.string.wizard_example_payment_method)
86                .editTitle("")
87                .description(R.string.wizard_example_input_credit)
88                .subActions(subActions)
89                .build();
90        actions.add(action);
91    }
92
93    @Override
94    public void onResume() {
95        super.onResume();
96        GuidedAction payment = findActionById(ACTION_ID_PAYMENT_METHOD);
97
98        List<GuidedAction> paymentSubActions = payment.getSubActions();
99        paymentSubActions.clear();
100        for (int i = 0; i < sCards.size(); i++) {
101            paymentSubActions.add(new GuidedAction.Builder(getActivity())
102                            .title(sCards.get(i))
103                            .description("")
104                            .checkSetId(GuidedAction.DEFAULT_CHECK_SET_ID)
105                            .build()
106            );
107        }
108        paymentSubActions.add(new GuidedAction.Builder(getActivity())
109                .id(ACTION_ID_NEW_PAYMENT)
110                .title("Add New Card")
111                .description("")
112                .editable(false)
113                .build()
114        );
115        if ( sSelectedCard >= 0 && sSelectedCard < sCards.size() ) {
116            payment.setDescription(sCards.get(sSelectedCard));
117            findActionById(ACTION_ID_CONFIRM).setEnabled(true);
118        } else
119            findActionById(ACTION_ID_CONFIRM).setEnabled(false);
120        notifyActionChanged(findActionPositionById(ACTION_ID_CONFIRM));
121    }
122
123    @Override
124    public boolean onSubGuidedActionClicked(GuidedAction action) {
125
126        if (action.isChecked()) {
127            String payment = action.getTitle().toString();
128            if ( (sSelectedCard = sCards.indexOf(payment)) != -1 ) {
129                findActionById(ACTION_ID_PAYMENT_METHOD).setDescription(payment);
130                notifyActionChanged(findActionPositionById(ACTION_ID_PAYMENT_METHOD));
131                findActionById(ACTION_ID_CONFIRM).setEnabled(true);
132                notifyActionChanged(findActionPositionById(ACTION_ID_CONFIRM));
133            }
134            return true;
135        } else {
136            FragmentManager fm = getFragmentManager();
137            GuidedStepFragment fragment = new WizardNewPaymentStepFragment();
138            fragment.setArguments(getArguments());
139            add(fm, fragment);
140            return false;
141        }
142    }
143
144    @Override
145    public void onGuidedActionClicked(GuidedAction action) {
146        if (ACTION_ID_CONFIRM == action.getId()) {
147            GuidedStepFragment fragment = new WizardExample3rdStepFragment();
148            fragment.setArguments(getArguments());
149            add(getFragmentManager(), fragment);
150        }
151    }
152}
153