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