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;
24def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport android.util.Log;
25def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.content.res.ResourcesCompat;
27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.app.GuidedStepFragment;
28ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.GuidanceStylist.Guidance;
29ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.leanback.widget.GuidedAction;
3020767a171ab46addb5d50248d4267db14c0c8883susnata
3120767a171ab46addb5d50248d4267db14c0c8883susnataimport java.util.List;
3220767a171ab46addb5d50248d4267db14c0c8883susnata
3320767a171ab46addb5d50248d4267db14c0c8883susnata/**
3420767a171ab46addb5d50248d4267db14c0c8883susnata * Activity that showcases different aspects of GuidedStepFragments in half
3520767a171ab46addb5d50248d4267db14c0c8883susnata * screen mode. This is achieved by setting the theme for this activity
3620767a171ab46addb5d50248d4267db14c0c8883susnata * to {@code Theme.Example.Leanback.GuidedStep.Half}.
3720767a171ab46addb5d50248d4267db14c0c8883susnata */
3820767a171ab46addb5d50248d4267db14c0c8883susnatapublic class GuidedStepHalfScreenActivity extends Activity {
3920767a171ab46addb5d50248d4267db14c0c8883susnata    private static final String TAG = "leanback.GuidedStepSupportHalfScreenActivity";
4020767a171ab46addb5d50248d4267db14c0c8883susnata
4120767a171ab46addb5d50248d4267db14c0c8883susnata    @Override
4220767a171ab46addb5d50248d4267db14c0c8883susnata    protected void onCreate(Bundle savedInstanceState) {
4320767a171ab46addb5d50248d4267db14c0c8883susnata        Log.v(TAG, "onCreate");
4420767a171ab46addb5d50248d4267db14c0c8883susnata        super.onCreate(savedInstanceState);
4520767a171ab46addb5d50248d4267db14c0c8883susnata        setContentView(R.layout.guided_step_activity);
4620767a171ab46addb5d50248d4267db14c0c8883susnata        GuidedStepFragment.addAsRoot(this, new FirstStepFragment(), R.id.lb_guidedstep_host);
4720767a171ab46addb5d50248d4267db14c0c8883susnata    }
4820767a171ab46addb5d50248d4267db14c0c8883susnata
4920767a171ab46addb5d50248d4267db14c0c8883susnata    public static class FirstStepFragment extends GuidedStepFragment {
5020767a171ab46addb5d50248d4267db14c0c8883susnata
5120767a171ab46addb5d50248d4267db14c0c8883susnata       @Override
5220767a171ab46addb5d50248d4267db14c0c8883susnata        public Guidance onCreateGuidance(Bundle savedInstanceState) {
5320767a171ab46addb5d50248d4267db14c0c8883susnata            String title = getString(R.string.guidedstep_first_title);
5420767a171ab46addb5d50248d4267db14c0c8883susnata            String breadcrumb = getString(R.string.guidedstep_first_breadcrumb);
5520767a171ab46addb5d50248d4267db14c0c8883susnata            String description = getString(R.string.guidedstep_first_description);
56b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            final Context context = getActivity();
57b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            Drawable icon = ResourcesCompat.getDrawable(context.getResources(),
58b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                    R.drawable.ic_main_icon, context.getTheme());
5920767a171ab46addb5d50248d4267db14c0c8883susnata            return new Guidance(title, description, breadcrumb, icon);
6020767a171ab46addb5d50248d4267db14c0c8883susnata        }
6120767a171ab46addb5d50248d4267db14c0c8883susnata
6220767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
6320767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
6420767a171ab46addb5d50248d4267db14c0c8883susnata            Context context = getActivity();
6520767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
6620767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CONTINUE)
6720767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Just do it")
6820767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
6920767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
7020767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
7120767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Never mind")
7220767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
7320767a171ab46addb5d50248d4267db14c0c8883susnata        }
7420767a171ab46addb5d50248d4267db14c0c8883susnata
7520767a171ab46addb5d50248d4267db14c0c8883susnata        public FirstStepFragment() {
7620767a171ab46addb5d50248d4267db14c0c8883susnata            setEntranceTransitionType(GuidedStepFragment.SLIDE_FROM_BOTTOM);
7720767a171ab46addb5d50248d4267db14c0c8883susnata        }
7820767a171ab46addb5d50248d4267db14c0c8883susnata
7920767a171ab46addb5d50248d4267db14c0c8883susnata        /**
8020767a171ab46addb5d50248d4267db14c0c8883susnata         * This fragment could be used by an activity using theme
8120767a171ab46addb5d50248d4267db14c0c8883susnata         * {@code Theme.Leanback.GuidedStep.Half} or something else (BrowseActivity).
8220767a171ab46addb5d50248d4267db14c0c8883susnata         * In order to provide a consistent half screen experience under
8320767a171ab46addb5d50248d4267db14c0c8883susnata         * both scenarios, we override onProvideTheme method.
8420767a171ab46addb5d50248d4267db14c0c8883susnata         */
8520767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
8620767a171ab46addb5d50248d4267db14c0c8883susnata        public int onProvideTheme() {
8720767a171ab46addb5d50248d4267db14c0c8883susnata            return R.style.Theme_Example_Leanback_GuidedStep_Half;
8820767a171ab46addb5d50248d4267db14c0c8883susnata        }
8920767a171ab46addb5d50248d4267db14c0c8883susnata
9020767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
9120767a171ab46addb5d50248d4267db14c0c8883susnata        public void onGuidedActionClicked(GuidedAction action) {
9220767a171ab46addb5d50248d4267db14c0c8883susnata            FragmentManager fm = getFragmentManager();
9320767a171ab46addb5d50248d4267db14c0c8883susnata            if (action.getId() == GuidedAction.ACTION_ID_CONTINUE) {
9420767a171ab46addb5d50248d4267db14c0c8883susnata                GuidedStepFragment.add(fm, new SecondStepFragment(), R.id.lb_guidedstep_host);
9520767a171ab46addb5d50248d4267db14c0c8883susnata            } else if (action.getId() == GuidedAction.ACTION_ID_CANCEL){
9620767a171ab46addb5d50248d4267db14c0c8883susnata                finishGuidedStepFragments();
9720767a171ab46addb5d50248d4267db14c0c8883susnata            }
9820767a171ab46addb5d50248d4267db14c0c8883susnata        }
9920767a171ab46addb5d50248d4267db14c0c8883susnata    }
10020767a171ab46addb5d50248d4267db14c0c8883susnata
10120767a171ab46addb5d50248d4267db14c0c8883susnata    public static class SecondStepFragment extends GuidedStepFragment {
10220767a171ab46addb5d50248d4267db14c0c8883susnata
10320767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
10420767a171ab46addb5d50248d4267db14c0c8883susnata        public int onProvideTheme() {
10520767a171ab46addb5d50248d4267db14c0c8883susnata            return R.style.Theme_Example_Leanback_GuidedStep_Half;
10620767a171ab46addb5d50248d4267db14c0c8883susnata        }
10720767a171ab46addb5d50248d4267db14c0c8883susnata
10820767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
10920767a171ab46addb5d50248d4267db14c0c8883susnata        public Guidance onCreateGuidance(Bundle savedInstanceState) {
11020767a171ab46addb5d50248d4267db14c0c8883susnata            String title = getString(R.string.guidedstep_second_title);
11120767a171ab46addb5d50248d4267db14c0c8883susnata            String breadcrumb = getString(R.string.guidedstep_second_breadcrumb);
11220767a171ab46addb5d50248d4267db14c0c8883susnata            String description = getString(R.string.guidedstep_second_description);
113b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            final Context context = getActivity();
114b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu            Drawable icon = ResourcesCompat.getDrawable(context.getResources(),
115b7087e036a48f5a3db28d02ff7f9b97fbbc46c4fDake Gu                    R.drawable.ic_main_icon, context.getTheme());
11620767a171ab46addb5d50248d4267db14c0c8883susnata            return new Guidance(title, description, breadcrumb, icon);
11720767a171ab46addb5d50248d4267db14c0c8883susnata        }
11820767a171ab46addb5d50248d4267db14c0c8883susnata
11920767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
12020767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
12120767a171ab46addb5d50248d4267db14c0c8883susnata            Context context = getActivity();
12220767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
12320767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_FINISH)
12420767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Done")
12520767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
12620767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(context)
12720767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
12820767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Never mind")
12920767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
13020767a171ab46addb5d50248d4267db14c0c8883susnata        }
13120767a171ab46addb5d50248d4267db14c0c8883susnata
13220767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
13320767a171ab46addb5d50248d4267db14c0c8883susnata        public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {
13420767a171ab46addb5d50248d4267db14c0c8883susnata            actions.add(new GuidedAction.Builder(getActivity())
13520767a171ab46addb5d50248d4267db14c0c8883susnata                    .clickAction(GuidedAction.ACTION_ID_CANCEL)
13620767a171ab46addb5d50248d4267db14c0c8883susnata                    .description("Cancel")
13720767a171ab46addb5d50248d4267db14c0c8883susnata                    .build());
13820767a171ab46addb5d50248d4267db14c0c8883susnata        }
13920767a171ab46addb5d50248d4267db14c0c8883susnata
14020767a171ab46addb5d50248d4267db14c0c8883susnata        @Override
14120767a171ab46addb5d50248d4267db14c0c8883susnata        public void onGuidedActionClicked(GuidedAction action) {
14220767a171ab46addb5d50248d4267db14c0c8883susnata            FragmentManager fm = getFragmentManager();
14320767a171ab46addb5d50248d4267db14c0c8883susnata            fm.popBackStack();
14420767a171ab46addb5d50248d4267db14c0c8883susnata        }
14520767a171ab46addb5d50248d4267db14c0c8883susnata    }
14620767a171ab46addb5d50248d4267db14c0c8883susnata}
147