120767a171ab46addb5d50248d4267db14c0c8883susnata/*
220767a171ab46addb5d50248d4267db14c0c8883susnata * Copyright (C) 2014 The Android Open Source Project
320767a171ab46addb5d50248d4267db14c0c8883susnata *
420767a171ab46addb5d50248d4267db14c0c8883susnata * Licensed under the Apache License, Version 2.0 (the "License");
520767a171ab46addb5d50248d4267db14c0c8883susnata * you may not use this file except in compliance with the License.
620767a171ab46addb5d50248d4267db14c0c8883susnata * You may obtain a copy of the License at
720767a171ab46addb5d50248d4267db14c0c8883susnata *
820767a171ab46addb5d50248d4267db14c0c8883susnata *      http://www.apache.org/licenses/LICENSE-2.0
920767a171ab46addb5d50248d4267db14c0c8883susnata *
1020767a171ab46addb5d50248d4267db14c0c8883susnata * Unless required by applicable law or agreed to in writing, software
1120767a171ab46addb5d50248d4267db14c0c8883susnata * distributed under the License is distributed on an "AS IS" BASIS,
1220767a171ab46addb5d50248d4267db14c0c8883susnata * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320767a171ab46addb5d50248d4267db14c0c8883susnata * See the License for the specific language governing permissions and
1420767a171ab46addb5d50248d4267db14c0c8883susnata * limitations under the License.
1520767a171ab46addb5d50248d4267db14c0c8883susnata */
1620767a171ab46addb5d50248d4267db14c0c8883susnata
1720767a171ab46addb5d50248d4267db14c0c8883susnatapackage com.example.android.leanback;
1820767a171ab46addb5d50248d4267db14c0c8883susnata
1920767a171ab46addb5d50248d4267db14c0c8883susnataimport android.app.Activity;
2020767a171ab46addb5d50248d4267db14c0c8883susnataimport android.app.FragmentManager;
2120767a171ab46addb5d50248d4267db14c0c8883susnataimport android.content.Context;
2220767a171ab46addb5d50248d4267db14c0c8883susnataimport android.graphics.drawable.Drawable;
2320767a171ab46addb5d50248d4267db14c0c8883susnataimport android.os.Bundle;
2420767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v17.leanback.app.GuidedStepFragment;
2520767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v17.leanback.widget.GuidanceStylist.Guidance;
2620767a171ab46addb5d50248d4267db14c0c8883susnataimport android.support.v17.leanback.widget.GuidedAction;
27b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Guimport android.support.v4.content.res.ResourcesCompat;
2820767a171ab46addb5d50248d4267db14c0c8883susnataimport android.util.Log;
2920767a171ab46addb5d50248d4267db14c0c8883susnata
3020767a171ab46addb5d50248d4267db14c0c8883susnataimport java.util.List;
3120767a171ab46addb5d50248d4267db14c0c8883susnata
3220767a171ab46addb5d50248d4267db14c0c8883susnata/**
3320767a171ab46addb5d50248d4267db14c0c8883susnata * Activity that showcases different aspects of GuidedStepFragments in half
3420767a171ab46addb5d50248d4267db14c0c8883susnata * screen mode. This is achieved by setting the theme for this activity
3520767a171ab46addb5d50248d4267db14c0c8883susnata * to {@code Theme.Example.Leanback.GuidedStep.Half}.
3620767a171ab46addb5d50248d4267db14c0c8883susnata */
3720767a171ab46addb5d50248d4267db14c0c8883susnatapublic class GuidedStepHalfScreenActivity extends Activity {
3820767a171ab46addb5d50248d4267db14c0c8883susnata    private static final String TAG = "leanback.GuidedStepSupportHalfScreenActivity";
3920767a171ab46addb5d50248d4267db14c0c8883susnata
4020767a171ab46addb5d50248d4267db14c0c8883susnata    @Override
4120767a171ab46addb5d50248d4267db14c0c8883susnata    protected void onCreate(Bundle savedInstanceState) {
4220767a171ab46addb5d50248d4267db14c0c8883susnata        Log.v(TAG, "onCreate");
4320767a171ab46addb5d50248d4267db14c0c8883susnata        super.onCreate(savedInstanceState);
4420767a171ab46addb5d50248d4267db14c0c8883susnata        setContentView(R.layout.guided_step_activity);
4520767a171ab46addb5d50248d4267db14c0c8883susnata        GuidedStepFragment.addAsRoot(this, new FirstStepFragment(), R.id.lb_guidedstep_host);
4620767a171ab46addb5d50248d4267db14c0c8883susnata    }
4720767a171ab46addb5d50248d4267db14c0c8883susnata
4820767a171ab46addb5d50248d4267db14c0c8883susnata    public static class FirstStepFragment extends GuidedStepFragment {
4920767a171ab46addb5d50248d4267db14c0c8883susnata
5020767a171ab46addb5d50248d4267db14c0c8883susnata       @Override
5120767a171ab46addb5d50248d4267db14c0c8883susnata        public Guidance onCreateGuidance(Bundle savedInstanceState) {
5220767a171ab46addb5d50248d4267db14c0c8883susnata            String title = getString(R.string.guidedstep_first_title);
5320767a171ab46addb5d50248d4267db14c0c8883susnata            String breadcrumb = getString(R.string.guidedstep_first_breadcrumb);
5420767a171ab46addb5d50248d4267db14c0c8883susnata            String description = getString(R.string.guidedstep_first_description);
55b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            final Context context = getActivity();
56b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            Drawable icon = ResourcesCompat.getDrawable(context.getResources(),
57b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                    R.drawable.ic_main_icon, context.getTheme());
5820767a171ab46addb5d50248d4267db14c0c8883susnata            return new Guidance(title, description, breadcrumb, icon);
5920767a171ab46addb5d50248d4267db14c0c8883susnata        }
6020767a171ab46addb5d50248d4267db14c0c8883susnata
6120767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
6220767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
6320767a171ab46addb5d50248d4267db14c0c8883susnata            Context context = getActivity();
6420767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
6520767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CONTINUE)
6620767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Just do it")
6720767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
6820767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
6920767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
7020767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Never mind")
7120767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
7220767a171ab46addb5d50248d4267db14c0c8883susnata        }
7320767a171ab46addb5d50248d4267db14c0c8883susnata
7420767a171ab46addb5d50248d4267db14c0c8883susnata        public FirstStepFragment() {
7520767a171ab46addb5d50248d4267db14c0c8883susnata            setEntranceTransitionType(GuidedStepFragment.SLIDE_FROM_BOTTOM);
7620767a171ab46addb5d50248d4267db14c0c8883susnata        }
7720767a171ab46addb5d50248d4267db14c0c8883susnata
7820767a171ab46addb5d50248d4267db14c0c8883susnata        /**
7920767a171ab46addb5d50248d4267db14c0c8883susnata         * This fragment could be used by an activity using theme
8020767a171ab46addb5d50248d4267db14c0c8883susnata         * {@code Theme.Leanback.GuidedStep.Half} or something else (BrowseActivity).
8120767a171ab46addb5d50248d4267db14c0c8883susnata         * In order to provide a consistent half screen experience under
8220767a171ab46addb5d50248d4267db14c0c8883susnata         * both scenarios, we override onProvideTheme method.
8320767a171ab46addb5d50248d4267db14c0c8883susnata         */
8420767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
8520767a171ab46addb5d50248d4267db14c0c8883susnata        public int onProvideTheme() {
8620767a171ab46addb5d50248d4267db14c0c8883susnata            return R.style.Theme_Example_Leanback_GuidedStep_Half;
8720767a171ab46addb5d50248d4267db14c0c8883susnata        }
8820767a171ab46addb5d50248d4267db14c0c8883susnata
8920767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
9020767a171ab46addb5d50248d4267db14c0c8883susnata        public void onGuidedActionClicked(GuidedAction action) {
9120767a171ab46addb5d50248d4267db14c0c8883susnata            FragmentManager fm = getFragmentManager();
9220767a171ab46addb5d50248d4267db14c0c8883susnata            if (action.getId() == GuidedAction.ACTION_ID_CONTINUE) {
9320767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepFragment.add(fm, new SecondStepFragment(), R.id.lb_guidedstep_host);
9420767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (action.getId() == GuidedAction.ACTION_ID_CANCEL){
9520767a171ab46addb5d50248d4267db14c0c8883susnata                finishGuidedStepFragments();
9620767a171ab46addb5d50248d4267db14c0c8883susnata            }
9720767a171ab46addb5d50248d4267db14c0c8883susnata        }
9820767a171ab46addb5d50248d4267db14c0c8883susnata    }
9920767a171ab46addb5d50248d4267db14c0c8883susnata
10020767a171ab46addb5d50248d4267db14c0c8883susnata    public static class SecondStepFragment extends GuidedStepFragment {
10120767a171ab46addb5d50248d4267db14c0c8883susnata
10220767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
10320767a171ab46addb5d50248d4267db14c0c8883susnata        public int onProvideTheme() {
10420767a171ab46addb5d50248d4267db14c0c8883susnata            return R.style.Theme_Example_Leanback_GuidedStep_Half;
10520767a171ab46addb5d50248d4267db14c0c8883susnata        }
10620767a171ab46addb5d50248d4267db14c0c8883susnata
10720767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
10820767a171ab46addb5d50248d4267db14c0c8883susnata        public Guidance onCreateGuidance(Bundle savedInstanceState) {
10920767a171ab46addb5d50248d4267db14c0c8883susnata            String title = getString(R.string.guidedstep_second_title);
11020767a171ab46addb5d50248d4267db14c0c8883susnata            String breadcrumb = getString(R.string.guidedstep_second_breadcrumb);
11120767a171ab46addb5d50248d4267db14c0c8883susnata            String description = getString(R.string.guidedstep_second_description);
112b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            final Context context = getActivity();
113b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            Drawable icon = ResourcesCompat.getDrawable(context.getResources(),
114b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                    R.drawable.ic_main_icon, context.getTheme());
11520767a171ab46addb5d50248d4267db14c0c8883susnata            return new Guidance(title, description, breadcrumb, icon);
11620767a171ab46addb5d50248d4267db14c0c8883susnata        }
11720767a171ab46addb5d50248d4267db14c0c8883susnata
11820767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
11920767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
12020767a171ab46addb5d50248d4267db14c0c8883susnata            Context context = getActivity();
12120767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
12220767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_FINISH)
12320767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Done")
12420767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
12520767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
12620767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
12720767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Never mind")
12820767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
12920767a171ab46addb5d50248d4267db14c0c8883susnata        }
13020767a171ab46addb5d50248d4267db14c0c8883susnata
13120767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
13220767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {
13320767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(getActivity())
13420767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
13520767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Cancel")
13620767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
13720767a171ab46addb5d50248d4267db14c0c8883susnata        }
13820767a171ab46addb5d50248d4267db14c0c8883susnata
13920767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
14020767a171ab46addb5d50248d4267db14c0c8883susnata        public void onGuidedActionClicked(GuidedAction action) {
14120767a171ab46addb5d50248d4267db14c0c8883susnata            FragmentManager fm = getFragmentManager();
14220767a171ab46addb5d50248d4267db14c0c8883susnata            fm.popBackStack();
14320767a171ab46addb5d50248d4267db14c0c8883susnata        }
14420767a171ab46addb5d50248d4267db14c0c8883susnata    }
14520767a171ab46addb5d50248d4267db14c0c8883susnata}
146