diff options
| author | Menny Even Danan <menny@evendanan.net> | 2016-03-30 14:27:22 +0000 |
|---|---|---|
| committer | Menny Even Danan <menny@evendanan.net> | 2016-03-30 16:07:03 +0000 |
| commit | 505d1c02807650497a0e103f735dfbbb92376543 (patch) | |
| tree | f8828820002074ffe5b79f3d5c434515d8bc8a2c /base/src | |
| parent | f774c52a08dfac1fc6ecf49126538f1d65a675b3 (diff) | |
| download | AnySoftKeyboard-505d1c02807650497a0e103f735dfbbb92376543.tar.gz AnySoftKeyboard-505d1c02807650497a0e103f735dfbbb92376543.tar.bz2 | |
moving CompatUtils to base library
Diffstat (limited to 'base/src')
| -rw-r--r-- | base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java new file mode 100644 index 000000000..758a1b291 --- /dev/null +++ b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2013 Menny Even-Danan + * + * 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 com.anysoftkeyboard.utils; + +import android.annotation.TargetApi; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.PopupWindow; + +import java.lang.reflect.Method; +import java.util.Locale; + +public class CompatUtils { + private static final String TAG = "ASK CompatUtils"; + + public static Method getMethod(Class<?> targetClass, String name, + Class<?>... parameterTypes) { + if (targetClass == null || TextUtils.isEmpty(name)) return null; + try { + return targetClass.getMethod(name, parameterTypes); + } catch (SecurityException e) { + // ignore + } catch (NoSuchMethodException e) { + // ignore + } + return null; + } + + public static Object invoke(Object receiver, Object defaultValue, Method method, Object... args) { + if (method == null) return defaultValue; + try { + return method.invoke(receiver, args); + } catch (Exception e) { + Log.e(TAG, "Exception in invoke: " + e.getClass().getSimpleName()); + } + return defaultValue; + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public static Locale getLocaleForLanguageTag(@Nullable String locale) { + Locale parsedLocale = Locale.getDefault(); + if (!TextUtils.isEmpty(locale)) { + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + parsedLocale = Locale.forLanguageTag(locale); + } else { + parsedLocale = new Locale(locale); + } + } catch (Exception e) { + Log.d(TAG, "Failed to parse locale "+locale+". Defaulting to "+parsedLocale); + } + } + return parsedLocale; + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public static void setViewBackgroundDrawable(View view, Drawable drawable) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + view.setBackground(drawable); + } else { + //noinspection deprecation + view.setBackgroundDrawable(drawable); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1) + public static void setPopupUnattachedToDecod(PopupWindow popupWindow) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + popupWindow.setAttachedInDecor(false); + } + } + + public static void unbindDrawable(Drawable d) { + if (d != null) d.setCallback(null); + } +} |
