diff --git a/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java b/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java
index 70fb49c5f..c61ba9cf3 100644
--- a/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -7,7 +7,7 @@
package com.android.inputmethod.keyboard;
import android.graphics.Rect;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java b/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java
index 83503f954..728dd0aec 100644
--- a/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java
@@ -7,7 +7,7 @@
package com.android.inputmethod.latin;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.SparseArray;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java b/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java
index c70b75a4b..62b9f59fb 100644
--- a/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java
+++ b/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java
@@ -6,7 +6,7 @@
package com.android.inputmethod.latin.utils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
import org.dslul.openboard.inputmethod.latin.NgramContext;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/AccessibilityUtils.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/AccessibilityUtils.kt
index 97b68b785..ba73405d6 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/AccessibilityUtils.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/AccessibilityUtils.kt
@@ -12,7 +12,7 @@ import android.os.Build
import android.os.SystemClock
import android.provider.Settings
import android.text.TextUtils
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyCodeDescriptionMapper.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyCodeDescriptionMapper.kt
index 715a36f81..eb7af1148 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyCodeDescriptionMapper.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyCodeDescriptionMapper.kt
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.accessibility
import android.content.Context
import android.text.TextUtils
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.util.SparseIntArray
import android.view.inputmethod.EditorInfo
import org.dslul.openboard.inputmethod.keyboard.Key
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityDelegate.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityDelegate.kt
index 681d97cab..b1b314b6e 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityDelegate.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityDelegate.kt
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.accessibility
import android.os.SystemClock
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.view.MotionEvent
import android.view.View
import android.view.accessibility.AccessibilityEvent
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.kt
index a4d482159..aaf77d534 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.kt
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.accessibility
import android.graphics.Rect
import android.os.Bundle
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.view.View
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityRecord
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.kt
index 90b2dd165..0f81f6a7e 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.kt
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.accessibility
import android.graphics.Rect
import android.os.SystemClock
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.util.SparseIntArray
import android.view.MotionEvent
import org.dslul.openboard.inputmethod.accessibility.AccessibilityLongPressTimer.LongPressTimerCallback
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MoreKeysKeyboardAccessibilityDelegate.kt b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MoreKeysKeyboardAccessibilityDelegate.kt
index be3d23463..dbc3442a3 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MoreKeysKeyboardAccessibilityDelegate.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/accessibility/MoreKeysKeyboardAccessibilityDelegate.kt
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.accessibility
import android.graphics.Rect
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.view.MotionEvent
import org.dslul.openboard.inputmethod.keyboard.KeyDetector
import org.dslul.openboard.inputmethod.keyboard.MoreKeysKeyboardView
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
index 885f8509c..302ad734e 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/compat/CompatUtils.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/compat/CompatUtils.kt
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.compat
import android.text.TextUtils
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import java.lang.reflect.Constructor
import java.lang.reflect.Field
import java.lang.reflect.InvocationTargetException
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
index a80aafe9b..0fe4a85fa 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -13,7 +13,7 @@ import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.os.Build;
import android.text.InputType;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.SparseArray;
import android.util.Xml;
import android.view.inputmethod.EditorInfo;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java
index 6cd16ff3f..0f3feea2d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java
@@ -9,7 +9,7 @@ package org.dslul.openboard.inputmethod.keyboard;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java
index 2fefe3edb..740dd534c 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java
@@ -18,7 +18,7 @@ import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Typeface;
import android.util.AttributeSet;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java
index 98720456e..e12a98185 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java
@@ -11,7 +11,7 @@ import static java.lang.Math.abs;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.SystemClock;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.MotionEvent;
import android.view.inputmethod.InputMethodSubtype;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/DynamicGridKeyboard.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
index 4f96848c8..690682af6 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
@@ -10,7 +10,7 @@ import static org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.
import android.content.SharedPreferences;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiCategory.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiCategory.java
index 09d5e76d4..ea810e79c 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiCategory.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiCategory.java
@@ -11,7 +11,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Paint;
import android.graphics.Rect;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.core.graphics.PaintCompat;
import org.dslul.openboard.inputmethod.keyboard.Key;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
index 7c8ffff30..04d514877 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
@@ -13,7 +13,7 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.os.Handler;
import android.util.AttributeSet;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
index 2c019e052..69ca6a113 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.emoji;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java
index 9bf496cbf..a53d0adaf 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/BogusMoveEventDetector.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/BogusMoveEventDetector.java
index cac924af4..df8bf8b1b 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/BogusMoveEventDetector.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/BogusMoveEventDetector.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal;
import android.content.res.Resources;
import android.util.DisplayMetrics;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.R;
import org.dslul.openboard.inputmethod.latin.common.Constants;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
index f5c1099ed..ff9b92d9d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.common.Constants;
import org.dslul.openboard.inputmethod.latin.common.InputPointers;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java
index 5d5eb08fe..b8b416529 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
import android.content.res.TypedArray;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.SparseArray;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt
index f1924c545..ee9da2aaf 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt
@@ -7,7 +7,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal
import android.content.Context
import android.content.res.Resources
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.util.Xml
import android.widget.Toast
import androidx.annotation.XmlRes
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java
index a9356c6d7..9e6ae85eb 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -9,7 +9,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.SparseIntArray;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java
index 0679cdb05..2e5d7fe03 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 24468cc0c..b40f1f29a 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -9,7 +9,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
import org.dslul.openboard.inputmethod.latin.RichInputMethodManager;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MatrixUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MatrixUtils.java
index dc1b0a197..4debe767d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MatrixUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MatrixUtils.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java
index b6216fd68..7dd44dd16 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/NonDistinctMultitouchHelper.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/NonDistinctMultitouchHelper.java
index 6eeb346b3..1a24ddbf7 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/NonDistinctMultitouchHelper.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/NonDistinctMultitouchHelper.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.MotionEvent;
import org.dslul.openboard.inputmethod.keyboard.Key;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/PointerTrackerQueue.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 701381a24..70b04d584 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java
index b010855c0..1652596b1 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/SmoothingUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/SmoothingUtils.java
index 6b258eec0..4c4984d00 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/SmoothingUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/SmoothingUtils.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
import org.dslul.openboard.inputmethod.keyboard.internal.MatrixUtils.MatrixOperationFailedException;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt
index 24c9a2579..7fb938507 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt
@@ -3,7 +3,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import android.view.inputmethod.EditorInfo
import android.widget.Toast
import androidx.annotation.StringRes
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt
index d0ea75743..b1d22ddb7 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt
@@ -2,7 +2,7 @@
package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser
import android.content.Context
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams
import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.KeyData
import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.toTextKey
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java
index fae396553..39a9abd08 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java
@@ -7,7 +7,7 @@ import android.content.res.XmlResourceParser;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.TypedValue;
import android.util.Xml;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java
index 5f22f5ab6..28372f84c 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java
@@ -11,7 +11,7 @@ import static org.dslul.openboard.inputmethod.latin.settings.LanguageSettingsFra
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.common.FileUtils;
import org.dslul.openboard.inputmethod.latin.common.LocaleUtils;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java
index ea463c33d..2f67c706b 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java
@@ -11,7 +11,7 @@ import android.content.Context;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.Nullable;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsContentObserver.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsContentObserver.java
index 6ed09be04..254287851 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsContentObserver.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsContentObserver.java
@@ -12,7 +12,7 @@ import android.content.Context;
import android.database.ContentObserver;
import android.os.SystemClock;
import android.provider.ContactsContract.Contacts;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.ContactsManager.ContactsChangedListener;
import org.dslul.openboard.inputmethod.latin.define.DebugFlags;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsManager.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsManager.java
index c5732c5ac..0115b5be0 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsManager.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsManager.java
@@ -12,7 +12,7 @@ import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.common.Constants;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryCollection.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryCollection.java
index 56a66cba3..9ff20a773 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryCollection.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryCollection.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.latin;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import org.dslul.openboard.inputmethod.latin.common.ComposedData;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryDumpBroadcastReceiver.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryDumpBroadcastReceiver.java
index d3e0746e0..f086a3bd1 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryDumpBroadcastReceiver.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryDumpBroadcastReceiver.java
@@ -9,7 +9,7 @@ package org.dslul.openboard.inputmethod.latin;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
public class DictionaryDumpBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = DictionaryDumpBroadcastReceiver.class.getSimpleName();
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java
index c4f9ca9cf..5b4f1a5c5 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorImpl.java
@@ -10,7 +10,7 @@ import android.Manifest;
import android.content.Context;
import android.provider.UserDictionary;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.LruCache;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorLruCache.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorLruCache.java
index cb55e3d26..009756973 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorLruCache.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFacilitatorLruCache.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin;
import android.content.Context;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFactory.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFactory.java
index ffa56e235..7e4b830c6 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFactory.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryFactory.java
@@ -10,7 +10,7 @@ import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.os.Handler;
import android.os.Looper;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.widget.Toast;
import org.dslul.openboard.inputmethod.latin.makedict.DictionaryHeader;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryPackInstallBroadcastReceiver.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryPackInstallBroadcastReceiver.java
index 036d2d0f9..93fda9d98 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryPackInstallBroadcastReceiver.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/DictionaryPackInstallBroadcastReceiver.java
@@ -13,7 +13,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.net.Uri;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.dictionarypack.DictionaryPackConstants;
import org.dslul.openboard.inputmethod.latin.utils.TargetPackageInfoGetterTask;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/EmojiAltPhysicalKeyDetector.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/EmojiAltPhysicalKeyDetector.java
index 51de6956c..2dd50ec0a 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/EmojiAltPhysicalKeyDetector.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/EmojiAltPhysicalKeyDetector.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin;
import android.content.res.Resources;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.Pair;
import android.view.KeyEvent;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java
index 1e8c0d715..3e4507725 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin;
import android.content.Context;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
index bffaa9c07..26ea14d8d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.latin;
import android.os.Build;
import android.text.InputType;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.EditorInfo;
import org.dslul.openboard.inputmethod.latin.common.StringUtils;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java
index e80f6af68..6623cf4d2 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java
@@ -21,7 +21,7 @@ import android.os.IBinder;
import android.os.Message;
import android.os.Process;
import android.text.InputType;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.PrintWriterPrinter;
import android.util.Printer;
import android.util.SparseArray;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputConnection.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputConnection.java
index e51a8d5e7..26c134e8a 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputConnection.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputConnection.java
@@ -15,7 +15,7 @@ import android.os.SystemClock;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.CharacterStyle;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.KeyEvent;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.CorrectionInfo;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java
index 6a1fec885..db3526f71 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java
@@ -11,7 +11,7 @@ import android.content.SharedPreferences;
import android.inputmethodservice.InputMethodService;
import android.os.AsyncTask;
import android.os.IBinder;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodSubtype.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodSubtype.java
index bda31c112..57ffa2e5d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodSubtype.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodSubtype.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin;
import android.os.Build;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodSubtype;
import org.dslul.openboard.inputmethod.compat.InputMethodSubtypeCompatUtils;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java
index 9cdae0e48..641f461da 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
import org.dslul.openboard.inputmethod.keyboard.Keyboard;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/SystemBroadcastReceiver.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/SystemBroadcastReceiver.java
index af2399c8d..f9c1270d7 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/SystemBroadcastReceiver.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/SystemBroadcastReceiver.java
@@ -11,10 +11,9 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Process;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodManager;
import org.dslul.openboard.inputmethod.keyboard.KeyboardLayoutSet;
@@ -84,11 +83,6 @@ public final class SystemBroadcastReceiver extends BroadcastReceiver {
}
public static void toggleAppIcon(final Context context) {
- final int appInfoFlags = context.getApplicationInfo().flags;
- final boolean isSystemApp = (appInfoFlags & ApplicationInfo.FLAG_SYSTEM) > 0;
- if (Log.isLoggable(TAG, Log.INFO)) {
- Log.i(TAG, "toggleAppIcon() : FLAG_SYSTEM = " + isSystemApp);
- }
final SharedPreferences prefs = DeviceProtectedUtils.getSharedPreferences(context);
context.getPackageManager().setComponentEnabledSetting(
new ComponentName(context, SetupActivity.class),
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java
index 9b505e2c6..1d1afae15 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java
@@ -14,7 +14,7 @@ import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.provider.UserDictionary.Words;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.Nullable;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
index 90f63b17a..e07e6cb3f 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
@@ -13,7 +13,7 @@ import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.BackgroundColorSpan;
import android.text.style.SuggestionSpan;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.inputmethod.CorrectionInfo;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/PersonalizationHelper.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/PersonalizationHelper.java
index 2632efc57..49833d8dd 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin.personalization;
import android.content.Context;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.java
deleted file mode 100644
index f5df0ba30..000000000
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.java
+++ /dev/null
@@ -1,84 +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.latin.settings;
-
-import android.graphics.Color;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.os.Bundle;
-import android.text.Spanned;
-import android.text.method.LinkMovementMethod;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.appcompat.app.AlertDialog;
-import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.preference.Preference;
-
-import org.dslul.openboard.inputmethod.latin.BuildConfig;
-import org.dslul.openboard.inputmethod.latin.R;
-import org.dslul.openboard.inputmethod.latin.utils.SpannableStringUtils;
-
-/**
- * "About" sub screen.
- */
-public final class AboutFragment extends SubScreenFragment {
- @Override
- public void onCreate(final Bundle icicle) {
- super.onCreate(icicle);
- addPreferencesFromResource(R.xml.prefs_screen_about);
-
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
- // need to set icon tint because old android versions don't use the vector drawables
- for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
- final Preference p = getPreferenceScreen().getPreference(0);
- final Drawable icon = p.getIcon();
- if (icon != null)
- DrawableCompat.setTint(icon, Color.WHITE);
- }
- }
-
- setupHiddenFeatures();
- setupVersionPref();
- }
-
- private void setupHiddenFeatures() {
- Preference hiddenFeaturesPreference = findPreference("hidden_features");
- hiddenFeaturesPreference.setOnPreferenceClickListener(preference -> {
- final String link = ""
- + getString(R.string.hidden_features_text) + "";
- final String message = requireContext().getString(R.string.hidden_features_message, link);
- final Spanned dialogMessage = SpannableStringUtils.fromHtml(message);
-
- final AlertDialog builder = new AlertDialog.Builder(requireContext())
- .setIcon(R.drawable.ic_settings_about_hidden_features)
- .setTitle(R.string.hidden_features_title)
- .setMessage(dialogMessage)
- .setPositiveButton(R.string.dialog_close, null)
- .create();
- builder.show();
- ((TextView) builder.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
- return true;
- });
- }
-
- private void setupVersionPref() {
- Preference versionPreference = findPreference("pref_key_version");
- versionPreference.setSummary(BuildConfig.VERSION_NAME);
- if (BuildConfig.DEBUG) return;
- int[] count = new int[] {0};
- versionPreference.setOnPreferenceClickListener((pref) -> {
- if (getSharedPreferences().getBoolean(DebugSettings.PREF_SHOW_DEBUG_SETTINGS, false))
- return true;
- count[0]++;
- if (count[0] < 5) return true;
- getSharedPreferences().edit().putBoolean(DebugSettings.PREF_SHOW_DEBUG_SETTINGS, true).apply();
- Toast.makeText(requireContext(), R.string.prefs_debug_settings_enabled, Toast.LENGTH_LONG).show();
- return true;
- });
- }
-}
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.kt
new file mode 100644
index 000000000..df00d16ae
--- /dev/null
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AboutFragment.kt
@@ -0,0 +1,101 @@
+/*
+ * 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.latin.settings
+
+import android.app.Activity
+import android.content.Intent
+import android.graphics.Color
+import android.os.Build
+import android.os.Bundle
+import android.text.method.LinkMovementMethod
+import android.view.View
+import android.widget.TextView
+import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AlertDialog
+import androidx.core.graphics.drawable.DrawableCompat
+import androidx.preference.Preference
+import org.dslul.openboard.inputmethod.latin.BuildConfig
+import org.dslul.openboard.inputmethod.latin.R
+import org.dslul.openboard.inputmethod.latin.utils.Log
+import org.dslul.openboard.inputmethod.latin.utils.SpannableStringUtils
+
+/**
+ * "About" sub screen.
+ */
+class AboutFragment : SubScreenFragment() {
+ override fun onCreate(icicle: Bundle?) {
+ super.onCreate(icicle)
+ addPreferencesFromResource(R.xml.prefs_screen_about)
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ // need to set icon tint because old android versions don't use the vector drawables
+ for (i in 0 until preferenceScreen.preferenceCount) {
+ val p = preferenceScreen.getPreference(0)
+ val icon = p.icon
+ if (icon != null) DrawableCompat.setTint(icon, Color.WHITE)
+ }
+ }
+
+ setupHiddenFeatures()
+ setupVersionPref()
+ findPreference("log_reader")?.setOnPreferenceClickListener {
+ val intent = Intent(Intent.ACTION_CREATE_DOCUMENT)
+ .addCategory(Intent.CATEGORY_OPENABLE)
+ .putExtra(Intent.EXTRA_TITLE,
+ requireContext().getString(R.string.english_ime_name)
+ .replace(" ", "_") + "_log_${System.currentTimeMillis()}.txt"
+ )
+ .setType("text/plain")
+ logFilePicker.launch(intent)
+ true
+ }
+ }
+
+ private val logFilePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode != Activity.RESULT_OK) return@registerForActivityResult
+ val uri = result.data?.data ?: return@registerForActivityResult
+ activity?.contentResolver?.openOutputStream(uri)?.use { os ->
+ os.bufferedWriter().use { it.write(Log.getLog().joinToString("\n")) }
+ }
+ }
+
+ private fun setupHiddenFeatures() {
+ findPreference("hidden_features")?.onPreferenceClickListener =
+ Preference.OnPreferenceClickListener {
+ val link = (""
+ + getString(R.string.hidden_features_text) + "")
+ val message = requireContext().getString(R.string.hidden_features_message, link)
+ val dialogMessage = SpannableStringUtils.fromHtml(message)
+ val builder = AlertDialog.Builder(requireContext())
+ .setIcon(R.drawable.ic_settings_about_hidden_features)
+ .setTitle(R.string.hidden_features_title)
+ .setMessage(dialogMessage)
+ .setPositiveButton(R.string.dialog_close, null)
+ .create()
+ builder.show()
+ (builder.findViewById(android.R.id.message) as TextView).movementMethod = LinkMovementMethod.getInstance()
+ true
+ }
+ }
+
+ private fun setupVersionPref() {
+ val versionPreference = findPreference("pref_key_version") ?: return
+ versionPreference.summary = BuildConfig.VERSION_NAME
+ if (BuildConfig.DEBUG) return
+ var count = 0
+ versionPreference.onPreferenceClickListener =
+ Preference.OnPreferenceClickListener {
+ if (sharedPreferences.getBoolean(DebugSettings.PREF_SHOW_DEBUG_SETTINGS, false))
+ return@OnPreferenceClickListener true
+ count++
+ if (count < 5) return@OnPreferenceClickListener true
+ sharedPreferences.edit().putBoolean(DebugSettings.PREF_SHOW_DEBUG_SETTINGS, true).apply()
+ Toast.makeText(requireContext(), R.string.prefs_debug_settings_enabled, Toast.LENGTH_LONG).show()
+ true
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt
index 9795bf87a..337c22e8f 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt
@@ -11,7 +11,7 @@ import android.content.SharedPreferences
import android.net.Uri
import android.os.Build
import android.os.Bundle
-import android.util.Log
+import org.dslul.openboard.inputmethod.latin.utils.Log
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.preference.Preference
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
index 63b52cc26..366b824c0 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
@@ -14,7 +14,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
index 67b8c179a..9e5e8832d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
@@ -11,7 +11,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SubScreenFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SubScreenFragment.java
index 4fd4b86ae..2fa0f543f 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SubScreenFragment.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SubScreenFragment.java
@@ -14,7 +14,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java
index 0f88a3cd5..b5dfb7fa7 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java
@@ -17,7 +17,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.provider.Settings;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
index 33ae8698f..a29d4ab5a 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
@@ -9,7 +9,7 @@ package org.dslul.openboard.inputmethod.latin.spellcheck;
import android.content.res.Resources;
import android.os.Binder;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.textservice.SentenceSuggestionsInfo;
import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index a8c0338a5..84db0c81d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -13,7 +13,7 @@ import android.os.Binder;
import android.provider.UserDictionary.Words;
import android.service.textservice.SpellCheckerService.Session;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.LruCache;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/MoreSuggestionsView.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/MoreSuggestionsView.java
index d54a4efb8..137ad29c8 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.latin.suggestions;
import android.content.Context;
import android.util.AttributeSet;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java
index 563bb1aea..1cfca7b19 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.latin.utils;
import android.os.Build;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodSubtype;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ApplicationUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ApplicationUtils.java
index 9ff2152a8..dff9a9a9d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ApplicationUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ApplicationUtils.java
@@ -12,7 +12,7 @@ import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
public final class ApplicationUtils {
private static final String TAG = ApplicationUtils.class.getSimpleName();
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AsyncResultHolder.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AsyncResultHolder.java
index da600a5f4..0a74f5475 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AsyncResultHolder.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AsyncResultHolder.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.latin.utils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java
index 89085733d..c2f9ae2b5 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.latin.utils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DebugLogUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DebugLogUtils.java
index 591b6dadf..64f6fc5d5 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DebugLogUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DebugLogUtils.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.latin.utils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.define.DebugFlags;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DeviceProtectedUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DeviceProtectedUtils.java
index 3248432e6..1669af862 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DeviceProtectedUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DeviceProtectedUtils.java
@@ -10,7 +10,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.PreferenceManager;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import androidx.annotation.RequiresApi;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java
index 97e8fa5e4..26807b101 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -11,7 +11,7 @@ import android.content.Context;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.text.TextUtils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodSubtype;
import androidx.annotation.NonNull;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ExecutorUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ExecutorUtils.java
index ffb19173c..e1266427b 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ExecutorUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ExecutorUtils.java
@@ -6,7 +6,7 @@
package org.dslul.openboard.inputmethod.latin.utils;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
@@ -47,7 +47,7 @@ public class ExecutorUtils {
public Thread newThread(final Runnable runnable) {
Thread thread = new Thread(runnable, TAG);
thread.setUncaughtExceptionHandler((thread1, ex) ->
- Log.w(mName + "-" + runnable.getClass().getSimpleName(), ex));
+ Log.w(mName, runnable.getClass().getSimpleName(), ex));
return thread;
}
}
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java
index 1eb9886f6..75f189f11 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java
@@ -7,7 +7,7 @@
package org.dslul.openboard.inputmethod.latin.utils;
import android.app.Application;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import org.dslul.openboard.inputmethod.latin.BuildConfig;
import org.dslul.openboard.inputmethod.latin.define.JniLibName;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JsonUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JsonUtils.java
index bcc8e9ada..3a3503498 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JsonUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JsonUtils.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.latin.utils;
import android.util.JsonReader;
import android.util.JsonWriter;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import java.io.Closeable;
import java.io.IOException;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/Log.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/Log.kt
new file mode 100644
index 000000000..22a587792
--- /dev/null
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/Log.kt
@@ -0,0 +1,98 @@
+package org.dslul.openboard.inputmethod.latin.utils
+
+import android.os.Build
+import java.time.LocalDateTime
+import java.util.Date
+
+/**
+ * Logger that does the android logging, but also allows reading the log in the app.
+ * It's only a little slower than the android logger, but since both are used we end up at
+ * half performance (still fast enough to not be noticeable, unless spamming thousands of log lines)
+ */
+object Log {
+ @JvmStatic
+ fun wtf(tag: String?, message: String) {
+ log(LogLine('F', tag, message))
+ android.util.Log.wtf(tag, message)
+ }
+
+ @JvmStatic
+ fun e(tag: String?, message: String, e: Throwable) {
+ log(LogLine('E', tag, "$message\n${e.stackTraceToString()}"))
+ android.util.Log.e(tag, message, e)
+ }
+
+ @JvmStatic
+ fun e(tag: String?, message: String) {
+ log(LogLine('E', tag, message))
+ android.util.Log.e(tag, message)
+ }
+
+ @JvmStatic
+ fun w(tag: String?, message: String, e: Throwable) {
+ log(LogLine('W', tag, "$message\n${e.stackTraceToString()}"))
+ android.util.Log.w(tag, message, e)
+ }
+
+ @JvmStatic
+ fun w(tag: String?, message: String) {
+ log(LogLine('W', tag, message))
+ android.util.Log.w(tag, message)
+ }
+
+ @JvmStatic
+ fun i(tag: String?, message: String, e: Throwable) {
+ log(LogLine('I', tag, "$message\n${e.stackTraceToString()}"))
+ android.util.Log.i(tag, message, e)
+ }
+
+ @JvmStatic
+ fun i(tag: String?, message: String) {
+ log(LogLine('I', tag, message))
+ android.util.Log.i(tag, message)
+ }
+
+ @JvmStatic
+ fun d(tag: String?, message: String, e: Throwable) {
+ log(LogLine('D', tag, "$message\n${e.stackTraceToString()}"))
+ android.util.Log.d(tag, message, e)
+ }
+
+ @JvmStatic
+ fun d(tag: String?, message: String) {
+ log(LogLine('D', tag, message))
+ android.util.Log.d(tag, message)
+ }
+
+ @JvmStatic
+ fun v(tag: String?, message: String) {
+ log(LogLine('V', tag, message))
+ android.util.Log.v(tag, message)
+ }
+
+ private fun log(line: LogLine) {
+ synchronized(logLines) {
+ if (logLines.size > 12000) // clear oldest entries if list gets too long
+ logLines.subList(0, 2000).clear()
+ logLines.add(line)
+ }
+ }
+
+ private val logLines: MutableList = ArrayList(2000)
+
+ /** returns a copy of [logLines] */
+ fun getLog() = synchronized(logLines) { logLines.toList() }
+}
+
+data class LogLine(val level: Char, val tag: String?, val message: String) {
+
+ // time can be Date or LocalDateTime, doesn't matter because but it's used for toString only
+ private val time = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ LocalDateTime.now()
+ } else {
+ Date(System.currentTimeMillis())
+ }
+
+ override fun toString(): String = // should look like a normal android log line, at least for api26+
+ "${time.toString().replace('T', ' ')} $level $tag: $message"
+}
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java
index f30328b30..9b087845e 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java
@@ -12,7 +12,7 @@ import android.content.res.TypedArray;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.util.TypedValue;
import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/SubtypeLocaleUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/SubtypeLocaleUtils.java
index 4c09df417..a3dd0e77b 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/SubtypeLocaleUtils.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/SubtypeLocaleUtils.java
@@ -8,7 +8,7 @@ package org.dslul.openboard.inputmethod.latin.utils;
import android.content.Context;
import android.content.res.Resources;
-import android.util.Log;
+import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodSubtype;
import org.dslul.openboard.inputmethod.latin.R;
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 70da771cc..1f1d591ff 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -661,11 +661,13 @@ New dictionary:
Version
- View on GitHub
+ View on GitHub
+
+ Save log
- Open-source license
+ Open-source license
- GNU General Public License v3.0
+ GNU General Public License v3.0
Close
diff --git a/app/src/main/res/xml/prefs_screen_about.xml b/app/src/main/res/xml/prefs_screen_about.xml
index c8be63328..5d33b60a7 100644
--- a/app/src/main/res/xml/prefs_screen_about.xml
+++ b/app/src/main/res/xml/prefs_screen_about.xml
@@ -41,4 +41,9 @@
android:action="android.intent.action.VIEW"
android:data="https://github.com/Helium314/openboard" />
+
+
+