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