diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..cdaaa383 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +max_line_length = 120 +trim_trailing_whitespace = true + +[{*.har,*.json}] +indent_size = 2 diff --git a/app/.gitignore b/app/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 3c1697ed..00000000 --- a/app/build.gradle +++ /dev/null @@ -1,76 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - -android { - compileSdkVersion 29 - buildToolsVersion "29.0.2" - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - } - - defaultConfig { - applicationId "dev.patrickgold.florisboard" - minSdkVersion 23 - targetSdkVersion 29 - versionCode 26 - versionName "0.3.7" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildFeatures { - viewBinding true - } - - buildTypes { - debug { - applicationIdSuffix ".debug" - resValue 'string', 'floris_app_name', 'FlorisBoard Debug' - } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - resValue 'string', 'floris_app_name', '@string/app_name' - } - } - - testOptions { - unitTests { - includeAndroidResources = true - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.core:core-ktx:1.3.2' - implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - testImplementation 'androidx.test:core:1.3.0' - testImplementation 'org.mockito:mockito-core:1.10.19' - testImplementation 'org.mockito:mockito-inline:2.13.0' - testImplementation 'org.robolectric:robolectric:4.4' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - implementation 'com.google.android:flexbox:2.0.1' - implementation "com.squareup.moshi:moshi-kotlin:1.9.2" - implementation 'com.squareup.moshi:moshi-adapters:1.9.2' - implementation 'com.google.android.material:material:1.2.1' - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7" - implementation 'com.jaredrummler:colorpicker:1.1.0' - implementation 'com.jakewharton.timber:timber:4.7.1' - implementation "com.michael-bull.kotlin-result:kotlin-result:1.1.9" - implementation 'com.nambimobile.widgets:expandable-fab:1.0.2' -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 00000000..85b8db63 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,77 @@ +plugins { + id("com.android.application") version "4.1.2" + kotlin("android") version "1.4.30" +} + +android { + compileSdkVersion(29) + buildToolsVersion("29.0.2") + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + freeCompilerArgs = listOf("-Xallow-result-return-type") // enables use of kotlin.Result + } + + defaultConfig { + applicationId = "dev.patrickgold.florisboard" + minSdkVersion(23) + targetSdkVersion(29) + versionCode(26) + versionName("0.3.7") + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildFeatures { + viewBinding = true + } + + buildTypes { + named("debug").configure { + applicationIdSuffix = ".debug" + resValue("string", "floris_app_name", "FlorisBoard Debug") + } + + named("release").configure { + proguardFiles.add(getDefaultProguardFile("proguard-android-optimize.txt")) + resValue("string", "floris_app_name", "@string/app_name") + } + } + + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } + + lintOptions { + isAbortOnError = false + } +} + +dependencies { + implementation("androidx.appcompat", "appcompat", "1.2.0") + implementation("androidx.core", "core-ktx", "1.3.2") + implementation("androidx.preference", "preference-ktx", "1.1.1") + implementation("androidx.constraintlayout", "constraintlayout", "2.0.4") + implementation("com.google.android", "flexbox", "2.0.1") // requires jcenter as of version 2.0.1 + implementation("com.squareup.moshi", "moshi-kotlin", "1.11.0") + implementation("com.squareup.moshi", "moshi-adapters", "1.11.0") + implementation("com.google.android.material", "material", "1.3.0") + implementation("org.jetbrains.kotlinx", "kotlinx-coroutines-android", "1.4.2") + implementation("com.jaredrummler", "colorpicker", "1.1.0") + implementation("com.jakewharton.timber", "timber", "4.7.1") + implementation("com.michael-bull.kotlin-result", "kotlin-result", "1.1.10") + implementation("com.nambimobile.widgets", "expandable-fab", "1.0.2") + + testImplementation("junit", "junit", "4.13.1") + testImplementation("org.mockito", "mockito-inline", "3.7.7") + testImplementation("org.robolectric", "robolectric", "4.5.1") + androidTestImplementation("androidx.test.ext", "junit", "1.1.2") + androidTestImplementation("androidx.test.espresso", "espresso-core", "3.3.0") +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/dev/patrickgold/florisboard/ExampleInstrumentedTest.kt b/app/src/androidTest/java/dev/patrickgold/florisboard/ExampleInstrumentedTest.kt index 312bf2de..1af3f253 100644 --- a/app/src/androidTest/java/dev/patrickgold/florisboard/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/dev/patrickgold/florisboard/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package dev.patrickgold.florisboard -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/EditorInstance.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/EditorInstance.kt index 8c3c2dce..9986d17c 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/EditorInstance.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/EditorInstance.kt @@ -29,7 +29,6 @@ import android.view.KeyCharacterMap import android.view.KeyEvent import android.view.inputmethod.EditorInfo import android.view.inputmethod.ExtractedTextRequest -import android.view.inputmethod.InputConnection import android.view.inputmethod.InputContentInfo import androidx.annotation.RequiresApi import dev.patrickgold.florisboard.ime.text.key.KeyCode @@ -529,7 +528,7 @@ class EditorInstance private constructor(private val ims: InputMethodService?) { * [KeyCode] or this call may send a weird character, as this key codes do not match!! */ fun sendSystemKeyEventCtrl(keyCode: Int) { - val ic = ims?.currentInputConnection ?: return + ims?.currentInputConnection ?: return sendDownUpKeyEvents(keyCode, KeyEvent.META_CTRL_ON) } @@ -541,7 +540,7 @@ class EditorInstance private constructor(private val ims: InputMethodService?) { * [KeyCode] or this call may send a weird character, as this key codes do not match!! */ fun sendSystemKeyEventCtrlShift(keyCode: Int) { - val ic = ims?.currentInputConnection ?: return + ims?.currentInputConnection ?: return sendDownUpKeyEvents(keyCode, KeyEvent.META_SHIFT_ON or KeyEvent.META_CTRL_ON) } diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisBoard.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisBoard.kt index c6f66370..23a35d19 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisBoard.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisBoard.kt @@ -26,7 +26,10 @@ import android.graphics.Color import android.inputmethodservice.ExtractEditText import android.inputmethodservice.InputMethodService import android.media.AudioManager -import android.os.* +import android.os.Build +import android.os.Handler +import android.os.VibrationEffect +import android.os.Vibrator import android.provider.Settings import android.view.* import android.view.inputmethod.EditorInfo @@ -39,10 +42,10 @@ import androidx.core.graphics.drawable.DrawableCompat import com.squareup.moshi.Json import dev.patrickgold.florisboard.BuildConfig import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode import dev.patrickgold.florisboard.ime.media.MediaInputManager import dev.patrickgold.florisboard.ime.popup.PopupLayerView import dev.patrickgold.florisboard.ime.text.TextInputManager -import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyData diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisViewFlipper.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisViewFlipper.kt index 8703d86c..292f8817 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisViewFlipper.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/FlorisViewFlipper.kt @@ -19,7 +19,6 @@ package dev.patrickgold.florisboard.ime.core import android.content.Context import android.util.AttributeSet import android.widget.ViewFlipper -import java.lang.IllegalArgumentException /** * Custom ViewFlipper class used to prevent an unnecessary exception to be thrown when it is diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/InputWindowView.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/InputWindowView.kt index af783ee4..f7a884ac 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/InputWindowView.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/InputWindowView.kt @@ -18,12 +18,7 @@ package dev.patrickgold.florisboard.ime.core import android.content.Context import android.util.AttributeSet -import android.util.Log import android.widget.FrameLayout -import android.widget.LinearLayout -import android.widget.ViewFlipper -import dev.patrickgold.florisboard.BuildConfig -import dev.patrickgold.florisboard.R /** * Root view of the keyboard. diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt index f59a8ee9..c99c8a4e 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt @@ -30,7 +30,6 @@ import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction import dev.patrickgold.florisboard.ime.theme.ThemeMode import dev.patrickgold.florisboard.util.TimeUtil import dev.patrickgold.florisboard.util.VersionName -import kotlin.collections.HashMap /** * Helper class for an organized access to the shared preferences. diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/SubtypeManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/SubtypeManager.kt index d09fc66e..f4cec6c4 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/SubtypeManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/SubtypeManager.kt @@ -20,7 +20,10 @@ import android.content.Context import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import dev.patrickgold.florisboard.util.LocaleUtils -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.launch import java.util.* /** diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/extension/AssetManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/extension/AssetManager.kt index 01c8ea79..99a9a74c 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/extension/AssetManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/extension/AssetManager.kt @@ -19,13 +19,10 @@ package dev.patrickgold.florisboard.ime.extension import android.content.Context import com.github.michaelbull.result.* import com.squareup.moshi.Moshi -import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory -import dev.patrickgold.florisboard.ime.popup.PopupExtension import dev.patrickgold.florisboard.ime.text.key.KeyTypeAdapter import dev.patrickgold.florisboard.ime.text.key.KeyVariationAdapter import dev.patrickgold.florisboard.ime.text.layout.LayoutTypeAdapter -import dev.patrickgold.florisboard.ime.theme.Theme import timber.log.Timber import java.io.File diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/media/emoji/EmojiLayoutData.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/media/emoji/EmojiLayoutData.kt index 4f2ff73f..7fa6cadc 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/media/emoji/EmojiLayoutData.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/media/emoji/EmojiLayoutData.kt @@ -19,13 +19,11 @@ package dev.patrickgold.florisboard.ime.media.emoji import android.content.Context import android.graphics.Paint import android.graphics.Typeface -import android.util.Log import androidx.core.graphics.PaintCompat import timber.log.Timber import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader -import java.lang.Exception import java.util.* private const val GROUP_IDENTIFIER = "# group: " diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/popup/PopupManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/popup/PopupManager.kt index ad30afbf..5f6cb6ec 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/popup/PopupManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/popup/PopupManager.kt @@ -17,7 +17,9 @@ package dev.patrickgold.florisboard.ime.popup import android.content.res.Configuration -import android.view.* +import android.view.Gravity +import android.view.MotionEvent +import android.view.View import androidx.core.content.ContextCompat.getDrawable import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.ime.media.emoji.EmojiKeyData diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt index bfb8e870..38725506 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt @@ -21,7 +21,7 @@ import android.animation.ValueAnimator import android.content.Context import android.os.Handler import android.view.KeyEvent -import android.view.inputmethod.* +import android.view.inputmethod.InputMethodManager import android.widget.LinearLayout import android.widget.Toast import android.widget.ViewFlipper diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/gestures/SwipeGesture.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/gestures/SwipeGesture.kt index 3a433232..8fce508b 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/gestures/SwipeGesture.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/gestures/SwipeGesture.kt @@ -19,8 +19,9 @@ package dev.patrickgold.florisboard.ime.text.gestures import android.content.Context import android.view.MotionEvent import dev.patrickgold.florisboard.R -import java.lang.Exception -import kotlin.math.* +import kotlin.math.PI +import kotlin.math.abs +import kotlin.math.atan /** * Wrapper class which holds all enums, interfaces and classes for detecting a swipe gesture. diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyData.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyData.kt index 66554366..4f5a924e 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyData.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyData.kt @@ -17,6 +17,7 @@ package dev.patrickgold.florisboard.ime.text.key import dev.patrickgold.florisboard.ime.popup.PopupSet +import dev.patrickgold.florisboard.ime.text.key.FlorisKeyData.Companion.GROUP_DEFAULT /** * Data class which describes a single key and its attributes. diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyType.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyType.kt index 844b48b5..8d263117 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyType.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyType.kt @@ -16,7 +16,6 @@ package dev.patrickgold.florisboard.ime.text.key -import android.annotation.SuppressLint import com.squareup.moshi.FromJson import java.util.* diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/keyboard/KeyboardView.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/keyboard/KeyboardView.kt index fd2b8b0e..ae85f9e8 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/keyboard/KeyboardView.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/keyboard/KeyboardView.kt @@ -30,10 +30,10 @@ import dev.patrickgold.florisboard.ime.core.FlorisBoard import dev.patrickgold.florisboard.ime.core.PrefHelper import dev.patrickgold.florisboard.ime.popup.PopupManager import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction -import dev.patrickgold.florisboard.ime.text.key.KeyView -import dev.patrickgold.florisboard.ime.text.layout.ComputedLayoutData import dev.patrickgold.florisboard.ime.text.gestures.SwipeGesture import dev.patrickgold.florisboard.ime.text.key.KeyCode +import dev.patrickgold.florisboard.ime.text.key.KeyView +import dev.patrickgold.florisboard.ime.text.layout.ComputedLayoutData import dev.patrickgold.florisboard.ime.theme.Theme import dev.patrickgold.florisboard.ime.theme.ThemeManager import kotlin.math.roundToInt diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutData.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutData.kt index 6dc5b3d4..cce4e431 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutData.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutData.kt @@ -18,7 +18,6 @@ package dev.patrickgold.florisboard.ime.text.layout import dev.patrickgold.florisboard.ime.text.key.FlorisKeyData import dev.patrickgold.florisboard.ime.text.key.KeyCode -import dev.patrickgold.florisboard.ime.text.key.KeyData import dev.patrickgold.florisboard.ime.text.key.KeyType import dev.patrickgold.florisboard.ime.text.keyboard.KeyboardMode diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutManager.kt index 1f58b620..edc2780d 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/layout/LayoutManager.kt @@ -17,7 +17,6 @@ package dev.patrickgold.florisboard.ime.text.layout import android.content.Context -import com.github.michaelbull.result.getOr import com.github.michaelbull.result.onSuccess import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory diff --git a/app/src/main/java/dev/patrickgold/florisboard/settings/components/DialogSeekBarPreference.kt b/app/src/main/java/dev/patrickgold/florisboard/settings/components/DialogSeekBarPreference.kt index 13df8ae5..6bcca63f 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/settings/components/DialogSeekBarPreference.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/settings/components/DialogSeekBarPreference.kt @@ -22,6 +22,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.SeekBar import androidx.preference.Preference +import androidx.preference.Preference.OnPreferenceChangeListener +import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.PreferenceManager import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.databinding.SeekBarDialogBinding @@ -161,4 +163,4 @@ class DialogSeekBarPreference : Preference { private fun seekBarProgressToActualValue(progress: Int): Int { return (progress * step) + min } -} \ No newline at end of file +} diff --git a/app/src/main/java/dev/patrickgold/florisboard/settings/components/ThemeSelectorPreference.kt b/app/src/main/java/dev/patrickgold/florisboard/settings/components/ThemeSelectorPreference.kt index c806b861..43af1ec5 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/settings/components/ThemeSelectorPreference.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/settings/components/ThemeSelectorPreference.kt @@ -22,6 +22,7 @@ import android.content.Intent import android.content.SharedPreferences import android.util.AttributeSet import androidx.preference.Preference +import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.PreferenceManager import com.github.michaelbull.result.onSuccess import dev.patrickgold.florisboard.R @@ -104,4 +105,4 @@ class ThemeSelectorPreference : Preference, SharedPreferences.OnSharedPreference i.putExtra(ThemeManagerActivity.EXTRA_DEFAULT_VALUE, defaultValue) context.startActivity(i) } -} \ No newline at end of file +} diff --git a/app/src/main/java/dev/patrickgold/florisboard/settings/components/TimePickerDialogPreference.kt b/app/src/main/java/dev/patrickgold/florisboard/settings/components/TimePickerDialogPreference.kt index 5833fe98..b0c8f7a1 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/settings/components/TimePickerDialogPreference.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/settings/components/TimePickerDialogPreference.kt @@ -20,6 +20,8 @@ import android.app.TimePickerDialog import android.content.Context import android.util.AttributeSet import androidx.preference.Preference +import androidx.preference.Preference.OnPreferenceChangeListener +import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.PreferenceManager import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.util.TimeUtil @@ -82,4 +84,4 @@ class TimePickerDialogPreference : Preference { }, time.hour, time.minute, true) timePickerDialog.show() } -} \ No newline at end of file +} diff --git a/app/src/main/java/dev/patrickgold/florisboard/setup/FinishFragment.kt b/app/src/main/java/dev/patrickgold/florisboard/setup/FinishFragment.kt index 907f6c2e..7d498f82 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/setup/FinishFragment.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/setup/FinishFragment.kt @@ -22,7 +22,6 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import dev.patrickgold.florisboard.databinding.SetupFragmentFinishBinding -import dev.patrickgold.florisboard.ime.theme.Theme class FinishFragment : Fragment() { private lateinit var binding: SetupFragmentFinishBinding diff --git a/app/src/main/java/dev/patrickgold/florisboard/util/AppVersionUtils.kt b/app/src/main/java/dev/patrickgold/florisboard/util/AppVersionUtils.kt index 1b1885d3..b56394b8 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/util/AppVersionUtils.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/util/AppVersionUtils.kt @@ -18,7 +18,6 @@ package dev.patrickgold.florisboard.util import android.content.Context import dev.patrickgold.florisboard.ime.core.PrefHelper -import java.lang.Exception object AppVersionUtils { fun getRawVersionName(context: Context): String { diff --git a/app/src/test/java/dev/patrickgold/florisboard/ime/core/SubtypeTest.kt b/app/src/test/java/dev/patrickgold/florisboard/ime/core/SubtypeTest.kt index ec80a136..9467f00d 100644 --- a/app/src/test/java/dev/patrickgold/florisboard/ime/core/SubtypeTest.kt +++ b/app/src/test/java/dev/patrickgold/florisboard/ime/core/SubtypeTest.kt @@ -1,6 +1,6 @@ package dev.patrickgold.florisboard.ime.core -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat import org.junit.Test import java.util.* diff --git a/app/src/test/java/dev/patrickgold/florisboard/ime/core/TestablePrefHelper.kt b/app/src/test/java/dev/patrickgold/florisboard/ime/core/TestablePrefHelper.kt index ca0c0937..a8e149e5 100644 --- a/app/src/test/java/dev/patrickgold/florisboard/ime/core/TestablePrefHelper.kt +++ b/app/src/test/java/dev/patrickgold/florisboard/ime/core/TestablePrefHelper.kt @@ -2,7 +2,8 @@ package dev.patrickgold.florisboard.ime.core import android.content.Context import android.content.SharedPreferences -import org.mockito.Mockito.* +import org.mockito.Mockito.doReturn +import org.mockito.Mockito.mock /** * Helper class which automatically sets up all mocks for the different pref categories. diff --git a/app/src/test/java/dev/patrickgold/florisboard/ime/text/layout/LayoutTypeTest.kt b/app/src/test/java/dev/patrickgold/florisboard/ime/text/layout/LayoutTypeTest.kt index fd858ccc..d7fcdcba 100644 --- a/app/src/test/java/dev/patrickgold/florisboard/ime/text/layout/LayoutTypeTest.kt +++ b/app/src/test/java/dev/patrickgold/florisboard/ime/text/layout/LayoutTypeTest.kt @@ -1,6 +1,6 @@ package dev.patrickgold.florisboard.ime.text.layout -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat import org.junit.Test diff --git a/app/src/test/java/dev/patrickgold/florisboard/util/AppVersionUtilsTest.kt b/app/src/test/java/dev/patrickgold/florisboard/util/AppVersionUtilsTest.kt index 057cce7b..f90199dd 100644 --- a/app/src/test/java/dev/patrickgold/florisboard/util/AppVersionUtilsTest.kt +++ b/app/src/test/java/dev/patrickgold/florisboard/util/AppVersionUtilsTest.kt @@ -4,14 +4,16 @@ import android.content.Context import android.content.pm.PackageInfo import android.content.pm.PackageManager import dev.patrickgold.florisboard.ime.core.TestablePrefHelper -import org.hamcrest.CoreMatchers.* +import org.hamcrest.CoreMatchers.`is` +import org.hamcrest.CoreMatchers.nullValue import org.hamcrest.MatcherAssert.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers import org.mockito.Mock -import org.mockito.Mockito.* +import org.mockito.Mockito.`when` +import org.mockito.Mockito.doReturn import org.mockito.junit.MockitoJUnitRunner @RunWith(MockitoJUnitRunner.Silent::class) diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 441d6887..00000000 --- a/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - ext.kotlin_version = '1.4.10' - repositories { - google() - jcenter() - - } - dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - jcenter() - - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..6867359d --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,21 @@ +import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask + +plugins { + id("com.github.ben-manes.versions") version "0.36.0" + base // adds clean task to root project +} + +subprojects { + repositories { + mavenCentral() + google() + jcenter() + } +} + +// for dependency updates task, only display versions that aren't tagged with alpha or beta +tasks.named("dependencyUpdates").configure { + rejectVersionIf { + "alpha" in candidate.version || "beta" in candidate.version + } +} diff --git a/gradle.properties b/gradle.properties index 23339e0d..ce2a24e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,21 +1,8 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn +# Use AndroidX package structure - https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official +# Set max Gradle JVM memory to 2 Gigabytes +org.gradle.jvmargs=-Xmx2G diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f6b961fd..e708b1c0 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 307fe1d2..2a563242 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Nov 16 12:10:10 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip diff --git a/gradlew b/gradlew index cccdd3d5..4f906e0c 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f9553162..107acd32 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 97732b86..00000000 --- a/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name='FlorisBoard' -include ':app' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..06dca3e9 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +rootProject.name = "FlorisBoard" + +include(":app") + +pluginManagement { + repositories { + gradlePluginPortal() + google() + } + + // allows the plugins syntax to be used with the android gradle plugin + resolutionStrategy.eachPlugin { + if (requested.id.id == "com.android.application") { + useModule("com.android.tools.build:gradle:${requested.version}") + } + } +}