| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package android.support.v4.widget; |
| |
| import android.widget.PopupWindow; |
| |
| import java.lang.reflect.Method; |
| |
| /** |
| * Implementation of PopupWindow compatibility that can call Gingerbread APIs. |
| */ |
| class PopupWindowCompatGingerbread { |
| |
| private static Method sSetWindowLayoutTypeMethod; |
| private static boolean sSetWindowLayoutTypeMethodAttempted; |
| private static Method sGetWindowLayoutTypeMethod; |
| private static boolean sGetWindowLayoutTypeMethodAttempted; |
| |
| static void setWindowLayoutType(PopupWindow popupWindow, int layoutType) { |
| if (!sSetWindowLayoutTypeMethodAttempted) { |
| try { |
| sSetWindowLayoutTypeMethod = PopupWindow.class.getDeclaredMethod( |
| "setWindowLayoutType", int.class); |
| sSetWindowLayoutTypeMethod.setAccessible(true); |
| } catch (Exception e) { |
| // Reflection method fetch failed. Oh well. |
| } |
| sSetWindowLayoutTypeMethodAttempted = true; |
| } |
| |
| if (sSetWindowLayoutTypeMethod != null) { |
| try { |
| sSetWindowLayoutTypeMethod.invoke(popupWindow, layoutType); |
| } catch (Exception e) { |
| // Reflection call failed. Oh well. |
| } |
| } |
| } |
| |
| static int getWindowLayoutType(PopupWindow popupWindow) { |
| if (!sGetWindowLayoutTypeMethodAttempted) { |
| try { |
| sGetWindowLayoutTypeMethod = PopupWindow.class.getDeclaredMethod( |
| "getWindowLayoutType"); |
| sGetWindowLayoutTypeMethod.setAccessible(true); |
| } catch (Exception e) { |
| // Reflection method fetch failed. Oh well. |
| } |
| sGetWindowLayoutTypeMethodAttempted = true; |
| } |
| |
| if (sGetWindowLayoutTypeMethod != null) { |
| try { |
| return (Integer) sGetWindowLayoutTypeMethod.invoke(popupWindow); |
| } catch (Exception e) { |
| // Reflection call failed. Oh well. |
| } |
| } |
| return 0; |
| } |
| |
| } |