144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes/*
244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * Copyright (C) 2015 The Android Open Source Project
344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes *
444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * you may not use this file except in compliance with the License.
644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * You may obtain a copy of the License at
744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes *
844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes *
1044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * Unless required by applicable law or agreed to in writing, software
1144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * See the License for the specific language governing permissions and
1444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes * limitations under the License.
1544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes */
1644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
1744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banespackage android.support.v4.widget;
1844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
1944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banesimport android.util.Log;
2044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banesimport android.widget.PopupWindow;
2144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
2244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banesimport java.lang.reflect.Field;
2344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
2444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banesclass PopupWindowCompatApi21 {
2544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
2644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    private static final String TAG = "PopupWindowCompatApi21";
2744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
2844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    private static Field sOverlapAnchorField;
2944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
3044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    static {
3144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        try {
3244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            sOverlapAnchorField = PopupWindow.class.getDeclaredField("mOverlapAnchor");
3344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            sOverlapAnchorField.setAccessible(true);
3444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        } catch (NoSuchFieldException e) {
3544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            Log.i(TAG, "Could not fetch mOverlapAnchor field from PopupWindow", e);
3644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        }
3744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    }
3844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
3944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    static void setOverlapAnchor(PopupWindow popupWindow, boolean overlapAnchor) {
4044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        if (sOverlapAnchorField != null) {
4144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            try {
4244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes                sOverlapAnchorField.set(popupWindow, overlapAnchor);
4344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            } catch (IllegalAccessException e) {
4444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes                Log.i(TAG, "Could not set overlap anchor field in PopupWindow", e);
4544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            }
4644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        }
4744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    }
4844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
4944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    static boolean getOverlapAnchor(PopupWindow popupWindow) {
5044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        if (sOverlapAnchorField != null) {
5144918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            try {
5244918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes                return (Boolean) sOverlapAnchorField.get(popupWindow);
5344918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            } catch (IllegalAccessException e) {
5444918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes                Log.i(TAG, "Could not get overlap anchor field in PopupWindow", e);
5544918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes            }
5644918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        }
5744918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes        return false;
5844918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes    }
5944918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes
6044918a92e1d66a01a03063e2c5e68b2570f64b03Chris Banes}
61