diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ClipboardManagerCompat.java b/app/src/main/java/org/dslul/openboard/inputmethod/compat/ClipboardManagerCompat.java index 1665c5343..33546a67b 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ClipboardManagerCompat.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/compat/ClipboardManagerCompat.java @@ -2,14 +2,12 @@ package org.dslul.openboard.inputmethod.compat; -import android.annotation.TargetApi; import android.content.ClipData; import android.content.ClipboardManager; import android.os.Build; public class ClipboardManagerCompat { - @TargetApi(Build.VERSION_CODES.P) public static void clearPrimaryClip(ClipboardManager cm) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { try { @@ -23,7 +21,6 @@ public class ClipboardManagerCompat { } } - @TargetApi(Build.VERSION_CODES.O) public static Long getClipTimestamp(ClipData cd) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return cd.getDescription().getTimestamp(); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/CompatUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/CompatUtils.kt deleted file mode 100644 index 302ad734e..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/CompatUtils.kt +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.compat - -import android.text.TextUtils -import org.dslul.openboard.inputmethod.latin.utils.Log -import java.lang.reflect.Constructor -import java.lang.reflect.Field -import java.lang.reflect.InvocationTargetException -import java.lang.reflect.Method - -object CompatUtils { - private val TAG = CompatUtils::class.java.simpleName - fun getClass(className: String?): Class<*>? { - return try { - Class.forName(className!!) - } catch (e: ClassNotFoundException) { - null - } - } - - fun getMethod(targetClass: Class<*>?, name: String?, - vararg parameterTypes: Class<*>?): Method? { - if (targetClass == null || TextUtils.isEmpty(name)) { - return null - } - try { - return targetClass.getMethod(name!!, *parameterTypes) - } catch (_: SecurityException) { // ignore - } catch (_: NoSuchMethodException) { - } - return null - } - - fun getField(targetClass: Class<*>?, name: String?): Field? { - if (targetClass == null || TextUtils.isEmpty(name)) { - return null - } - try { - return targetClass.getField(name!!) - } catch (_: SecurityException) { // ignore - } catch (_: NoSuchFieldException) { - } - return null - } - - fun getConstructor(targetClass: Class<*>?, - vararg types: Class<*>?): Constructor<*>? { - if (targetClass == null || types == null) { - return null - } - try { - return targetClass.getConstructor(*types) - } catch (_: SecurityException) { // ignore - } catch (_: NoSuchMethodException) { - } - return null - } - - fun newInstance(constructor: Constructor<*>?, vararg args: Any?): Any? { - if (constructor == null) { - return null - } - try { - return constructor.newInstance(*args) - } catch (e: InstantiationException) { - Log.e(TAG, "Exception in newInstance", e) - } catch (e: IllegalAccessException) { - Log.e(TAG, "Exception in newInstance", e) - } catch (e: IllegalArgumentException) { - Log.e(TAG, "Exception in newInstance", e) - } catch (e: InvocationTargetException) { - Log.e(TAG, "Exception in newInstance", e) - } - return null - } - - operator fun invoke(receiver: Any?, defaultValue: Any?, - method: Method?, vararg args: Any?): Any? { - if (method == null) { - return defaultValue - } - try { - return method.invoke(receiver, *args) - } catch (e: IllegalAccessException) { - Log.e(TAG, "Exception in invoke", e) - } catch (e: IllegalArgumentException) { - Log.e(TAG, "Exception in invoke", e) - } catch (e: InvocationTargetException) { - Log.e(TAG, "Exception in invoke", e) - } - return defaultValue - } - - fun getFieldValue(receiver: Any?, defaultValue: Any?, - field: Field?): Any? { - if (field == null) { - return defaultValue - } - try { - return field[receiver] - } catch (e: IllegalAccessException) { - Log.e(TAG, "Exception in getFieldValue", e) - } catch (e: IllegalArgumentException) { - Log.e(TAG, "Exception in getFieldValue", e) - } - return defaultValue - } - - fun setFieldValue(receiver: Any?, field: Field?, value: Any?) { - if (field == null) { - return - } - try { - field[receiver] = value - } catch (e: IllegalAccessException) { - Log.e(TAG, "Exception in setFieldValue", e) - } catch (e: IllegalArgumentException) { - Log.e(TAG, "Exception in setFieldValue", e) - } - } - - fun getClassWrapper(className: String?): ClassWrapper { - return ClassWrapper(getClass(className)) - } - - class ClassWrapper(private val mClass: Class<*>?) { - fun exists(): Boolean { - return mClass != null - } - - fun getMethod(name: String?, - defaultValue: T, vararg parameterTypes: Class<*>?): ToObjectMethodWrapper { - return ToObjectMethodWrapper(getMethod(mClass, name, *parameterTypes), - defaultValue) - } - - fun getPrimitiveMethod(name: String?, defaultValue: Int, - vararg parameterTypes: Class<*>?): ToIntMethodWrapper { - return ToIntMethodWrapper(getMethod(mClass, name, *parameterTypes), - defaultValue) - } - - fun getPrimitiveMethod(name: String?, defaultValue: Float, - vararg parameterTypes: Class<*>?): ToFloatMethodWrapper { - return ToFloatMethodWrapper(getMethod(mClass, name, *parameterTypes), - defaultValue) - } - - fun getPrimitiveMethod(name: String?, - defaultValue: Boolean, vararg parameterTypes: Class<*>?): ToBooleanMethodWrapper { - return ToBooleanMethodWrapper(getMethod(mClass, name, *parameterTypes), - defaultValue) - } - - } - - @Suppress("unchecked_cast") - class ToObjectMethodWrapper(private val mMethod: Method?, private val mDefaultValue: T) { - operator fun invoke(receiver: Any?, vararg args: Any?): T { - return CompatUtils.invoke(receiver, mDefaultValue, mMethod, *args) as T - } - - } - - class ToIntMethodWrapper(private val mMethod: Method?, private val mDefaultValue: Int) { - operator fun invoke(receiver: Any?, vararg args: Any?): Int { - return CompatUtils.invoke(receiver, mDefaultValue, mMethod, *args) as Int - } - - } - - class ToFloatMethodWrapper(private val mMethod: Method?, private val mDefaultValue: Float) { - operator fun invoke(receiver: Any?, vararg args: Any?): Float { - return CompatUtils.invoke(receiver, mDefaultValue, mMethod, *args) as Float - } - - } - - class ToBooleanMethodWrapper(private val mMethod: Method?, private val mDefaultValue: Boolean) { - operator fun invoke(receiver: Any?, vararg args: Any?): Boolean { - return CompatUtils.invoke(receiver, mDefaultValue, mMethod, *args) as Boolean - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/CursorAnchorInfoCompatWrapper.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/CursorAnchorInfoCompatWrapper.kt deleted file mode 100644 index 9b7482e66..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/CursorAnchorInfoCompatWrapper.kt +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.compat - -import android.annotation.TargetApi -import android.graphics.Matrix -import android.graphics.RectF -import android.os.Build -import android.os.Build.VERSION_CODES -import android.view.inputmethod.CursorAnchorInfo - -/** - * A wrapper for [CursorAnchorInfo], which has been introduced in API Level 21. You can use - * this wrapper to avoid direct dependency on newly introduced types. - */ -open class CursorAnchorInfoCompatWrapper internal constructor() { - open val selectionStart: Int - get() { - throw UnsupportedOperationException("not supported.") - } - - open val selectionEnd: Int - get() { - throw UnsupportedOperationException("not supported.") - } - - open val composingText: CharSequence? - get() { - throw UnsupportedOperationException("not supported.") - } - - open val composingTextStart: Int - get() { - throw UnsupportedOperationException("not supported.") - } - - open val matrix: Matrix? - get() { - throw UnsupportedOperationException("not supported.") - } - - open fun getCharacterBounds(index: Int): RectF? { - throw UnsupportedOperationException("not supported.") - } - - open fun getCharacterBoundsFlags(index: Int): Int { - throw UnsupportedOperationException("not supported.") - } - - open val insertionMarkerBaseline: Float - get() { - throw UnsupportedOperationException("not supported.") - } - - open val insertionMarkerBottom: Float - get() { - throw UnsupportedOperationException("not supported.") - } - - open val insertionMarkerHorizontal: Float - get() { - throw UnsupportedOperationException("not supported.") - } - - open val insertionMarkerTop: Float - get() { - throw UnsupportedOperationException("not supported.") - } - - open val insertionMarkerFlags: Int - get() { - throw UnsupportedOperationException("not supported.") - } - - @TargetApi(VERSION_CODES.LOLLIPOP) - private class RealWrapper(private val mInstance: CursorAnchorInfo) : CursorAnchorInfoCompatWrapper() { - - override val selectionStart: Int - get() { - return mInstance.selectionStart - } - - override val selectionEnd: Int - get() { - return mInstance.selectionEnd - } - - override val composingText: CharSequence? - get() { - return mInstance.composingText - } - - override val composingTextStart: Int - get() { - return mInstance.composingTextStart - } - - override val matrix: Matrix? - get() { - return mInstance.matrix - } - - override fun getCharacterBounds(index: Int): RectF? { - return mInstance.getCharacterBounds(index) - } - - override fun getCharacterBoundsFlags(index: Int): Int { - return mInstance.getCharacterBoundsFlags(index) - } - - override val insertionMarkerBaseline: Float - get() { - return mInstance.insertionMarkerBaseline - } - - override val insertionMarkerBottom: Float - get() { - return mInstance.insertionMarkerBottom - } - - override val insertionMarkerHorizontal: Float - get() { - return mInstance.insertionMarkerHorizontal - } - - override val insertionMarkerTop: Float - get() { - return mInstance.insertionMarkerTop - } - - override val insertionMarkerFlags: Int - get() { - return mInstance.insertionMarkerFlags - } - - } - - companion object { - /** - * The insertion marker or character bounds have at least one visible region. - */ - const val FLAG_HAS_VISIBLE_REGION = 0x01 - /** - * The insertion marker or character bounds have at least one invisible (clipped) region. - */ - const val FLAG_HAS_INVISIBLE_REGION = 0x02 - /** - * The insertion marker or character bounds is placed at right-to-left (RTL) character. - */ - const val FLAG_IS_RTL = 0x04 - - @JvmStatic - @TargetApi(VERSION_CODES.LOLLIPOP) - fun wrap(instance: CursorAnchorInfo?): CursorAnchorInfoCompatWrapper? { - return if (Build.VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) { - null - } else instance?.let { RealWrapper(it) } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/InputMethodSubtypeCompatUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/InputMethodSubtypeCompatUtils.kt index 58ce0fcc3..5251409ec 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/InputMethodSubtypeCompatUtils.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/compat/InputMethodSubtypeCompatUtils.kt @@ -14,18 +14,13 @@ import org.dslul.openboard.inputmethod.latin.utils.locale import java.util.* object InputMethodSubtypeCompatUtils { - // Note that InputMethodSubtype.getLanguageTag() is expected to be available in Android N+. - private val GET_LANGUAGE_TAG = CompatUtils.getMethod(InputMethodSubtype::class.java, "getLanguageTag") - @JvmStatic fun getLocaleObject(subtype: InputMethodSubtype): Locale { // Locale.forLanguageTag() is available only in Android L and later. - if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { - val languageTag = CompatUtils.invoke(subtype, null, GET_LANGUAGE_TAG) as String? - if (!languageTag.isNullOrEmpty()) { + if (Build.VERSION.SDK_INT >= VERSION_CODES.N) { + val languageTag = subtype.languageTag + if (languageTag.isNotEmpty()) return Locale.forLanguageTag(languageTag) - } } return LocaleUtils.constructLocaleFromString(subtype.locale()) } - } \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/SuggestionSpanUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/SuggestionSpanUtils.kt index d3b682d96..611fe187e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/SuggestionSpanUtils.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/compat/SuggestionSpanUtils.kt @@ -14,6 +14,7 @@ import android.text.style.SuggestionSpan import org.dslul.openboard.inputmethod.annotations.UsedForTesting import java.util.* +// todo: this is not compat any more object SuggestionSpanUtils { @JvmStatic @UsedForTesting diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/TextInfoCompatUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/TextInfoCompatUtils.kt deleted file mode 100644 index ad944505e..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/TextInfoCompatUtils.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.compat - -import android.os.Build -import android.view.textservice.TextInfo -import org.dslul.openboard.inputmethod.annotations.UsedForTesting - -object TextInfoCompatUtils { - // Note that TextInfo.getCharSequence() is supposed to be available in API level 21 and later. - private val TEXT_INFO_GET_CHAR_SEQUENCE = CompatUtils.getMethod(TextInfo::class.java, "getCharSequence") - - @get:UsedForTesting - val isCharSequenceSupported: Boolean - get() = TEXT_INFO_GET_CHAR_SEQUENCE != null - - @JvmStatic - @UsedForTesting - fun newInstance(charSequence: CharSequence, start: Int, end: Int, cookie: Int, - sequenceNumber: Int): TextInfo { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - return TextInfo(charSequence, start, end, cookie, sequenceNumber) - return TextInfo(charSequence.subSequence(start, end).toString(), cookie, sequenceNumber) - } - - /** - * Returns the result of [TextInfo.getCharSequence] when available. Otherwise returns - * the result of [TextInfo.getText] as fall back. - * @param textInfo the instance for which [TextInfo.getCharSequence] or - * [TextInfo.getText] is called. - * @return the result of [TextInfo.getCharSequence] when available. Otherwise returns - * the result of [TextInfo.getText] as fall back. If `textInfo` is `null`, - * returns `null`. - */ - @JvmStatic - @UsedForTesting - fun getCharSequenceOrString(textInfo: TextInfo): CharSequence { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - return textInfo.charSequence - val defaultValue = textInfo.text - return CompatUtils.invoke(textInfo, defaultValue, TEXT_INFO_GET_CHAR_SEQUENCE) as CharSequence - } -} \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtils.kt index 6185a0f2e..54700ed27 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtils.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtils.kt @@ -6,24 +6,44 @@ package org.dslul.openboard.inputmethod.compat +import android.graphics.Outline import android.inputmethodservice.InputMethodService -import android.os.Build -import android.os.Build.VERSION_CODES import android.view.View +import android.view.ViewOutlineProvider +// todo: this is not compat any more object ViewOutlineProviderCompatUtils { - private val EMPTY_INSETS_UPDATER: InsetsUpdater = object : InsetsUpdater { - override fun setInsets(insets: InputMethodService.Insets) {} - } - @JvmStatic - fun setInsetsOutlineProvider(view: View): InsetsUpdater { - return if (Build.VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) { - EMPTY_INSETS_UPDATER - } else ViewOutlineProviderCompatUtilsLXX.setInsetsOutlineProvider(view) + fun setInsetsOutlineProvider(view: View): InsetsOutlineProvider { + val provider = InsetsOutlineProvider(view) + view.outlineProvider = provider + return provider + } +} + +class InsetsOutlineProvider(private val mView: View) : ViewOutlineProvider() { + private var mLastVisibleTopInsets = NO_DATA + init { + mView.outlineProvider = this + } + fun setInsets(insets: InputMethodService.Insets) { + val visibleTopInsets = insets.visibleTopInsets + if (mLastVisibleTopInsets != visibleTopInsets) { + mLastVisibleTopInsets = visibleTopInsets + mView.invalidateOutline() + } } - interface InsetsUpdater { - fun setInsets(insets: InputMethodService.Insets) + override fun getOutline(view: View, outline: Outline) { + if (mLastVisibleTopInsets == NO_DATA) { // Call default implementation. + BACKGROUND.getOutline(view, outline) + return + } + // TODO: Revisit this when floating/resize keyboard is supported. + outline.setRect(view.left, mLastVisibleTopInsets, view.right, view.bottom) } -} \ No newline at end of file + + companion object { + private const val NO_DATA = -1 + } +} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.kt b/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.kt deleted file mode 100644 index b7f98c601..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.compat - -import android.graphics.Outline -import android.inputmethodservice.InputMethodService -import android.os.Build -import android.view.View -import android.view.ViewOutlineProvider -import androidx.annotation.RequiresApi -import org.dslul.openboard.inputmethod.compat.ViewOutlineProviderCompatUtils.InsetsUpdater - -@RequiresApi(Build.VERSION_CODES.LOLLIPOP) -internal object ViewOutlineProviderCompatUtilsLXX { - fun setInsetsOutlineProvider(view: View): InsetsUpdater { - val provider = InsetsOutlineProvider(view) - view.outlineProvider = provider - return provider - } - - private class InsetsOutlineProvider(private val mView: View) : ViewOutlineProvider(), InsetsUpdater { - private var mLastVisibleTopInsets = NO_DATA - override fun setInsets(insets: InputMethodService.Insets) { - val visibleTopInsets = insets.visibleTopInsets - if (mLastVisibleTopInsets != visibleTopInsets) { - mLastVisibleTopInsets = visibleTopInsets - mView.invalidateOutline() - } - } - - override fun getOutline(view: View, outline: Outline) { - if (mLastVisibleTopInsets == NO_DATA) { // Call default implementation. - BACKGROUND.getOutline(view, outline) - return - } - // TODO: Revisit this when floating/resize keyboard is supported. - outline.setRect(view.left, mLastVisibleTopInsets, view.right, view.bottom) - } - - companion object { - private const val NO_DATA = -1 - } - - init { - mView.outlineProvider = this - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java index 4cb5b5e49..cf65cd199 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java @@ -23,7 +23,7 @@ import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils; import java.util.Arrays; -public final class KeyboardTheme implements Comparable { +public final class KeyboardTheme { // old themes public static final String STYLE_MATERIAL = "Material"; @@ -59,43 +59,23 @@ public final class KeyboardTheme implements Comparable { /* package private for testing */ static final KeyboardTheme[] KEYBOARD_THEMES = { - new KeyboardTheme(THEME_ID_HOLO_BASE, "HoloBase", R.style.KeyboardTheme_HoloBase, - VERSION_CODES.BASE), - new KeyboardTheme(THEME_ID_LXX_BASE, "LXXBase", R.style.KeyboardTheme_LXX_Base, - VERSION_CODES.LOLLIPOP), - new KeyboardTheme(THEME_ID_LXX_BASE_BORDER, "LXXBaseBorder", R.style.KeyboardTheme_LXX_Base_Border, - VERSION_CODES.LOLLIPOP), - new KeyboardTheme(THEME_ID_ROUNDED_BASE, "RoundedBase", R.style.KeyboardTheme_Rounded_Base, - VERSION_CODES.LOLLIPOP), - new KeyboardTheme(THEME_ID_ROUNDED_BASE_BORDER, "RoundedBaseBorder", R.style.KeyboardTheme_Rounded_Base_Border, - VERSION_CODES.LOLLIPOP) + new KeyboardTheme(THEME_ID_HOLO_BASE, "HoloBase", R.style.KeyboardTheme_HoloBase), + new KeyboardTheme(THEME_ID_LXX_BASE, "LXXBase", R.style.KeyboardTheme_LXX_Base), + new KeyboardTheme(THEME_ID_LXX_BASE_BORDER, "LXXBaseBorder", R.style.KeyboardTheme_LXX_Base_Border), + new KeyboardTheme(THEME_ID_ROUNDED_BASE, "RoundedBase", R.style.KeyboardTheme_Rounded_Base), + new KeyboardTheme(THEME_ID_ROUNDED_BASE_BORDER, "RoundedBaseBorder", R.style.KeyboardTheme_Rounded_Base_Border) }; - static { - // Sort {@link #KEYBOARD_THEME} by descending order of {@link #mMinApiVersion}. - Arrays.sort(KEYBOARD_THEMES); - } - public final int mThemeId; public final int mStyleId; public final String mThemeName; - public final int mMinApiVersion; // Note: The themeId should be aligned with "themeId" attribute of Keyboard style // in values/themes- - diff --git a/app/src/main/res/values-v21/themes-lxx.xml b/app/src/main/res/values-v21/themes-lxx.xml deleted file mode 100644 index 91a851a86..000000000 --- a/app/src/main/res/values-v21/themes-lxx.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values/donottranslate-debug-settings.xml b/app/src/main/res/values/donottranslate-debug-settings.xml index 9b805978d..59653f916 100644 --- a/app/src/main/res/values/donottranslate-debug-settings.xml +++ b/app/src/main/res/values/donottranslate-debug-settings.xml @@ -12,7 +12,6 @@ Debug Mode Show suggestion infos Force non-distinct multitouch - Show LXX suggestion UI Show slide indicator diff --git a/app/src/main/res/values/platform-theme.xml b/app/src/main/res/values/platform-theme.xml index 9a4bbc434..1b92e18d7 100644 --- a/app/src/main/res/values/platform-theme.xml +++ b/app/src/main/res/values/platform-theme.xml @@ -6,5 +6,8 @@ --> - diff --git a/app/src/main/res/values/themes-lxx.xml b/app/src/main/res/values/themes-lxx.xml index 127f168a8..d95fde227 100644 --- a/app/src/main/res/values/themes-lxx.xml +++ b/app/src/main/res/values/themes-lxx.xml @@ -8,7 +8,9 @@