aboutsummaryrefslogtreecommitdiff
path: root/base/src
diff options
context:
space:
mode:
authorMenny Even Danan <menny@evendanan.net>2016-03-30 14:27:22 +0000
committerMenny Even Danan <menny@evendanan.net>2016-03-30 16:07:03 +0000
commit505d1c02807650497a0e103f735dfbbb92376543 (patch)
treef8828820002074ffe5b79f3d5c434515d8bc8a2c /base/src
parentf774c52a08dfac1fc6ecf49126538f1d65a675b3 (diff)
downloadAnySoftKeyboard-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.java94
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);
+ }
+}