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