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