FlorisBoard is a free and open-source keyboard for Android

Overview

App icon

FlorisBoard Crowdin Matrix badge FlorisBoard CI

FlorisBoard is a free and open-source keyboard for Android 6.0+ devices. It aims at being modern, user-friendly and customizable while fully respecting your privacy. Currently in early-beta state.

Stable Latest stable release

Beta Latest beta release

Major versions only, 1 release per 1-3 months

Updates are more polished, new features are matured and tested through to ensure a stable experience.

Beta versions, 1-2 releases per week

Updates contain new features that may not be fully matured yet and bugs are more likely to occur. Allows you to give early feedback.

F-Droid badge

Google Play: Join the FlorisBoard Test Group, then visit the testing page. Once joined and installed, updates will be delivered like for any other app. (Store entry)

Manual: Download and install the APK from the release page.

IzzySoft repo badge

Google Play: Join the FlorisBoard Test Group, then visit the beta testing page. Once joined and installed, updates will be delivered like for any other app. (Store entry)

Manual: Download and install the APK from the release page.

Beginning with v0.4.0 FlorisBoard will follow SemVer versioning scheme and enter the public beta on Google Play.

Highlighted features

  • Spell checking service
  • Word suggestions (currently English only and may not work on all devices)
  • Glide typing (currently English only)
  • Advanced theming support and customization
  • Integrated clipboard manager / history
  • Emoji keyboard (although lacking some features)

Feature roadmap: See ROADMAP.md

Contributing

Wanna contribute to FlorisBoard? That's great to hear! There are lots of different ways to help out. Bug reporting, making pull requests, translating FlorisBoard to make it more accessible, etc. For more information see the contributing guidelines. Thank you for your help!

List of permissions FlorisBoard requests

Please refer to this page to get more information on this topic.

Used libraries, components and icons

License

Copyright 2020 Patrick Goldinger

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Add Japanese JIS layout

    Add Japanese JIS layout

    Implements the Japanese JIS layout and corresponding language features in FlorisBoard. This PR does not implement an IME as it's out-of-scope.

    This PR should be a step towards closing #140.

    opened by Waelwindows 84
  • Next-word-predictions development discussion thread

    Next-word-predictions development discussion thread

    Hi all!

    The time has finally come, I am working on dictionary suggestions! As I want the development of this feature to be as transparent and open as possible, I will share the roadmap for the next 2-3 weeks with you. This issue thread serves as a room for general discussion about the implementation and feedback given in this issue will directly influence the early development of suggestions. The development of word suggestions is rather big, so I split it up in four main phases. After finishing each phase, the already implemented part of the suggestions will be released, so all users on F-Droid and Google Play can try it out. Only if you want to, you can also install the debug artifact builds which get created for each commit in the PR, so you can try out new stuff even faster.

    During development, all preferences regarding this topic will be marked as [EXPERIMENTAL] and all string resources regarding this feature will be non-translatable. I am doing this to prevent circumstances where I change a string like 5 times and so the translators get notified 5 times to translate the same string over and over again, even though often only a small thing has changed. Nearing the end of the last phase, I will unlock these strings for translation.

    For each phase beginning from phase 1, a separate PR will be filed and linked here.

    NOTE: below phases are currently crossed out because the time plan got completely overthrown by the OOM issues as well as the Flictionary implementation not working out as it should. I don't have a concrete plan for suggestions, but I think I will implement spellchecking (and suggesting spell-checked words) first, as this part is a bit easier to add than next-word predictions. The old Flictionary implementation will stay in for now until I've found a replacement.

    Phase 0

    ~This phase has technically already finished. It includes collecting ideas for which sources can be used (a big thanks to everyone who commented on #34!!), providing a way to have standardized dictionary formats in the APK (see https://github.com/florisboard/dictionary-tools) as well as reading and understanding how word suggestions should work. As this phase didn't change a thing in the application itself, no release for this phase is being made.~

    Phase 1 (v0.3.8) (#329)

    ~This is the "real" first phase, in which the input logic code gets an overhaul. This especially changes the EditorInstance logic to be more performant while providing better context to the prediction logic. Also, simple tests are conducted if the created binary dictionaries from the dictionary-tools are actually readable on Android and are built correctly. Then, the logic for providing words for the current input is created. Note, that the predictions in this phase are quite "dumb", as the next-word algorithm is missing.~

    ~Supported languages in this phase:~

    • ~English~

    Phase 2 (v0.3.11)

    ~In this phase, experiments regarding the next-word algorithms are conducted and the decision is made, whether to use a traditional "Algorithm" or a local AI module. Additionally, more languages (currently though general only, no specific region dialects etc.) are supported:~

    • ~English~
    • ~German~
    • ~Spanish~
    • ~Portuguese~
    • ~Italian~
    • ~French~

    Phase 3 (v0.3.12)

    ~- Further improvement of the prediction and next-word algorithm.~

    • ~All languages from https://github.com/LuminosoInsight/wordfreq are supported, still though no region/dialect specific sources.~

    Phase 4 (v0.3.13)

    ~- Final bug-fixing~

    • ~Translations get unlocked on Crowdin for the suggestion-related UI strings.~
    • ~If requested, I can look into adding languages from other sources rather than LuminosoInsight as well in this phase to support region/dialect specific word predictions.~

    ~After Phase 4, Word suggestions for the "main" languages should be up and running. This does of course doesn't mean that word suggestions are finished. I will then continuously add new languages, add support for dialects of languages, improve the prediction algorithm, fix bugs, etc.~

    ~I hope that this roadmap gives you a clear insight on what I'll be working on in the next few weeks. Also note that especially in the first week I will not work on other open bug reports/feature requests (except when a critical security bug arises which has to be fixed asap), so I can fully concentrate on suggestions.~

    If you have any thoughts about this or want to give feedback, feel free to comment below!

    discussion area: word-prediction 
    opened by patrickgold 57
  • Feedback thread for experimental spell checker service

    Feedback thread for experimental spell checker service

    v0.3.13-beta05 adds an experimental spell checker service. This issue thread serves as a collection of feedback for this feature and will be used to improve the spell checker until it releases on the stable channel with v0.3.13. Feel free to comment down below, any feedback from suggestions to bug / crash reports for the spell checker is welcome!

    Wiki entry for help with using the spell checker: https://github.com/florisboard/florisboard/wiki/System-spell-checker-service

    Revision 1: #1069 (beta06) Revision 2: #1082 (beta07) Revision 3: #1082 (beta08) Revision 4: #1172 (beta10)

    Known issues / Suggested improvements [will be extended dynamically]

    • [x] Dictionaries with languages containing Cyrillic characters (Greek, Bulgarian etc) fail to load (especially those from Firefox and Free Office), possibly encoding issue (Fixed in #1069)
    • [x] The APK size is too high, try optimizing (especially ICU data) (Fixed in #1082)
    • [x] Language is fixed per session, interferes with "Use keyboard subtypes" when switching the subtype while a session is active
    • [x] Czech XPI extension from Mozilla does not conform to expected format causing a crash when importing, fix importer script (Fixed in #1069)
    • [x] Bulgarian Mozilla extension license file uses different name, add fix (Fixed in #1069)
    • [x] Auto-capitalization pref is incorrectly labeled as "Spell checker" (Fixed in #1069)
    • [x] FreeOffice link leads to nowhere when used on German devices (make link statically linked to en) (Fixed in #1069)
    • [ ] Best correction match should show in Smartbar (inline spellchecking)

    ...

    discussion area: spellchecking 
    opened by patrickgold 51
  • Improve Keyboard-Loading-Screen

    Improve Keyboard-Loading-Screen

    Environment information

    • FlorisBoard Version: v0.3.2
    • Install Source: F-Droid
    • Device:Samsung Galaxy S9
    • Android version: 10

    Steps to reproduce

    1. Unclear
    2. Click on something that opens up the keyboard (For example the browser search-bar)
    3. See the selection-keyboard flash for a split second. Then the proper keyboard opens

    I thought I had seen this issue already somewhere, but I couldn't find it, which is why i decided to create a new one.

    Also, by "Selection keyboard", I meant this: Screenshot_20210118-211429_GitHub.jpg

    proposal proposal-accepted 
    opened by Glitchy-Tozier 49
  • Possible memory leak in keyboard view

    Possible memory leak in keyboard view

    Version: 0.3.5 Source: Playstore Android 10 Samsung Galaxy s9

    ~~~ 1611851663324.stacktrace ~~~
    
    java.lang.OutOfMemoryError: Failed to allocate a 24 byte allocation with 2226872 free bytes and 2174KB until OOM, target footprint 268435456, growth limit 268435456; failed due to fragmentation (largest possible contiguous allocation 46399488 bytes)
    	at java.lang.StringFactory.newStringFromChars(StringFactory.java:260)
    	at java.lang.StringBuilder.toString(StringBuilder.java:413)
    	at dev.patrickgold.florisboard.ime.media.emoji.EmojiKeyData.getCodePointsAsString(EmojiKeyData.kt:40)
    	at dev.patrickgold.florisboard.ime.media.emoji.EmojiLayoutDataKt.parseRawEmojiSpecsFile(EmojiLayoutData.kt:139)
    	at dev.patrickgold.florisboard.ime.media.emoji.EmojiKeyboardView$1.invokeSuspend(EmojiKeyboardView.kt:68)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    bug bug-confirmed 
    opened by Glitchy-Tozier 36
  • Prefs inaccessible, stuck in point 1 of the Welcome page

    Prefs inaccessible, stuck in point 1 of the Welcome page

    Although FB beta is installed and activated/enabled (I'm currently writing with FB beta), I can not do anything to enter its settings. I've already disabled all other keyboards, but nada. This was introduced in beta 02 or 03, I just didn't find the time to report it any earlier.

    FB beta 05 (from F-Droid) Android 6.0.1 (with GMS upd. to 21.18.16, cn=M sdk=23) Webview 94.0.4606.71 Motorola Moto G4 device not rooted

    bug area: setup-wizard needs investigation 
    opened by uli-on 34
  • Rendering issues regarding the new TextKeyboardView

    Rendering issues regarding the new TextKeyboardView

    Im not sure what happened but my theme got changed when I installed the newest beta today. The foreground colour of all the button by default is lighter now. I went through the theme settings comparing them to the official release and everything is the same. I also deleted my theme and imported it again. Its still happening.

    Here is how it looks now:

    https://picc.io/p/hdYEHeJ.jpg

    And how it should be:

    https://picc.io/p/iEKQfPW.jpg

    bug area: kbd-ui needs more info 
    opened by Kreuger 34
  • Adding composing suggestions to FlorisBoard

    Adding composing suggestions to FlorisBoard

    Hi all,

    thanks for checking out this project, I hope you like it! I am @patrickgold, this projects lead developer and maintainer and looking for your help. While I currently work on other features atm (gestures, polishing of existing features, etc.), I am also planning the implementation of composing suggestions, a much wanted feature, which I aim to release with v0.4.0 (current project's version is v0.2.2).

    The implementation of composing suggestions is a rather huge task which requires a lot of coding but also a lot of datasets like word lists, preferably with frequency measures to better suggest words, maybe also word pair lists, ... I've searched the net quite a while now and haven't really found the datasets I am looking for.

    How can you help? I am looking for word lists in different languages (German, English, French, etc.) which fulfill the following requirements:

    • The dataset is open-source and free to use
    • Its license is compatible with this project's (Apache 2.0) and its license allows the dataset to be included within the FlorisBoard APK
    • The format of the dataset can be any (xml, json, txt, csv, whatever), but must be machine readable
    • (Optional) The word list has some metric which indicates how often the word appears (frequency) or other useful attributes for each word
    • I will of course give full attribution to the source and link to it in both the README.md of this project and in the app's about screen

    If you know an open-source word list, it would be incredible if you could post a link to it as a comment below. I will let this issue stay open for a few weeks, so I can hopefully gather enough suggestions to find a usable word list.

    Thank you for your help in making FlorisBoard better and stay safe!

    Patrick

    EDIT: These suggestions have already been gathered:

    • AnySoftKeyboard wordlists
    • OpenBoard wordlists
    • https://github.com/berzerk0/Probable-Wordlists
    • https://github.com/hermitdave/FrequencyWords
    help wanted discussion 
    opened by patrickgold 33
  • Basic Telex for Vietnamese

    Basic Telex for Vietnamese

    I am not a Vietnamese language user so this pull request is a draft and I would like Vietnamese language users to test the debug artifact (once generated) and report if it seems usable.

    This pull request adds vi-VN as default subtype, with qwerty as a layout and specific popups (ăâ on a, ôơ on o, etc), Vietnamese đồng as currency, and a Basic Telex composer.

    So if you want to type phượng.

    • "ph" is just "ph".
    • ư can be typed either with just w, or with a popup on u, or with Telex syntax with uw, or even just with w.
    • ợ needs two steps. First you need ơ which can be typed as a popup on o or with Telex syntax with ow. Then you add j.
    • "ng" is just "ng".

    Beware, the composer is called Basic Telex and not just Telex for a reason. There is no free order. you can not type ongwj and expect ợng. You need owjng, w first, j next, both right after the o (or ơjng using a popup, and j right after the ơ).

    Video example. https://user-images.githubusercontent.com/7904776/120271316-64b96580-c2ab-11eb-81ed-68f160589ea9.mp4

    Feedback needed on:

    • popup order
    • relevant currencies
    • usability of basic Telex
    opened by Hayleia 31
  • Flashing Keyboard

    Flashing Keyboard

    Short description

    When using custom themes, I have noticed the keyboard will be flashing in and out. By flashing here, I am referring to that it fades in and out between the keyboard's normal theme and near completely transparent. This has happened with multiple custom themes I have used. It does occur every time, but it does happen often. If this is a duplicate, I did not notice.

    Steps to reproduce

    1.) Create and set custom theme 2.) Bring up keyboard

    Environment information

    • FlorisBoard Version: 0.3.10-BETA06
    • Install Source: F-Droid
    • Device: Samsung Galaxy S20 FE
    • Android version, ROM: Android 11
    bug not reproducible 
    opened by MathSteve22 30
  • Improve Settings: Welcome Screens

    Improve Settings: Welcome Screens

    I think the welcome-screens should be improved. Here's a few thoughts, formulated in a very curt way:


    • I don't see any need to add a link to a page that just tells you again, that you won't get tracked.
    • In general, use way way less text. Maybe also make the important parts bold. Screenshot_20210605-064813_FlorisBoard Beta.jpg

    Shouldn't be required. Please don't disable "weiter" (or whatever the english word is) Screenshot_20210605-064840_FlorisBoard Beta.jpg


    Seems like a very unneccessary screen to me. If you want the user to be notified about "you're done", use a temporary popup. Screenshot_20210605-064855_FlorisBoard Beta.jpg

    area: setup-wizard proposal proposal-accepted 
    opened by Glitchy-Tozier 29
  • Bug

    Bug

    Environment information

    • FlorisBoard 0.3.16 (86)
    • Device: Razer Phone 2 (aosp_ysl)
    • Android: 12 (cn=S_V2 sdk=32)

    Attached logs and stacktrace files

    Detailed info (Debug log header)
    ======= SYSTEM INFO =======
    Time                : 2022-12-25T04:46:25.674Z
    Manufacturer        : Razer
    Model               : Phone 2
    Product             : aosp_ysl
    Android             : 12 (cn=S_V2 sdk=32) [SQ3A.220705.004]
    ABIs                : [arm64-v8a, armeabi-v7a, armeabi]
    Memory              : 2.17 GiB (62.41% used, 3.48 GiB max)
    Font scale          : 1.0
    Locales             : en-US
    
    ======= APP INFO =======
    Package             : dev.patrickgold.florisboard
    Name                : FlorisBoard
    Version             : 0.3.16 (86)
    Build type          : release
    Build commit hash   : null
    Java heap memory    : 4.39 MiB (1.72% used, 256.00 MiB max)
    Native heap memory  : 21.34 MiB (95.71% used, 22.30 MiB max)
    
    ======= FEATURE CONFIG =======
    Smartbar enabled            : true
    Suggestions enabled         : true
    Inline autofill enabled     : true
    Glide enabled               : false
    Internal clipboard enabled  : true
    
    
    1671943580123.stacktrace
    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CREATE_DOCUMENT typ=*/* (has extras) }
    	at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2121)
    	at android.app.Instrumentation.execStartActivity(Instrumentation.java:1766)
    	at android.app.Activity.startActivityForResult(Activity.java:5410)
    	at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:2)
    	at androidx.activity.result.ActivityResultRegistry$3.launch(ActivityResultRegistry.java:31)
    	at androidx.activity.compose.ActivityResultLauncherHolder.launch(Unknown Source:6)
    	at androidx.activity.compose.ManagedActivityResultLauncher.launch(Unknown Source:2)
    	at dev.patrickgold.florisboard.app.ext.ExtensionExportScreenKt$ExportScreen$1$1.invoke(ExtensionExportScreen.kt:7)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:17)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:8)
    	at dev.patrickgold.jetpref.datastore.ui.PreferenceUiKt.PreferenceLayout(PreferenceUi.kt:47)
    	at dev.patrickgold.florisboard.lib.compose.FlorisScreenScopeImpl$Render$3.invoke(FlorisScreen.kt:18)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:17)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:8)
    	at androidx.compose.material.ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1.invoke(Scaffold.kt:5)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:6)
    	at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:2)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:6)
    	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:8)
    	at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:8)
    	at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:21)
    	at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:10)
    	at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:6)
    	at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:3)
    	at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:3)
    	at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:13)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:4)
    	at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:15)
    	at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:21)
    	at androidx.compose.material.ScaffoldKt$ScaffoldLayout$1$1$1.invoke(Scaffold.kt:103)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1$measure$1.placeChildren(SubcomposeLayout.kt:3)
    	at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:16)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.LayoutNode.layoutChildren$ui_release(LayoutNode.kt:16)
    	at androidx.compose.ui.node.InnerPlaceable.placeAt-f8xVGno(InnerPlaceable.kt:26)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable$placeAt$1.invoke(OuterMeasurablePlaceable.kt:4)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable.placeAt-f8xVGno(OuterMeasurablePlaceable.kt:17)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.foundation.layout.BoxKt.access$placeInBox(Box.kt:8)
    	at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1$measure$2.invoke(Box.kt:3)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:16)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.LayoutNode.layoutChildren$ui_release(LayoutNode.kt:16)
    	at androidx.compose.ui.node.InnerPlaceable.placeAt-f8xVGno(InnerPlaceable.kt:26)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper$measure$1$1.placeChildren(DelegatingLayoutNodeWrapper.kt:4)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.placeAt-f8xVGno(DelegatingLayoutNodeWrapper.kt:11)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper$measure$1$1.placeChildren(DelegatingLayoutNodeWrapper.kt:4)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.placeAt-f8xVGno(DelegatingLayoutNodeWrapper.kt:11)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.placeWithLayer$default(Placeable.kt:7)
    	at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier$measure$1.invoke(GraphicsLayerModifier.kt:5)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.placeAt-f8xVGno(DelegatingLayoutNodeWrapper.kt:11)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable$placeAt$1.invoke(OuterMeasurablePlaceable.kt:4)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable.placeAt-f8xVGno(OuterMeasurablePlaceable.kt:17)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.foundation.layout.BoxKt.access$placeInBox(Box.kt:8)
    	at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1$measure$2.invoke(Box.kt:3)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:16)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.LayoutNode.layoutChildren$ui_release(LayoutNode.kt:16)
    	at androidx.compose.ui.node.InnerPlaceable.placeAt-f8xVGno(InnerPlaceable.kt:26)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.placeWithLayer$default(Placeable.kt:7)
    	at androidx.compose.ui.graphics.BlockGraphicsLayerModifier$measure$1.invoke(GraphicsLayerModifier.kt:5)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.placeAt-f8xVGno(DelegatingLayoutNodeWrapper.kt:11)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable$placeAt$1.invoke(OuterMeasurablePlaceable.kt:4)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable.placeAt-f8xVGno(OuterMeasurablePlaceable.kt:17)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.foundation.layout.BoxKt.access$placeInBox(Box.kt:8)
    	at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1$measure$5.invoke(Box.kt:7)
    	at androidx.compose.ui.layout.MeasureScope$layout$1.placeChildren(MeasureScope.kt:9)
    	at androidx.compose.ui.node.LayoutNode$layoutChildren$1.invoke(LayoutNode.kt:16)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:52)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.LayoutNode.layoutChildren$ui_release(LayoutNode.kt:16)
    	at androidx.compose.ui.node.InnerPlaceable.placeAt-f8xVGno(InnerPlaceable.kt:26)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50$default(Unknown Source:1)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper$measure$1$1.placeChildren(DelegatingLayoutNodeWrapper.kt:4)
    	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.placeAt-f8xVGno(DelegatingLayoutNodeWrapper.kt:11)
    	at androidx.compose.ui.layout.Placeable$PlacementScope.place-70tqf50(Placeable.kt:3)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable$placeAt$1.invoke(OuterMeasurablePlaceable.kt:4)
    	at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:11)
    	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:50)
    	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(Unknown Source:17)
    	at androidx.compose.ui.node.OuterMeasurablePlaceable.placeAt-f8xVGno(OuterMeasurablePlaceable.kt:17)
    	at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:36)
    	at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:13)
    	at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:2)
    	at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:3)
    	at android.view.View.draw(View.java:22707)
    	at android.view.View.updateDisplayListIfDirty(View.java:21579)
    	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
    	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
    	at android.view.View.updateDisplayListIfDirty(View.java:21535)
    	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
    	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
    	at android.view.View.updateDisplayListIfDirty(View.java:21535)
    	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
    	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
    	at android.view.View.updateDisplayListIfDirty(View.java:21535)
    	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
    	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
    	at android.view.View.updateDisplayListIfDirty(View.java:21535)
    	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
    	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
    	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
    	at android.view.ViewRootImpl.draw(ViewRootImpl.java:4531)
    	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4251)
    	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374)
    	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
    	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8798)
    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
    	at android.view.Choreographer.doCallbacks(Choreographer.java:845)
    	at android.view.Choreographer.doFrame(Choreographer.java:780)
    	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
    	at android.os.Handler.handleCallback(Handler.java:938)
    	at android.os.Handler.dispatchMessage(Handler.java:99)
    	at android.os.Looper.loopOnce(Looper.java:201)
    	at android.os.Looper.loop(Looper.java:288)
    	at android.app.ActivityThread.main(ActivityThread.java:7876)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
    
    
    bug 
    opened by ghost 2
  • Duplicate, mirrored text after the cursor in app Whatsapp Web To Go (webview)

    Duplicate, mirrored text after the cursor in app Whatsapp Web To Go (webview)

    Short description

    Typing in "Hello World!" in any message field in the app will result in getting the text "Hello World!!dlro ollH", with the cursor after the middle of the first exclamation mark.

    Does not happen with GBoard, which is why I'm posting here and not on their tracker. Though it does not happen in all of the message fields (regular text and with attachment) - it does not happen on the search bar. I for the life of me can not even figure out which app might be causing this weird behaviour.

    Steps to reproduce

    1. Select a message field or search bar
    2. Type anything
    3. Extra characters appear by themselves after the cursor

    Environment information

    • FlorisBoard Version: 0.3.16
    • Install Source: F-Droid
    • Device: ASUS Zenfone 5Z
    • Android: 10, Stock
    bug 
    opened by PizzaFlavoured 0
  • Smartbar vibrations

    Smartbar vibrations

    Short description

    Smartbar actions used to vibrate on press but no longer do from an alpha version to another.

    Steps to reproduce

    1. Install older alpha version
    2. Notice smartbar haptic feedback working
    3. Install newer alpha version
    4. Notice smartbar haptic feedback no longer workinh

    Environment information

    • FlorisBoard Version: 0.4.0-alpha04 (90)
    • Install Source: F-Droid
    • Device: Xiaomi Mi 8
    • Android: 12 (crDroid 8)

    Thanks

    opened by KaKi87 0
  • Support user dictionary in suggestions

    Support user dictionary in suggestions

    This PR adds custom-defined dictionary into the suggestions for both Latin and HanShapeBased providers, and the fallback one.

    This is again based on #2054 and includes changes from #2093. The plan is that if and when those PRs get merged, this can be rebased and reviewed. For now, only the last commit is specific to this PR.

    opened by moonbeamcelery 1
  • crash after force quit after modemcrash ?

    crash after force quit after modemcrash ?

    Short description

    Describe what you were doing that could've led to the crash.

    Steps to reproduce

    1. My phone's modem crashed
    2. Phone entered qualcomm crashdump mode
    3. Forced reboot
    4. Preferences were not applied
    5. Force stopped floris
    6. Floris crashed after i reopened it

    Environment information

    • FlorisBoard 0.4.0-alpha04 (90)
    • Device: OnePlus HD1905 (OnePlus7T)
    • Android: 12 (cn=S_V2 sdk=32)

    Attached logs and stacktrace files

    Detailed info (Debug log header)
    ======= SYSTEM INFO =======
    Time                : 2022-12-10T19:37:16.038Z
    Manufacturer        : OnePlus
    Model               : HD1905
    Product             : OnePlus7T
    Android             : 12 (cn=S_V2 sdk=32) [SQ3A.220705.004]
    ABIs                : [arm64-v8a, armeabi-v7a, armeabi]
    Memory              : 4.32 GiB (59.29% used, 7.29 GiB max)
    Font scale          : 1.0
    Locales             : en-US
    
    ======= APP INFO =======
    Package             : dev.patrickgold.florisboard.beta
    Name                : FlorisBoard Beta
    Version             : 0.4.0-alpha04 (90)
    Build type          : beta
    Build commit hash   : 31a01c8d39ba425e4e1e424e9671ffbb96c24fc0
    Java heap memory    : 4.08 MiB (1.59% used, 256.00 MiB max)
    Native heap memory  : 17.03 MiB (61.52% used, 27.68 MiB max)
    
    ======= FEATURE CONFIG =======
    Smartbar enabled            : true
    Suggestions enabled         : false
    Inline autofill enabled     : true
    Glide enabled               : false
    Internal clipboard enabled  : false
    
    
    1670701033095.stacktrace
    java.util.NoSuchElementException: List contains no element matching the predicate.
    	at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:24)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:17)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:8)
    	at androidx.compose.animation.CrossfadeKt$Crossfade$4$1.invoke(Crossfade.kt:54)
    	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:6)
    	at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:85)
    	at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:6)
    	at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:281)
    	at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(NavHost.kt:1)
    	at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:43)
    	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:20)
    	at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:8)
    	at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:22)
    	at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:4)
    	at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:7)
    	at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:9)
    	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:63)
    	at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(Unknown Source:8)
    	at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:15)
    	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1035)
    	at android.view.Choreographer.doCallbacks(Choreographer.java:845)
    	at android.view.Choreographer.doFrame(Choreographer.java:775)
    	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
    	at android.os.Handler.handleCallback(Handler.java:938)
    	at android.os.Handler.dispatchMessage(Handler.java:99)
    	at android.os.Looper.loopOnce(Looper.java:201)
    	at android.os.Looper.loop(Looper.java:288)
    	at android.app.ActivityThread.main(ActivityThread.java:7870)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1019)
    	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@15f4bba, androidx.compose.ui.platform.MotionDurationScaleImpl@a821a6b, StandaloneCoroutine{Cancelling}@73409c8, AndroidUiDispatcher@4d34a61]
    
    

    Maybe the settings got corrupted

    bug 
    opened by theotheroracle 0
Releases(v0.4.0-alpha04)
  • v0.4.0-alpha04(Sep 1, 2022)

    Smartbar fixes and changes (#2030)

    • Change extended actions toggle so it closes actions overflow (#2035)
    • Implement sticky action is overflow button if set to none (#2033)
    • Fix moving all Smartbar actions to hidden causing crash (#2026)
    • Fix clipboard suggestions showing when they shouldn't (#2029)

    Other fixes

    • Rework KeyboardState and its observing logic (#2025)
      • Should prevent the NullPointerException crashes introduced with v0.4.0-alpha03. If not, please report this in #2025.
    • Fix bottom sheet host UI causing issues in landscape input UI (#1760)
    • Remove "auto0" placeholder logic as it is annoying (#1976)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.4.0-alpha03...v0.4.0-alpha04

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.4.0-alpha04.apk(11.28 MB)
    florisboard-0.4.0-alpha04.sha256.txt(96 bytes)
  • v0.4.0-alpha03(Aug 28, 2022)

    Major Smartbar rework (#2012)

    • Smartbar layout changes
      • The Smartbar now has 4 different layouts to choose from: Suggestions only, Actions only, Suggestions+Actions shared (comparable to Gboard) and Suggestions+Actions extended (comparable to SwiftKey)
      • Each Smartbar layout has different layout-specific options
    • Changes to quick actions
      • Implement Smartbar actions overflow panel
      • Implement Smartbar actions editor panel, which allows to customize the order of the actions (#1612)
      • Remove Clipboard/Cursor row and add each of its buttons as a separate quick action
    • Other Smartbar improvements
      • Add tooltips on long-press for Smartbar actions (#1094)
      • Fix auto action expansion interfering with arrow keys (#1674)
      • Fix quick action icon size too small for landscape (#1781)
    • Changes to Smartbar theming
      • Default theme users: Nothing needs to be done, all changes apply automatically.
      • Custom theme users: Changes do NOT apply automatically! As such the Smartbar theming may look messed up, some surfaces may be transparent, etc. Please use the new default themes for reference on what can be themed, so it looks good for your theme again! Sorry for the inconvenience.

    Incognito-mode (#2012)

    • Add incognito mode
      • Enables/disables itself either if the target app requests it or if one specific state is forced via Settings > Advanced > Incognito mode (#617)
      • If enabled this mode prevents new words to be learnt and stored in the personal dictionary (technically has no effect in this alpha release as there is no suggestions algorithm and no learning logic implemented, but relevant for upcoming releases)
    • Add Smartbar quick action for incognito mode (#153)
      • Effectively shows the state of incognio mode and allows you to toggle the mode, only available though if not already forced via Settings > Advanced > Incognito mode
    • Add incognito mode indicator
      • Shows inbetween the keyboard background and the key surfaces, by default in a subtle grey shade
      • Can be themed by changing the foreground of the incognito-mode-indicator rule to some other color in the stylesheet editor

    Other changes

    • Privacy policy has been moved and rewritten. For you as a user nothing has changed, FlorisBoard is still as private as before. Please see the official announcement why this had to be done. You can read the new privacy policy here, alternatively you can find the link in the Settings' about screen or in the Setup screen.
    • Adjust and fix keyboard height calculation (#1561)
    • Improve sounds and vibration screen (#2003)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.4.0-alpha02...v0.4.0-alpha03

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.4.0-alpha03.apk(11.27 MB)
    florisboard-0.4.0-alpha03.sha256.txt(96 bytes)
  • v0.4.0-alpha02(Aug 3, 2022)

    Auto-spacing bug fixes

    • Fix auto-spacing incorrectly triggered (#1947)
    • Fix phantom spacing for 1 letter words (#1940)
    • Please give feedback about this new feature if you want in #1935 (feedback, bugs, ideas)

    Clipboard changes

    • Add clipboard phone number detection (#1889, #1971)
    • Fix domains get extracted from emails in clipboard (#1971)
    • Fix extracted URLs not checking for duplicates (#1971)
    • Improve host regex accuracy for clipboard URL extraction (#1971)
    • Partly disable smart clipboard on Android 7.0 and 7.1 due to crashes and incompatible API calls (#1970)

    Keyboard and layout changes

    • Add numeric row manual shifting symbols (#1988)
    • Adjust AutoTextKey behavior to respect subtype locale (#1840)
    • Add circumflex popups to Turkish layout (#1962, thanks @tsiflimagas)
    • Add implementation for notifySuggestionReverted event
    • Fix accent ordering of z in Polish popup mapping (#1960)
    • Fix composer not allowing multiple code points (#1984)
    • Fix uppercase Greek vowels popups (#1981, thanks @tsiflimagas)

    Settings UI changes

    • Upgrade Jetpack Compose to 1.2, which should resolve numerous issues with the Settings UI
    • Disable unnecessary app icon sync in Settings UI for Android 10+
    • Rework and improve splash screen of Settings UI

    Other changes

    • Decouple Jetpack Compose Compiler version from other Compose packages
    • Upgrade Kotlin to 1.7.10 and Compose Compiler to 1.3.0-rc01
    • Remove deprecated Accompanist Insets library
    • Enum values are now properly stored without overriding the original capitalization in the pref datastore

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.4.0-alpha01...v0.4.0-alpha02

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.4.0-alpha02.apk(11.04 MB)
    florisboard-0.4.0-alpha02.sha256.txt(96 bytes)
  • v0.4.0-alpha01(Jul 6, 2022)

    Auto-spacing and auto-capitalization changes

    • Add auto-spacing after punctuation (#375)
      • Disabled by default as this is experimental, go to Settings > Typing and enable "Auto-space after punctuation" to try it out
      • Please give feedback about this new feature if you want in #1935 (feedback, bugs, ideas)
      • Auto-spacing intentionally does NOT work in URL, EMAIL and PASSWORD text fields to prevent several input issues
      • Previous auto-space is automatically overridden if multiple symbols are inserted in a row to prevent issues such as "Word. . . "
      • May break for exotic characters (aka everything not representable with one char in UTF-16)
      • There's no hardcoded language restriction, however it is tailored towards symbols used mostly in Latin-based languages atm
    • Disable auto-capitalization for Thai language (#1908)
    • Fix auto-capitalization issues with invalid initial state (#1915)

    Preparation-work for word suggestions (phase1)

    • Tie composing region indicator to suggestion enabled state (#1911)
      • The current word will now only be underlined in the text color if word suggestions is enabled
    • Improve state reset mechanism for restarts (#1916)
    • Fix candidate completion logic not behaving as expected
    • Fix clicking a clipboard suggestion not causing the suggestion to go away
    • Complete internal rework of NLP manager and its API
      • Add SuggestionProvider, SpellingProvider, SuggestionCandidate
      • Add secondary text UI implementation for candidates
      • Extend Subtype internally to allow for provider ID definition
      • Properly document all NLP APIs
    • Rework clipboard suggestions logic and allow for multiple items (#739)

    Spell-checker changes

    • Remove Nuspell spell check implementation for now (#1921)
      • This means that temporarily no spell checking is working, see linked issues for details
      • Spell-checking will be integrated into the upcoming suggestions- and auto-correction logic, thus spell checking will evolve together with the progress of word suggestions
      • Maybe Nuspell for spell-checking will be re-implemented again as an optional alternative for the user to select from, however this is not decided yet

    Other changes

    • Add Costa Rican colón currency set (#1914)
    • Correct layout name for RU&UA (ЙЦУКЕН) (#1681, thanks @VladWinner)
    • Refactor and improve C++ codebase (#1895, thanks @sevz17)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.16...v0.4.0-alpha01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.4.0-alpha01.apk(10.89 MB)
    florisboard-0.4.0-alpha01.sha256.txt(96 bytes)
  • v0.3.16(Jun 12, 2022)

    New app icons (#1775)

    FlorisBoard now has new app icons for each track, designed and provided for use in this project by BloodRaven0, thanks a lot! <3

    Stable | Beta | Debug ---|---|--- image | image | image

    Input logic and editor caching behavioral changes (#1822)

    • Major rework of the internal editor instance and caching logic
      • Editor content state is now cached in a "window" around the cursor, which allows to make predictive cache changes and avoid unnecessary input connection calls (#1822)
      • Improve input performance by utilizing the new cached window system
      • Improve the communication between FlorisBoard and the target input connection
    • Adjust timing for double tap / key repeat events (#1095)

    Minimum required Android version change

    The minimum required Android version has been changed from Android 6 (API level 23) to Android 7 (API level 24). This change was hard to decide but it allows to fully use the ICU platform package Android provides since API 24. See #1822 for the detailed reasoning for this change. I am aware that this step may affect some users (especially old tablets), but FlorisBoard is a fast moving modern Android keyboard with limited developing resources, so I decided in favor of increasing the minimum required Android version.

    Enhancements and fixes for space, enter and delete keys

    • Add delete key long press option in gesture prefs (#637)
      • The long press action for the delete key can now be changed between "Delete last character" and "Delete last word". If the latter is used and you hold down the delete key, entire words instead of characters will be deleted until you release the delete key again.
    • Add "Always delete word" toggle for glide typing (#1541, #1036)
      • By default tapping delete after a glided word will now delete the whole glided word, except if you disable the newly added toggle.
    • Fix delete key precise selection gesture bugs
    • Fix double-space period placing period incorrectly (#524)
    • Pressing delete will not reset the keyboard anymore inside the Settings preview field (#1617)
    • Fix enter key behavior for multiline and shift (#1037)
      • FlorisBoard now supports if messaging apps' "Enter key sends message" option, as long as the target messaging app field is configured correctly. Tested and verified in WhatsApp and Signal.
    • Fix space bar tapping rapidly causing characters to be deleted (#1792)

    Shift-key/Capitalization-specific changes

    • Rework shift state management
      • Shifting now differentiates between "Unshifted", "Shifted (Manual)", "Shifted (Automatic)" and "Caps lock"
      • Fix Dvorak layout symbols which misinterpreted shift states previously (#528)
    • Add ability to hold shift without caps lock (#1764)
      • This allows you to use the shift key as known on a PC keyboard. If you long press shift and start typing within the first second (exact time depends on your long press timeout in prefs), caps lock will not get activated. However if you only long press shift without character input, caps lock will be activated, like previously also possible in 0.3.15 and earlier.
    • Fix shift key state concurrency issue in touch logic (#227)
    • Fix shift long press resetting after releasing (#1834)
    • Fix auto-capitalization and re-evaluate on new subtype (#1623)

    Keyboard logic and UI changes / fixes

    • Added a button for switching to an IME that supports voice (#1587, thanks @ElishaAz)
      • This voice button currently requires that a proper voice IME is installed and does not work with voice overlays!
    • Fix shift+space swipe not selecting text (#1843)
    • Fix auto-capitalization not behaving correctly (#1861)
    • Fix extensions not properly reloading when context switches
    • Fix Snygg Shape crashing for corner radii >= 34dp (#1838)

    Keyboard layout changes

    • Add additional Persian layout (#1823, thanks @M
    • Add Dvorak (ÑÇ) layout (#1853, thanks @tsiflimagas)ahantor)
    • Add Indonesian layout (#1879, thanks @Linerly)
    • Update Hungarian popup mapping (#1859, thanks @ptrg)
    • Vietnamese Telex: Add mising case (#1862, thanks @thanhhocse96)
    • Vastly improve Telex for Vietnamese (#1797, thanks @thanhhocse96)
      • Please see #1751 and #1797 for details regarding this change
    • Update Kurdish layout and overall improvements (#1798, thanks @GoRaN909)

    Performance and APK size improvements (#1870, #1894)

    • Add baseline profile
      • This baseline profile should be a slight improvement in the initial app startup time
    • Add Proguard optimization to beta and stable builds
      • Production builds now properly remove unused code and resources, thus decreasing the APK size by about 3MB (~18MB to ~15MB)
      • Depending on your device this can also lead to a performance improvement in both app startup time and runtime usage
    • Minor improvements to the runtime performance, especially regarding events triggered by user input:
      • Improve input feedback controller performance (especially for vibrations)
      • Improve language display name performance by caching it
      • Prevent unnecessary stack trace collection in KeyboardState
      • Improve auto capitalization performance

    Glide typing improvements and bug fixes (#1844)

    • Add punctuation rules logic for auto-spacing (#596, #1828)
      • This change vastly improves the auto-space functionality for Latin-based languages by providing punctuation rules for evaluation of symbols preceding/following spaces.
      • Add ability to define additional punctuation rules in keyboard
    • Fix glide typing not working for long words (#1851)
      • This change addresses the long known issue of glide having difficulties with long words. For phone screens this issue is now fixed, however for tablets or very large phone screens this issue may still occur. A fix for these kind of large screen requires a major overhaul of the glide logic in the future.
    • Auto-disable glide typing for password fields
    • Fix active key not appearing pressed for moving gestures (#1846)
    • Fix glide typing broken in some input fields (#1009, #1247)
    • Fix phantom space not resetting in selection update, causing the glide word deletion mode to not reset (#916)
    • Fix glide threshold using incorrect units, causing short words to be impossible to input using glide (#1023)

    Emoji improvements / bug fixes (#1855)

    • Rework internal EmojiCompat implementation and decrease emoji load time UI jank (#1770)
    • Re-add vibration to emoji screen (#1675)
    • Fix symbols emoji category icon not representative (#1421)
    • Fix incorrect aspect ratio for emoji keys (#1856)

    Settings changes

    • Possibly fix prefs sometimes reset on startup (#1726, #1868)
      • Note that this bug occurs only on some devices and you probably haven't experienced this bug beforehand, so this fix does not apply to you
      • Should you be the unlucky user to experience this bug after this release again, please provide more details in #1726, so I can try to find the reason why this bug rarely occurs. Thanks!
    • Add debug log view/export screen
    • Add exact stacktrace error log for backup failure (#1847)
    • Add translations for emoji key and landscape input Syngg elements
    • Change OSS notices to mikepenz/AboutLibraries plugin
    • Improve CrashDialogActivity crash log generation and add details

    Other changes

    • Add clipboard URL and Email detection (#1889)
    • Fix Smartbar placeholder suggestion UI not updating correctly
    • Improve devtools input state overlay
    • Refactor AndroidX.Room to use KSP + export schema correctly
    • Rework internal project structure, code base and some package names (#1780)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.15...v0.3.16

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-release.apk(14.43 MB)
    florisboard-0.3.16-release.sha256.txt(97 bytes)
  • v0.3.16-rc01(Jun 7, 2022)

    Release candidate 1

    This is the first release candidate for 0.3.16, and probably also the last before a stable 0.3.16 release, except some major issue is reported. After the 0.3.16 release the long-awaited 0.4.0 development cycle with focus on word suggestions will begin, more info on that will be provided after the 0.3.16 stable release.

    Runtime performance improvements (#1894)

    • Minor improvements to the runtime performance, especially regarding events triggered by user input:
      • Improve input feedback controller performance (especially for vibrations)
      • Improve language display name performance by caching it
      • Prevent unnecessary stack trace collection in KeyboardState
      • Improve auto capitalization performance

    Other changes

    • Add clipboard URL and Email detection (#1889)
    • Add Dvorak (ÑÇ) layout (#1853, thanks @tsiflimagas)
    • Fix auto-capitalization logic (was not triggered for mass selection and some other events)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.16-beta04...v0.3.16-rc01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-rc01.apk(14.43 MB)
    florisboard-0.3.16-rc01.sha256.txt(94 bytes)
  • v0.3.16-beta04(May 29, 2022)

    Performance and APK size improvements

    • Add baseline profile
      • This baseline profile should be a slight improvement in the initial app startup time
    • Add Proguard optimization to beta and stable builds
      • Production builds now properly remove unused code and resources, thus decreasing the APK size by about 3MB (~18MB to ~15MB)
      • Depending on your device this can also lead to a performance improvement in both app startup time and runtime usage

    Keyboard logic and UI changes / fixes

    • Added a button for switching to an IME that supports voice (#1587, thanks @ElishaAz)
      • This voice button currently requires that a proper voice IME is installed and does not work with voice overlays!
    • Fix shift+space swipe not selecting text (#1843)
    • Fix auto-capitalization not behaving correctly (#1861)
    • Fix extensions not properly reloading when context switches
    • Fix Snygg Shape crashing for corner radii >= 34dp (#1838)

    Settings changes

    • Possibly fix prefs sometimes reset on startup (#1726, #1868)
      • Note that this bug occurs only on some devices and you probably haven't experienced this bug beforehand, so this fix does not apply to you
      • Should you be the unlucky user to experience this bug after this beta release, please provide more details in #1726, so I can try to find the reason why this bug rarely occurs. Thanks!
    • Add debug log view/export screen
    • Add exact stacktrace error log for backup failure (#1847)
    • Add translations for emoji key and landscape input Syngg elements
    • Change OSS notices to mikepenz/AboutLibraries plugin
    • Improve CrashDialogActivity crash log generation and add details

    Keyboard layout changes

    • Add Indonesian layout (#1879, thanks @Linerly)
    • Update Hungarian popup mapping (#1859, thanks @ptrg)
    • Vietnamese Telex: Add mising case (#1862, thanks @thanhhocse96)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a bug which is very difficult to address and no solution has been found yet.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.16-beta03...v0.3.16-beta04

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-beta04.apk(14.42 MB)
    florisboard-0.3.16-beta04.sha256.txt(96 bytes)
  • v0.3.16-beta03(May 17, 2022)

    Glide typing improvements and bug fixes (#1844)

    • Add punctuation rules logic for auto-spacing (#596, #1828)
      • This change vastly improves the auto-space functionality for Latin-based languages by providing punctuation rules for evaluation of symbols preceding/following spaces.
      • Add ability to define additional punctuation rules in keyboard
    • Fix glide typing not working for long words (#1851)
      • This change addresses the long known issue of glide having difficulties with long words. For phone screens this issue is now fixed, however for tablets or very large phone screens this issue may still occur. A fix for these kind of large screen requires a major overhaul of the glide logic in the future.
    • Auto-disable glide typing for password fields
    • Fix active key not appearing pressed for moving gestures (#1846)
    • Fix glide typing broken in some input fields (#1009, #1247)
    • Fix phantom space not resetting in selection update, causing the glide word deletion mode to not reset (#916)
    • Fix glide threshold using incorrect units, causing short words to be impossible to input using glide (#1023)

    Emoji improvements / bug fixes (#1855)

    • Rework internal EmojiCompat implementation and decrease emoji load time UI jank (#1770)
    • Re-add vibration to emoji screen (#1675)
    • Fix symbols emoji category icon not representative (#1421)
    • Fix incorrect aspect ratio for emoji keys (#1856)

    Other changes

    • Add additional Persian layout (#1823, thanks @Mahantor)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.16 releases.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.16-beta02...v0.3.16-beta03

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-beta03.apk(17.39 MB)
    florisboard-0.3.16-beta03.sha256.txt(96 bytes)
  • v0.3.16-beta02(May 11, 2022)

    Input logic and editor caching fixes (#1832)

    Thanks a lot for the initial feedback on the last beta 0.3.16-beta01! This was really helpful eliminating a lot of issues and overall improving the input even more, especially for the shift key behavior. If you find other issues regarding the input logic in this beta release, feel free to continue using the discussion thread #1827 for providing feedback for this, I really appreciate it!

    • Adjust timing for double tap / key repeat events (#1095)
    • Fix backspace sometimes not working in initial state (#1831)
    • Fix long press action being run outside main thread, causing rare state mismatches
    • Fix space swipe not checking for raw input editor

    Shift-key/Capitalization-specific changes

    • Rework shift state management
      • Shifting now differentiates between "Unshifted", "Shifted (Manual)", "Shifted (Automatic)" and "Caps lock"
      • Fix Dvorak layout symbols which misinterpreted shift states previously (#528)
    • Add ability to hold shift without caps lock (#1764)
      • This allows you to use the shift key as known on a PC keyboard. If you long press shift and start typing within the first second (exact time depends on your long press timeout in prefs), caps lock will not get activated. However if you only long press shift without character input, caps lock will be activated, like previously also possible in 0.3.15 and earlier.
    • Fix shift key state concurrency issue in touch logic (#227)
    • Fix shift long press resetting after releasing (#1834)
    • Fix auto-capitalization and re-evaluate on new subtype (#1623)

    Non-Latin composition re-implementation and improvements

    • Re-implement composers into new editor instance logic (#1832)
      • Typing in Korean and Vietnamese (Telex) is now working again
    • Vastly improve Telex for Vietnamese (#1797, thanks @thanhhocse96)
      • Please see #1751 and #1797 for details regarding this change

    Other changes

    • Fix Smartbar placeholder suggestion UI not updating correctly
    • Improve devtools input state overlay
    • Refactor AndroidX.Room to use KSP + export schema correctly

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.16 releases.
    • Glide typing has issues recognizing long words (unknown cause atm, not sure if this is still an issue)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.16-beta01...v0.3.16-beta02

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-beta02.apk(17.38 MB)
    florisboard-0.3.16-beta02.sha256.txt(96 bytes)
  • v0.3.16-beta01(May 3, 2022)

    New app icons

    FlorisBoard now has new app icons for each track, designed and provided for use in this project by BloodRaven0, thanks a lot! <3

    Stable | Beta | Debug ---|---|--- image | image | image

    See #1775 for implementation.

    Input logic and editor caching behavioral changes (#1822)

    • Major rework of the internal editor instance and caching logic
      • Editor content state is now cached in a "window" around the cursor, which allows to make predictive cache changes and avoid unnecessary input connection calls (#1822)
      • Improve input performance by utilizing the new cached window system
      • Improve the communication between FlorisBoard and the target input connection

    This new system has been tested on many common apps and all major bugs I noticed have been ironed out. Should I have accidentally broken input in an app (in comparison to a previous FlorisBoard version or another keyboard) or you just want to give general feedback on this overhaul please make sure to give me feedback in #1827 instead of raising a new issue, this allows me to have these types of issues in one place and fix them in subsequent beta and rc releases before 0.3.16 stable.

    Minimum required Android version change

    The minimum required Android version has been changed from Android 6 (API level 23) to Android 7 (API level 24). This change was hard to decide but it allows to fully use the ICU platform package Android provides since API 24. See #1822 for the detailed reasoning for this change. I am aware that this step may affect some users (especially old tablets), but FlorisBoard is a fast moving modern Android keyboard with limited developing resources, so I decided in favor of increasing the minimum required Android version.

    If there's really a big need for Android 6 support in 0.3.16 and beyond I can experiment with making an extra APK for devices still on this API level which includes its own ICU4J packaged, however this means a very large APK size and is possibly quite hard to maintain in the long run.

    Enhancements and fixes for space, enter and delete keys

    • Fix double-space period placing period incorrectly (#524)
    • Add delete key long press option in gesture prefs (#637)
      • The long press action for the delete key can now be changed between "Delete last character" and "Delete last word". If the latter is used and you hold down the delete key, entire words instead of characters will be deleted until you release the delete key again.
    • Add "Always delete word" toggle for glide typing (#1541, #1036)
      • By default tapping delete after a glided word will now delete the whole glided word, except if you disable the newly added toggle.
    • Fix delete key precise selection gesture bugs
    • Pressing delete will not reset the keyboard anymore inside the Settings preview field (#1617)
    • Fix enter key behavior for multiline and shift (#1037)
      • FlorisBoard now supports if messaging apps' "Enter key sends message" option, as long as the target messaging app field is configured correctly. Tested and verified in WhatsApp and Signal.
    • Fix space bar tapping rapidly causing characters to be deleted (#1792)

    Other changes

    • Rework internal project structure, code base and some package names (#1780)
    • Update Kurdish layout and overall improvements (#1798, thanks @GoRaN909)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.16 releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.15...v0.3.16-beta01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.16-beta01.apk(17.36 MB)
    florisboard-0.3.16-beta01.sha256.txt(96 bytes)
  • v0.3.15(Apr 10, 2022)

    Theme and stylesheet changes

    • Add Pure Night and all borderless themes again to the default themes (#1702)
    • Decrease visual key height for borderless themes
    • Improve stylesheet editor rule dialog code selector (#1720)
      • Add key code preview box in stylesheet rule dialog
      • Add key code recording tool in stylesheet editor
      • Improve wording of strings referencing the code selector in stylesheet editor
    • Fix key shape clipping contents (#1710)
    • Fix emoji key (and popup) font color ignoring current theme (#1720)
    • Fix dark mode issues on Xiaomi devices by disallowing forceDarkAllowed (#1694)

    Keyboard UI and behavior changes

    • Add support for Extracted Landscape Input (#1734)
      • This fixes issues where the keyboard laid itself over the input field.
      • Custom themeing of this layout is possible but may not always work, especially on some series of Xiaomi and Samsung devices. This is a known issue but difficult to fix, as the system and the keyboard fight to color the same UI elements on those devices.
      • For default theme users the new colors for this UI will automatically apply, for custom theme users it must be manually added to the theme. (See the default themes for the setup)
    • Add support for videos on clipboard history (#1721)
      • Note that not many apps support videos from the clipboard, so in many instances you won't be able to paste a video yet.
    • Add limit to clipboard history text item preview (#1730)
    • Add alphabetic letters to phone digits in telpad layout (#355)
    • Change layout direction of Smartbar and Emoji to forced LTR (#1673)
    • Fix keys can get stuck with active visuals (#1446)
    • Fix popup stays active when using multitouch (#1450)
    • Fix statistical glide typing manager crashing in some cases (#1632)
    • Fix glide not initializing if disabled on app start (#1703)
    • Fix glide trail not drawing if popups disabled (#1704)
    • Fix delete key swipe right deleting left words (#1765)
    • Fix space bar ignoring "No action" setting (#1706)
    • Fix keyboard ignoring number row height in symbols (#1658)
    • Fix media and clipboard ignoring number row in height calc (#1672)
    • Remove popups from telpad layout (#1044)

    Layout changes & fixes

    • Add Armenian keyboard layouts (#1654, thanks @pjtsearch)
    • Add Azerbaijani keyboard layout (#1639, thank @nijatismayilzada)
    • Add ColemakDH keyboard layout (#1401, thanks @blucin)
    • Add Hebrew SI-1452 niqqud and some punctuation marks (#1413, thanks @amiryal)
    • Add German (Gboard) layout (#1737, thanks @m-koushan)
    • Add additional Persian keyboard layout (#1683, thanks @m-koushan)
    • Fix Arabic combining characters not displaying correctly (#1679)
    • Fix main popup for "ﺍ" ‎in Persian (#1571, thanks @tsiflimagas)
    • Fix TLDs of Arabic and Urdu-Phonetic (#1680, thanks @GoRaN909)
    • Fix Korean composition of medial+final and final+final (#1757, thanks @Hayleia)
    • Fix Persian layout issue (#1746, thanks @m-koushan)
    • Fix Unicode non-spacing marks for Thai (#1759)
      • For Android 7+ devices all Unicode non-spacing characters are now fixed with this change
    • Fix փ missing in Armenian layouts (#1741, thanks @pjtsearch)
    • Improve Ukrainian popup mappings (#1739, thanks @honsiorovskyi)

    Other changes

    • Add support for locale display language in devtools
    • Add Chinese (Simplified) (zh-CN) as available language to translate
    • Decrease vertical padding usage in setup screen (#1364)
    • Fix language names not titlecase for some locales (#1686)
    • Fix Restore screen too restrictive about media type (#1707)
    • Improve devtools overlay UI and remove unnecessary code (#1763)
    • Possible fix for setup screen system observer failing (#1731)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14...v0.3.15

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.15-release.apk(17.24 MB)
    florisboard-0.3.15-release.sha256.txt(97 bytes)
  • v0.3.15-rc02(Apr 9, 2022)

    General changes

    • Fix input view + extracted input UI layouting issues (#1760)
    • Fix NPE crash in extracted input UI (#1758)
    • Fix statistical glide typing manager crashing in some cases (#1632)
    • Fix keys can get stuck with active visuals (#1446)
    • Fix popup stays active when using multitouch (#1450)
    • Fix delete key swipe right deleting left words (#1765)
    • Improve devtools overlay UI and remove unnecessary code (#1763)

    Layout changes & fixes

    • Add German (Gboard) layout (#1737, thanks @m-koushan)
    • Fix Korean composition of medial+final and final+final (#1757, thanks @Hayleia)
    • Fix Persian layout issue (#1746, thanks @m-koushan)
    • Fix Unicode non-spacing marks for Thai (#1759)
      • For Android 7+ devices all Unicode non-spacing characters are now fixed with this change

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.15/16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.15-rc01...v0.3.15-rc02

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.15-rc02.apk(17.24 MB)
    florisboard-0.3.15-rc02.sha256.txt(94 bytes)
  • v0.3.15-rc01(Apr 5, 2022)

    Changes

    • Add Pure Night and all borderless themes again to the default themes (#1702)
    • Add support for Extracted Landscape Input (#1734)
      • This fixes issues where the keyboard laid itself over the input field.
      • Custom themeing of this layout is possible but may not always work, especially on some series of Xiaomi and Samsung devices. This is a known issue but difficult to fix, as the system and the keyboard fight to color the same UI elements on those devices.
      • For default theme users the new colors for this UI will automatically apply, for custom theme users it must be manually added to the theme. (See the default themes for the setup)
    • Add support for videos on clipboard history (#1721)
      • Note that not many apps support videos from the clipboard, so in many instances you won't be able to paste a video yet.
    • Add support for locale display language in devtools
    • Add Chinese (Simplified) (zh-CN) as available language to translate
    • Decrease visual key height for borderless themes
    • Fix glide not initializing if disabled on app start (#1703)
    • Fix glide trail not drawing if popups disabled (#1704)
    • Fix space bar ignoring "No action" setting (#1706)
    • Fix փ missing in Armenian layouts (#1741, thanks @pjtsearch)
    • Improve Ukrainian popup mappings (#1739, thanks @honsiorovskyi)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.15/16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.15-beta02...v0.3.15-rc01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.15-rc01.apk(17.23 MB)
    florisboard-0.3.15-rc01.sha256.txt(94 bytes)
  • v0.3.15-beta02(Mar 31, 2022)

    Theme engine and stylesheet editor changes

    • Improve stylesheet editor rule dialog code selector (#1720)
      • Add key code preview box in stylesheet rule dialog
      • Add key code recording tool in stylesheet editor
      • Improve wording of strings referencing the code selector in stylesheet editor
    • Fix key shape clipping contents (#1710)
    • Fix emoji key (and popup) font color ignoring current theme (#1720)

    Other changes

    • Add additional Persian keyboard layout (#1683, thanks @m-koushan)
    • Add limit to clipboard history text item preview (#1730)
    • Decrease vertical padding usage in setup screen (#1364)
    • Fix language names not titlecase for some locales (#1686)
    • Fix Restore screen too restrictive about media type (#1707)
    • Possible fix for setup screen system observer failing (#1731)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.15/16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.15-beta01...v0.3.15-beta02

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.15-beta02.apk(17.18 MB)
    florisboard-0.3.15-beta02.sha256.txt(96 bytes)
  • v0.3.15-beta01(Mar 25, 2022)

    Keyboard layout changes

    • Add Armenian keyboard layouts (#1654, thanks @pjtsearch)
    • Add Azerbaijani keyboard layout (#1639, thank @nijatismayilzada)
    • Add ColemakDH keyboard layout (#1401, thanks @blucin)
    • Add Hebrew SI-1452 niqqud and some punctuation marks (#1413, thanks @amiryal)
    • Fix Arabic combining characters not displaying correctly (#1679)
    • Fix main popup for "ﺍ" ‎in Persian (#1571, thanks @tsiflimagas)
    • Fix TLDs of Arabic and Urdu-Phonetic (#1680, thanks @GoRaN909)

    Other changes

    • Add alphabetic letters to phone digits in telpad layout (#355)
    • Change layout direction of Smartbar and Emoji to forced LTR (#1673)
    • Fix dark mode issues on Xiaomi devices by disallowing forceDarkAllowed (#1694)
    • Fix keyboard ignoring number row height in symbols (#1658)
    • Fix media and clipboard ignoring number row in height calc (#1672)
    • Remove popups from telpad layout (#1044)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.15/16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14...v0.3.15-beta01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.15-beta01.apk(17.15 MB)
    florisboard-0.3.15-beta01.sha256.txt(96 bytes)
  • v0.3.14(Mar 22, 2022)

    Important notes

    After a long development phase the completely reworked FlorisBoard is now ready for a stable 0.3.14 release. A lot of work has gone into this, I want to thank all my contributors, translators, issue maintainers and supporters of this project for the help!

    If you want to give feedback on the new release please do so in the announcement discussion for this release (#1678). Please make sure to read through the important notes down below to see why some things may have reset.

    Preferences one-time reset

    Upon installing the 0.3.14 update onto the existing stable version ALL settings, custom themes and the clipboard history will be lost. This is due to the fact that the underlying file and settings structure has completely changed, themes are now proper extensions, underlying database structures have changed too. With this new format established, the future stable updates will not cause such a big reset anymore.

    Word suggestions

    This release temporary removes support for the completely buggy old word suggestions. If you still enable word suggestions the Smartbar would show a placeholder with the current word plus a number, to test out some UI layouts in the Smartbar. Please DO NOT file an issue regarding word suggestions not working, this is known and just clutters up the issue list unnecessarily. On a new word suggestion functionality will be worked on in the 0.4.0 development cycle.


    Settings UI rework

    • Design and structural changes
      • The Settings UI has undergone a major overhaul and has moved from a bottom-navigation to a list-based approach
      • Coloring has been updated to be more modern and to be more unified and consistent across the UI
      • Added AMOLED dark mode in addition to the dark grey dark mode
      • Add "System default (AMOLED)" option for Settings UI theme (#1539)
    • Add an preview field to try out features without having to leave the Settings UI
      • Note that the preview field may be buggy when it comes to text selection, this is a known issue but likely caused by the underlying UI library logic
    • Re-design Setup UI screen (#996)
    • Add a redesigned subtype manager screen
      • Allow to use any language available on the device for a subtype (useful when installing custom dictionaries for languages not included in the subtype presets)
      • Allow to manually define which popup mapping should be used
      • Subtype manager and its add/edit screens are now screen rotation safe and do not loose the input state
    • Implement separate keyboard height prefs for portrait/landscape (#360)
    • Add devtools screen / Add Android system debug tools (#1328)

    Backup & Restore / Auto-backup (#1498)

    • Add support for Auto-backup
      • FlorisBoard now supports Android's Auto-backup by default, which allows you to back-up your FlorisBoard configuration via your system backup utility (Google Drive, Seedvault, etc.)
      • Only full backups are possible, no partial ones
    • Add internal Backup & Restore screen
      • Located in Settings > Advanced and allows to perform manual backups, exported/imported as ZIP archive files
      • Backup archives are cross-track compatible (stable -- beta -- debug), with minor exceptions when a feature diff is existent between said tracks
      • Manual backups can do partial backup/restore operations as well

    Clipboard logic and history changes

    • Full rework of clipboard backend
      • All items are now stored in the app's database, so switching keyboards or restarting your device won't clear your history anymore
      • Add clearing primary clip also deletes last history entry (#1448)
      • Fix clipboard adding empty string silently when actually failing (#1647)
      • Fix duplicate primary clip callback adding duplicates (#1555)
      • Fix selectedText not checking for null when performing a copy (#1637, thanks @Thumbscrew)
      • Rewrite the clipboard image backend, is now compatible with more apps
    • Clipboard history improvements
      • The clipboard history is not viewable anymore if your device is locked, making the contents of your history more secure (#1250)
      • Add a note on-screen if the clipboard history is disabled or empty, so any confusion around if the clipboard history is actually enabled or not should be cleared
      • Add clear clipboard history confirmation (#1606)
      • Fixed a lot of clipping issues with tap animations

    Smartbar changes

    • The Smartbar is now able to show both a primary and secondary row at once, allowing to access clipboard utilities while word suggestions are showing
    • The secondary row is optional and can be placed above, below or floating over the app's UI when expanded.
    • Add ability to flip the side on which the quick actions access button is located (defaults to left)
    • Add auto-expand for the quick actions if no suggestions can be shown (configurable in prefs)

    Theme rework / New stylesheet editor (#1513)

    • A completely new and overhauled in-app stylesheet editor is now included. Its main features are:
      • Live preview within the keyboard UI of all stylesheet changes
      • Properties and values are now selected in dropdowns, thus allowing for easy discoverability of what each property/rule supports
      • Easy definition and usage of variables for re-using colors throughout the whole stylesheet
      • It is easier than ever to define custom rules for specific keys and specific states
    • Add ability to change the shape and font-size of keys and other keyboard elements
    • Add ability to specify hardware-accelerated shadow-elevation
    • Implement border-color and border-width for stylesheets (#1105)

    As stated above, the new stylesheets are NOT compatible with the old 0.3.13 custom themes, you must recreate them. I am very sorry for the inconvenience caused here, but this is an absolutely necessary step in improving custom themes for future releases!

    Keyboard layout additions and changes

    • Add Basic Telex for Vietnamese (#978, thanks @Hayleia)
    • Add Igbo layout (#1251, thanks @nd500)
    • Add Rusyn Language Language Set, Layout, Popups (#1524, thanks @svvvst)
    • Add Thai layout (#1226, thanks @mrdeck4rd)
    • Add ur-PK in phonetic layout (#1278, thanks @mubashir-rehman)
    • Add Warang Citi layout (#1274, #1288, thanks @Singkiring57)
    • Change name of Rial currency symbol (﷼) (#1323, thanks @rex07)
    • Fix German uppercase letter ẞ being displayed as SS (#1321)
    • Fix kurmanji kurdish letter ş (#1638, thanks @GoRaN909)
    • Fix redundant % symbol (#1267, thanks @Aman9das)
    • Fix some character codes in ipa layout (#1444, thanks @tsiflimagas)
    • Update Kurdish layout (#1410, thanks @GoRaN909)
    • Update Romanian layout (#1330, thanks @SchnWalter)
    • Update Urdu phonetic layout (#1619, thanks @blueberry-robin)

    Keyboard logic and UI backend rework

    • The keyboard logic and UI backend has been completely reworked, as the old backend had severe problems working with the new preference logic
      • Layouts, currency sets, popup mappings and subtype presets are now using the extension scheme. In the future this allows for imports of custom layouts etc. and for building up the community sharing repository.
    • Add option to select text rather than delete it via the delete key swipe left gesture (#705, #1534)
    • Fix ArrayIndexOutOfBounds crash in glide typing (#801, #927, #1398)
    • Fix ConcurrentModificationException crash in glide typing (#887, #1632)
    • Fix StringIndexOutOfBoundsException crash (#1140, #1301, #1519, #1662)
    • Fix numeric and numeric advanced popup width (#1044)
    • Fix space-bar switches to full keyboard in number-only fields (#1248)

    Localization changes

    • Add Japanese (ja) as available language
    • Add option to specify language name display type (#1568)
    • Add ability to hide language name on the space bar (#371, #1025)
    • Add full support for RTL (right-to-left) UI in both the preferences and keyboard UI
    • Fix parentheses for RTL languages (#422, #1624)
    • Disable bundle language split for GPlay releases
      • This fixes an issue where users getting FlorisBoard from the Google Play Store could not manually change the language, as only the system and default language was shipped.
    • Fix long titles and summaries in Settings for English (#998)
    • Fix Kurdish language not changing app language (#1620, thanks @GoRaN909)
    • Fix typo in strings.xml (#1445, thanks @Spiryt7)
    • Remove slurs from glide dictionary (#1306, thanks @pnppl)

    Improvement of the emoji palette view (#1589)

    • Add a new basic emoji palette
      • Emoji categories and order is based on Unicde 14.0
      • Emoji history now saves your recently used emojis and sorts them by newest to oldest (#268)
      • Emoji popups work properly again (#877)
    • Add ability to specify preferred emoji skin tone (#132)
    • Add ability to specify emoji history max size

    Other changes

    • Debug builds are now additionally installable on x86/x86_64 architectures
    • Raise targetSdk from API 30 to 31
    • Fix crash with Kotlin Coroutines (#1295)
    • Fix crash dialog crashing on Android 12 when pushing a notification
    • Fix crash in devtools system settings viewer (#1387)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround and hopefully a fix will be found for the 0.3.15/16 hotfix releases.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.13...v0.3.14

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-release.apk(17.14 MB)
    florisboard-0.3.14-release.sha256.txt(97 bytes)
  • v0.3.14-rc04(Mar 20, 2022)

    Release candidate 4

    This release is candidate no. 4 for a stable 0.3.14 release. From now on up until 0.3.14 stable only meta changes (documentation) are made, except some critical issue is reported in the following days, which would prompt a further release candidate release.

    Note that despite its different version name it will still install as "FlorisBoard Beta" with the package name dev.patrickgold.florisboard.beta on your device.

    Changes

    • Fix clipboard crash when item still has old URI format (#1660)
    • Fix currency key in symbols not having popups (#1671)
    • Fix numeric and numeric advanced popup width (#1044)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-rc03...v0.3.14-rc04

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-rc04.apk(17.14 MB)
    florisboard-0.3.14-rc04.sha256.txt(94 bytes)
  • v0.3.14-rc03(Mar 19, 2022)

    Release candidate 3

    This release is candidate no. 3 for a stable 0.3.14 release. From now on up until 0.3.14 stable only meta changes (documentation) are made, except some critical issue is reported in the following days, which would prompt a further release candidate release.

    Note that despite its different version name it will still install as "FlorisBoard Beta" with the package name dev.patrickgold.florisboard.beta on your device.

    Changes

    • Fix theme properties share values between different rules (#1626)
    • Fix clipboard history UI crashing if data file not existing (#1660)
    • Fix ArrayIndexOutOfBounds crash in glide typing (#801, #927, #1398)
    • Fix ConcurrentModificationException crash in glide typing (#887, #1632)
    • Fix StringIndexOutOfBoundsException crash (#1140, #1301, #1519, #1662)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-rc02...v0.3.14-rc03

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-rc03.apk(17.14 MB)
    florisboard-0.3.14-rc03.sha256.txt(94 bytes)
  • v0.3.14-rc02(Mar 18, 2022)

    Release candidate 2

    This release is candidate no. 2 for a stable 0.3.14 release. From now on up until 0.3.14 stable only meta changes (documentation) are made, except some critical issue is reported in the following days, which would prompt a further release candidate release.

    Note that despite its different version name it will still install as "FlorisBoard Beta" with the package name dev.patrickgold.florisboard.beta on your device.

    Clipboard changes

    • Re-implement clipboard image support (#1642)
    • Fix clipboard adding empty string silently when actually failing (#1647)
    • Fix selectedText not checking for null when performing a copy (#1637, thanks @Thumbscrew)
    • Fix duplicate primary clip callback adding duplicates (#1555)

    Other changes

    • Fix auto-backup not working on certain devices and with ADB
    • Fix editable color strings contain Unicode Ctrl Chars (#1636)
    • Fix Corner Percent Shape allowing percentages over 100 (#1643)
    • Fix SnyggStringValueSpec not having meaningful error message (#1643)
    • Fix kurmanji kurdish letter ş (#1638, thanks @GoRaN909)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-rc01...v0.3.14-rc02

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-rc02.apk(17.14 MB)
    florisboard-0.3.14-rc02.sha256.txt(94 bytes)
  • v0.3.14-rc01(Mar 11, 2022)

    Release candidate 1

    This release is candidate no. 1 for a stable 0.3.14 release. From this release to stable 0.3.14 only critical bug fixes and documentation/meta changes are made, no other changes or feature additions. There will still be at least one further release candidate, 0.3.14-rc02, before a stable release.

    Note that despite its different version name it will still install as "FlorisBoard Beta" with the package name dev.patrickgold.florisboard.beta on your device.

    Localization changes

    • Add Japanese (ja) as available language
    • Add full support for RTL (right-to-left) UI in both the preferences and keyboard UI
    • Fix parentheses for RTL languages (#422, #1624)
    • Disable bundle language split for GPlay releases
      • This fixes an issue where users getting FlorisBoard from the Google Play Store could not manually change the language, as only the system and default language was shipped.

    Other changes

    • Fix floris_user_dictionary not included in auto-backup
    • Add note for glide typing preview (#1627)
    • Fix Smartbar Settings preference enable state bug
    • Fix long titles and summaries in Settings for English (#998)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta14...v0.3.14-rc01

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-rc01.apk(17.11 MB)
    florisboard-0.3.14-rc01.sha256.txt(94 bytes)
  • v0.3.14-beta14(Mar 6, 2022)

    Smartbar improvements

    • Smartbar UI & Preferences
      • Fix Smartbar primary actions auto-collapse for selection (#870)
      • Wording and layout of Smartbar preferences has been changed to be better understandable
      • Add ability to switch Smartbar layouts (#1548)
      • Possible fix for overflow button now showing (#1615)
    • Smartbar themeing
      • The names and structure of the Smartbar UI elements in the stylesheet file has been simplyfied in accorance to the preferences wording:
        • Remove smartbar-action-row (Use smartbar-primary-row)
        • Remove smartbar-candidate-row (Use smartbar-primary-row)
        • Rename smartbar-primary-action-row-toggle to smartbar-primary-actions-toggle
        • Rename smartbar-primary-secondary-row-toggle to smartbar-secondary-actions-toggle
        • Rename smartbar-action-button to smartbar-quick-action
      • If you use the default theme, no further action is required and everything will work as normal.
        If you use a custom theme designed in beta13 or older however, this will most likely result in weird Smartbar text colors (white-on-white or black-on-black), because the old rules are only partially compatible with the new ones.
        Please check the default theme for the correct rules and properties to use. Sorry for the inconvenience caused, but this change is needed for a clearer and more concise theme structure in the future.

    Emoji improvements

    • Add ability to specify preferred emoji skin tone (#132)
    • Add ability to specify emoji history max size
    • Fix EmojiCompat IllegalStateException crash (#1610)
    • Fix Emoji font size having "unspecified" as default value (#1607)

    Other Changes

    • Reimplement composers into new extension system, fixes Korean input (#1478)
    • Add clear clipboard history confirmation (#1606)
    • Fix cursor movement for RTL text inside preview field (#1575)
    • Fix Kurdish language not changing app language (#1620, thanks @GoRaN909)
    • Update Urdu phonetic layout (#1619, thanks @blueberry-robin)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta13...v0.3.14-beta14

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta14.apk(17.10 MB)
    florisboard-0.3.14-beta14.sha256.txt(96 bytes)
  • v0.3.14-beta13(Feb 27, 2022)

    Re-implement emoji palette and emoji history (#1589)

    • Add a basic emoji palette
      • Emoji categories and order is based on Unicde 14.0
      • Emoji history now saves your recently used emojis and sorts them by newest to oldest
      • Emoji popups work properly again

    Other changes

    • Fix crash dialog crashing on Android 12 when pushing a notification

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta12...v0.3.14-beta13

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta13.apk(17.08 MB)
    florisboard-0.3.14-beta13.sha256.txt(96 bytes)
  • v0.3.14-beta12(Feb 14, 2022)

    Improvements to the theme editing experience (#1565)

    • Implement border-color and border-width for stylesheets (#1105)
    • Improve float number display in theme editor (remove .0 suffix)
    • Improve ordering of value types in stylesheet property editor dialog
    • Fix alpha color value in HEX8 mode missing leading zero
    • Fix follow system and time not updating (#1557)
    • Fix transparent colors not drawing with a checkered background

    If you want to give feedback on the stylesheet editor / themes, please do so in #1531!

    Other changes

    • Add option to specify language name display type (#1568)
    • Add "System default (AMOLED)" option for Settings UI theme (#1539)
    • Add missing icon for Smartbar and Advanced screen (#1428)
    • Add "Display keyboard after dialog" option to fine-tune editor options
    • Fix behavior and visual display for URLs where no scheme is specified
    • Fix NullPointerException due to incorrect variable usage in restore screen (#1567)
    • Fix blank screen on initial app launch after install (#1537)
    • Fix crash in devtools system settings viewer (#1387)
    • Fix Scrollbar overlaps with text on welcome screen (#1427)
    • Re-implement user-dictionary settings UI (#1544)
    • Rework internal implementation of window insets within Settings UI

    If you want to give feedback on the Settings UI, please do so in #1235!

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta11...v0.3.14-beta12

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta12.apk(17.01 MB)
    florisboard-0.3.14-beta12.sha256.txt(96 bytes)
  • v0.3.14-beta11(Feb 8, 2022)

    Fixes in theme engine / editor

    • Devices running Android 9 would crash if a theme was missing a single shadow-elevation attribute in a stylesheet (#1553)
    • Variable name input was not restricted in the stylesheet editor, which resulted in crashes upon saving if invalid characters were used for the variable name
    • Variable name input box now disallows newline input and reacts correctly to the onDone IME action

    Note that this update is a hotfix release and thus only contains minor fixes / changes

    If you want to give feedback on the new stylesheet editor / themes, please do so in #1531!

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta10...v0.3.14-beta11

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta11.apk(16.91 MB)
    florisboard-0.3.14-beta11.sha256.txt(96 bytes)
  • v0.3.14-beta10(Feb 7, 2022)

    Improvements to the theme editing experience (#1538)

    • Add ability to manually edit, copy and paste the color string by tapping on it
    • Add editor fine-tune dialog, where editor-specific options can be set
    • Add "Display Colors As" option to fine-tune dialog, for now with Hexadecimal and RGBA support, defaulting to Hexadecimal
    • Move editing level selector to fine-tune dialog
    • Variable names are now translated in basic and advanced in the secondary line within a rule set

    If you want to give feedback on the new stylesheet editor / themes, please do so in #1531!

    Improvements to the default theme / theme engine (#1538)

    Be aware that default theme changes do not reflect automatically in your custom themes. Either make use of these new features manually or base your theme of the improved default theme.

    • Add glide-trail element, which allows you to customize the color of the glide trail
    • Add generic circle() shape value for defining perfectly round circle shapes
    • Add ability to specify hardware-accelerated shadow elevation for certain elements:
      • key
      • key-popup
      • clipboard-item
      • clipboard-item-popup
      • smartbar-primary-action-row-toggle
      • smartbar-primary-secondary-row-toggle
      • smartbar-action-button
      • smartbar-key
    • Rework default theme variables and their usages. Note that these variables are just suggestions / convenience and can at anytime be removed or replaced by your own custom variable system! Changes:
      • Add --shape and --shape-variant. The former is for keys, key popups and Smartbar keys, the latter for all rounded elements in clipboard history
      • Add --on-surface-variant, which is used by default as a tuned-down color of --on-surface
      • Remove --on-primary and --on-secondary, will still be translated if manually added

    Other changes

    • Add option to select text rather than delete it via the delete key swipe left gesture (#705, #1534)
    • Add ability to hide language name on the space bar (#371, #1025)
    • Fix spacebar switches to full keyboard in number-only fields (#1248)

    If you want to give feedback on the Settings UI, please do so in #1235!

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta09...v0.3.14-beta10

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta10.apk(16.91 MB)
    florisboard-0.3.14-beta10.sha256.txt(96 bytes)
  • v0.3.14-beta09(Feb 2, 2022)

    Theme rework / New stylesheet editor (#1513)

    • A completely new and overhauled in-app stylesheet editor is now included. Its main features are:
      • Live preview within the keyboard UI of all stylesheet changes
      • Properties and values are now selected in dropdowns, thus allowing for easy discoverability of what each property/rule supports
      • Easy definition and usage of variables for re-using colors throughout the whole stylesheet
      • It is easier than ever to define custom rules for specific keys and specific states
    • Extension meta data and bundled components can now be managed in-app
    • New theme extensions can be created in-app

    If you want to give feedback on the new stylesheet editor, please do so in #1531!

    Backup & Restore / Autobackup (#1498)

    • FlorisBoard now supports Android's auto-backup by default, which allows you to back-up your FlorisBoard configuration via your system backup utility
    • Additionally a manual Backup & Restore screen has been added within the Advanced settings to allow to export/import a FlorisBoard configuration as a convenient ZIP-file.

    If you want to give feedback on the Settings UI (including Backup & Restore), please do so in #1235!

    Other changes

    • Add Rusyn Language Language Set, Layout, Popups (#1524, thanks @svvvst)
    • Update Kurdish layout (#1410, thanks @GoRaN909)
    • Raise targetSdk from API 30 to 31

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta08...v0.3.14-beta09

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta09.apk(17.71 MB)
    florisboard-0.3.14-beta09.sha256.txt(96 bytes)
  • v0.3.14-beta08(Jan 5, 2022)

    Settings UI rework

    • Add new UI for importing / exporting and managing installed theme extensions.
      Note that an in-app UI for modifying custom themes without writing a stylesheet by hand will be implemented in beta09.
    • Themes are now previewed directly by tapping in the "Try out your setup"-box
    • Possibly fix issue with force dark on MIUI systems (A10+)
    • Reduce APK size by about 2MB

    If you want to give feedback on the new Settings UI, please do so in #1235!

    Keyboard logic and UI backend rework

    • Finalize new theme engine backend and implementation, is ready to use with imported theme extensions. Note: there's currently no documentation available as of yet, please use the default theme implementation as a template:
      https://github.com/florisboard/florisboard/tree/master/app/src/main/assets/ime/theme/org.florisboard.themes

    • Add clearing primary clip also deletes last history entry (#1448)

    • Fix emoji view NYI causing keyboard to disappear (#1447)

    • Fix delete all clipboard items position (#1449)

    • Fix some character codes in ipa layout (#1444, thanks @tsiflimagas)

    • Fix typo in strings.xml (#1445, thanks @Spiryt7)

    • Re-implement glide typing (see known issues though!!)

    • Remove arrow from preview field (#1429)

    • Update the Romanian layout (#1330, thanks @SchnWalter)

    • Reminder that the beta releases do not contain all features yet.
      List of unavailable features (and when they will get re-implemented):

      • In-app theme customization UI (beta09)
      • Emoji view (beta10)
      • Landscape fullscreen input (beta10)
      • Word suggestions (beta10+, new suggestion algorithm 0.3.15/16)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Glide typing has issues recognizing long words (unknown cause atm)

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta07...v0.3.14-beta08

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta08.apk(17.60 MB)
    florisboard-0.3.14-beta08.sha256.txt(96 bytes)
  • v0.3.14-beta07(Dec 12, 2021)

    Settings UI rework

    • Fix subtype show all button causing crash (#1436)
    • Re-implement / Add clipboard history and Smartbar preferences

    If you want to give feedback on the new Settings UI, please do so in #1235!

    Keyboard logic and UI backend rework

    • Re-implement clipboard manager/history

      • Full rework of clipboard backend
      • All items are now stored in the app's database, so switching keyboards or restarting your device won't clear your history anymore. IMPORTANT: even when restarting your device your items are kept, BUT there's currently a state bug where the items won't be shown until you copy any text clip or image and the database live connection actually refreshes. I am aware of this issue but currently unable to find a fix for this.
      • The clipboard history is not viewable anymore if your device is locked, making the contents of your history more secure (#1250)
      • Add a note on-screen if the clipboard history is disabled or empty, so any confusion around if the clipboard history is actually enabled or not should be cleared.
      • Fixed a lot of clipping issues with tap animations.
    • Re-implement Smartbar

      • The Smartbar is now able to show both a primary and secondary row at once, allowing to access clipboard utilities while word suggestions are showing
      • The secondary row is optional and can be placed above, below or floating over the app's UI when expanded.
      • Add ability to flip the side on which the quick actions access button is located (defaults to left)
      • Add auto-expand for the quick actions if no suggestions can be shown (configurable in prefs)
    • Re-implement autofill inline suggestions (Android11+ only)

    • Fix keyboard UI freezing when tapping on an area without a touch handler assigned

    • Fix keyboard input logic duplicating the last typed letter and/or replacing it

    • Reminder that the beta releases do not contain all features yet.
      List of unavailable features (and when they will get re-implemented):

      • Theme customization (new theme engine and look) (beta08 and beta09)
      • Glide typing (beta08 or beta09)
      • Emoji view (beta09 or beta10)
      • Landscape fullscreen input (beta09 or beta10)
      • Word suggestions (beta10+, new suggestion algorithm 0.3.15/16)

    Known issues

    • When showing the keyboard UI after longer idling, it may refuse to accept touch input at first. If this happens, hide the keyboard and tap back into the text field you want to type, then it works again. This is a temporary workaround, a fix is planned as soon as the cause for this issue has been identified.
    • Clipboard history after restarting the device says it is empty, this is a display state bug. Once you copy any text clip or image all other items will appear again.

    Commits included in this release: https://github.com/florisboard/florisboard/compare/v0.3.14-beta06...v0.3.14-beta07

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta07.apk(19.62 MB)
    florisboard-0.3.14-beta07.sha256.txt(96 bytes)
  • v0.3.14-beta06(Nov 28, 2021)

    Settings UI rework

    • Add a redesigned subtype manager screen
      • Allow to use any language available on the device for a subtype (useful when installing custom dictionaries for languages not included in the subtype presets)
      • Allow to manually define which popup mapping should be used
      • Subtype manager and its add/edit screens are now screen rotation safe and do not loose the input state
    • Add dotted line for active step to FlorisStepLayout
    • Add scrollbars to all scrollable views (except some dialogs)
    • Fix app preferences getting reset when FlorisBoard was enabled during device boot (#1304)
    • Fix setup screen getting stuck (#1364)
    • Fix input feedback blocking main thread (#1366)
    • Potential fix for AssetManager jsonConfig null crash (#1351)
    • Completely remove old pref backend to resolve a lot of interop issues (#1365)
    • Remove old SettingsMainActivity and any official way to open the remains of the old pref UI

    If you want to give feedback on the new Settings UI, please do so in #1235!

    Keyboard logic and UI backend rework

    • The keyboard logic and UI backend has been completely reworked, as the old backend had severe problems working with the new preference logic. Additionally, the backend for the new theme engine has been vastly improved and expanded, which will be available for in-app customization in beta08.

    • List of unavailable features (and when they will get re-implemented):

      • Smartbar (beta07)
      • Password autofill on Android11+ (beta07)
      • Clipboard manager / clipboard row (beta07)
      • Theme customization (new theme engine and look) (beta08)
      • Glide typing (beta09)
      • Emoji view (beta09 or beta10)
      • Landscape fullscreen input (beta09 or beta10)
      • Word suggestions (beta10+, new suggestion algorithm 0.3.15/16)
    • Additionally layouts, currency sets, popup mappings and subtype presets are now using the extension scheme. In the future this allows for imports of custom layouts etc. and for building up the community sharing repository.

    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta06.apk(19.45 MB)
    florisboard-0.3.14-beta06.sha256.txt(96 bytes)
  • v0.3.14-beta05(Oct 28, 2021)

    Settings UI rework

    • Add auto-return from system IME enabler activity in setup (#1328)
    • Add devtools screen / Add Android system debug tools (#1328)
    • Fix FileObserver using new constructor(file,mask) for API <= 28 (#1326)
      • This fixes startup crashes on Android 7.1 and lower.
    • Fix Setup Screen shortly flashing when launching the Floris Preferences (#1328)
    • Fix spelling screen allowing config changes when disabled in system (#1328)
    • Fix step layout content not scrollable for small devices (#1328)
    • Improve observer code / Fix FlorisCard padding issues (#1328)
    • Old settings can now be found in "Remains of old settings" in the home screen (#1328)
    • (Internally) Add base for a new theme engine, prototypes testable in the settings will be available in the following beta releases

    If you want to give feedback on the new Settings UI, please do so in #1235!

    Other changes

    • Debug builds are now additionally installable on x86/x86_64 architectures
    Source code(tar.gz)
    Source code(zip)
    florisboard-0.3.14-beta05.apk(19.25 MB)
    florisboard-0.3.14-beta05.sha256.txt(96 bytes)
Owner
FlorisBoard
Administrative organization for FlorisBoard. Visit florisboard/florisboard for more info!
FlorisBoard
NimTome is a Free and open-source spell tracker application for Dungeons and Dragons

Nimtome: An open source application to manage all your spells in D&D About This project came to life as a homework assignment, but it became a lot bit

null 2 Jan 11, 2022
Free and open source manga reader for Android.

Build Stable Weekly Preview Contribute Support Server Tachiyomi Tachiyomi is a free and open source manga reader for Android 5.0 and above. Features F

Tachiyomi 20.4k Jan 9, 2023
AdAway is a free and open source ad blocker for Android.

AdAway AdAway is an open source ad blocker for Android using the hosts file and local vpn. For more information visit https://adaway.org Installing Th

null 4.9k Jan 7, 2023
Free and Open Source, full-featured torrent client for Android

Free and Open Source, full-featured torrent client for Android

Yaroslav Pronin 1.3k Jan 8, 2023
Aegis Authenticator is a free, secure and open source 2FA app for Android

Aegis Authenticator Aegis Authenticator is a free, secure and open source 2FA app for Android. It aims to provide a secure authenticator for your onli

Beem Development 4.6k Jan 3, 2023
A free and open-source offline authenticator app for Wear OS.

Wristkey Need 2FA codes quickly, right on your Wear watch without needing a phone? Wristkey is an open-source 2FA client for Wear OS watches that does

Owais Shaikh 80 Jan 4, 2023
Free and Open Source Launcher.

Omega Launcher Free and Open Source Launcher Installation & Download Our builds are available on: Github: Releases or Actions (usually). F-Droid: Eith

Saul Henriquez 977 Jan 2, 2023
A Free, Fully Fledged, Open-Source Music Player for Android

Turtle Player Free, Fully Fledged & Open-Source. The Music Player for Android. Turtle Player is designed to be a fun and unique app for playing your m

Edd Turtle 178 Nov 18, 2022
Authenticator Pro is a free open-source two factor authentication app for Android

Authenticator Pro Authenticator Pro is a free open-source two factor authentication app for Android. It features encrypted backups, icons, categories

jmh 1k Jan 4, 2023
The Free & Open Source Android Application for reading (Light) Novels

Shosetsu The Free & Open Source Android Application for reading (Light) Novels! We appreciate any help in improving the app, so let us know by opening

ShosetsuOrg 541 Jan 6, 2023
PngNote is a free, open-source, handwriting note-taking app based on BOOX SDK.

PngNote is a free, open-source, handwriting note-taking app based on BOOX SDK. Use BOOX SDK: Leverage raw-rendering feature, similar stylus lag to the

null 34 Nov 11, 2022
A Free, open source Contacts Butler App built with kotlin

Contacts Butler Do you have a bunch of contacts that are missing a lot of info such as names, emails, phone numbers, etc? Do you really know the conta

Android Contacts Butlers 1 Nov 30, 2021
Money Manager Ex is a free, open-source, cross-platform, easy-to-use personal finance software

Money Manager Ex is a free, open-source, cross-platform, easy-to-use personal finance software. It primarily helps organize one's finances and keeps track of where, when and how the money goes.

Money Manager EX 1.2k Dec 31, 2022
A Free, Open source unofficial manga reader for MangaDex

Neko A Free, Open source unofficial manga reader for MangaDex About: This is a MangaDex specific fork of Tachiyomi and TachiyomiJ2K. This contains fea

Carlos 1.4k Jan 3, 2023
A 2020s compatible React Native keyboard avoiding view for Android and iOS that just works.

react-native-keyboard-shift Example Snack coming soon Until then: Clone this repo: git clone https://github.com/FullStackCraft/react-native-keyboard-s

Full Stack Craft 66 Aug 16, 2022
Slide is an open sourced, ad free Reddit browser for Android

Slide Slide is an open source, ad free Reddit browser for Android. It is based around the Java Reddit API Wrapper. Slide is available on the Google Pl

Carlos Crane 1.7k Jan 9, 2023
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.

An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly. The main aim of this repository is to help students who are learning Android Development or preparing for an Android Developer role-based job.

Mimo Patra 15 Dec 29, 2022
Open Super dApp - Your gateway to the new digital commons. Integrated mobile messenger, Ethereum wallet, and Web 3.0 browser built on open, decentralized, and encrypted protocols.

A fully open source, open standard, decentralized "super app" including a secure, encrypted Matrix compatible messenger based off of the Element Messenger, and an Ethereum crypto wallet and web3 browser based off of Alpha Wallet.

2Gather 6 Jul 25, 2022
A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Smack About Smack is an open-source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android. Being a

Ignite Realtime 2.3k Dec 28, 2022