12a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn/* 22a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project 32a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * 42a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 52a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * you may not use this file except in compliance with the License. 62a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * You may obtain a copy of the License at 72a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * 82a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 92a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * 102a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 112a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 122a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * See the License for the specific language governing permissions and 142a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * limitations under the License. 152a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn */ 162a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 172a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackbornpackage android.support.v13.app; 182a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 192a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackbornimport android.app.Fragment; 202a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 212a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn/** 220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link Fragment} introduced after 230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * API level 13 in a backwards compatible fashion. 242a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn */ 252a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackbornpublic class FragmentCompat { 262a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn interface FragmentCompatImpl { 272a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn void setMenuVisibility(Fragment f, boolean visible); 2879398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell void setUserVisibleHint(Fragment f, boolean deferStart); 292a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 302a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 312a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn static class BaseFragmentCompatImpl implements FragmentCompatImpl { 322a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn public void setMenuVisibility(Fragment f, boolean visible) { 332a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 3479398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell public void setUserVisibleHint(Fragment f, boolean deferStart) { 35abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell } 362a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 372a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 382a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn static class ICSFragmentCompatImpl extends BaseFragmentCompatImpl { 390574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov @Override 402a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn public void setMenuVisibility(Fragment f, boolean visible) { 412a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn FragmentCompatICS.setMenuVisibility(f, visible); 422a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 432a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 442a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 45abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell static class ICSMR1FragmentCompatImpl extends ICSFragmentCompatImpl { 460574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov @Override 4779398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell public void setUserVisibleHint(Fragment f, boolean deferStart) { 4879398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell FragmentCompatICSMR1.setUserVisibleHint(f, deferStart); 49abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell } 50abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell } 51abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell 522a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn static final FragmentCompatImpl IMPL; 532a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn static { 54abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell if (android.os.Build.VERSION.SDK_INT >= 15) { 55abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell IMPL = new ICSMR1FragmentCompatImpl(); 56abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell } else if (android.os.Build.VERSION.SDK_INT >= 14) { 572a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn IMPL = new ICSFragmentCompatImpl(); 582a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } else { 592a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn IMPL = new BaseFragmentCompatImpl(); 602a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 612a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 622a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn 632a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn /** 642a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * Call {@link Fragment#setMenuVisibility(boolean) Fragment.setMenuVisibility(boolean)} 652a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn * if running on an appropriate version of the platform. 662a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn */ 672a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn public static void setMenuVisibility(Fragment f, boolean visible) { 682a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn IMPL.setMenuVisibility(f, visible); 692a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn } 70abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell 71abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell /** 720574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Call {@link Fragment#setUserVisibleHint(boolean) setUserVisibleHint(boolean)} 73abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell * if running on an appropriate version of the platform. 74abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell */ 7579398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell public static void setUserVisibleHint(Fragment f, boolean deferStart) { 7679398eaefea45e61d839cf4e0534f0eafee70a09Adam Powell IMPL.setUserVisibleHint(f, deferStart); 77abc968f1eba800c34a4008deb43b015da5d23a5fAdam Powell } 782a4d8518f36346ea25a22a736453ff28f2954165Dianne Hackborn} 79