* Update ROADMAP.md
This commit updated the roadmap to include the latest changes,
especially that the 0.5 update was split and word suggestions
are pushed down to 0.6.
* Add time base theme switching to ROADMAP
* Mark spaces in uri bug as fixed in ROADMAP
* Fix typos
* Add subscripts and missing fractions in western arabic number row
Add subscripts and missing fractions (1/ and 0/3) in western_arabic.json number row layout
* Add subscripts and missing fractions in bengali number row
Added subscripts and missing fractions (1/ and 0/3) in bengali.json number row layout
* Fix ordering of hints for character "1" in western arabic number row
* Add subscripts and missing fractions in devanagari number row
Added subscripts and missing fractions (1/ and 0/3) in devanagari.json number row layout
* Add subscripts and missing fractions in eastern arabic number row
Added subscripts and missing fractions (1/ and 0/3) in eastern_arabic.json number row layout
* Add subscripts and missing fractions in gujarati number row
Added subscripts and missing fractions (1/ and 0/3) in gujarati.json number row layout
* Add subscripts and missing fractions in gurmukhi number row
Added subscripts and missing fractions (1/ and 0/3) in gurmukhi.json number row layout
* Add subscripts and missing fractions in kannada number row
Added subscripts and missing fractions in kannada.json number row layout
* Add subscripts and missing fractions in malayalam number row
Added subscripts and missing fractions in malayalam.json number row layout
* Add subscripts and missing fractions in oriya number row layout
Added subscripts and missing fractions in oriya.json number row layout
* Add subscripts and missing fractions in persian number row
Added subscripts and missing fractions in persian.json number row layout
* Add subscripts and missing fractions in tamil number row
Added subscripts and missing fractions in tamil.json number row layout
* Add subscripts and missing fractions in telugu number row
Added subscripts and missing fractions in telugu.json number row layout
* Add subscripts and missing fractions in warang_citi number row
Added subscripts and missing fractions in warang_citi.json number row layout
* Add subscripts and missing fractions in thai number row
Added subscripts and missing fractions in thai.json number row layout
* Fix ordering of fractions 3/n in western arabic number row
* Fix ordering of fractions 3/n in thai number row
* Fix label of digit '4' in cjk number row
Use the correct symbol U+FF14 instead of U+FF13
I suggest modifications for main alternatives to key
o -> ó instead of ö
u -> ú instead of ü
as those (ö and ü) already have their own keys on the keyboard.
So this way the main alternatives fit better to the similars (e.g. a-á, e-é, i-í) and the layout becomes more conveniently usable.
* Add `mode` attribute to element styles
Co-authored-by: Lars Mühlbauer <lm41@lm41.xyz>
* Add `mode` attribute to key popup elements
---------
Co-authored-by: Lars Mühlbauer <lm41@lm41.xyz>
* Add SnyggListItem and allow subtype list to be styled (#2885)
* Update default themes regarding subtype panel style
* Fix text overflow issues for default subtype panel list item style
The custom List<Pair<String, Any>> implementation of SnyggIdToValueMap
is removed in favor of the typealias for MutableMap<String, Any>. This
way we can work with normal map functions and have a more optimized
data-structure for our use-case.
The SnyggIdToValueMap.new() functions are replaced by a single
snyggIdToValueMapOf() function which allocates a new MutableMap.
The getOrThrow and getOrNull functions are modified to work with the
new underling map data-structure. The add function is a direct alias
to the putAll function.
* Improve crash screen
The whole crash screen content is now scrollable
and the buttons to report or close the activity
were moved to a footer. To distinguish between
the log content and the general explanation, a
horizontal divider was added.
* Do not restart activity on orientation change
* Rework one-handed mode.
The one-handed mode now remembers the position
where it was disabled and opens to this position
the next time it is activated.
* Add seperade `TOGGLE_COMPACT_LAYOUT` keycode
* Update AppPrefs.kt
* Update KeyboardScreen.kt
* Update ComputingEvaluator.kt
* Remove old migration rules
* Rename advanced settings to other and move incognito settings to typing
* Move clipboard suggestions to clipboard screen
* Move other to correct alphabetical location
* Optimize++
* test commit
* hi-IN popupmappings id added
* basic layout
* heart replaces with space
* code corrected
* lots of other keys added
* all characters have been added
* popmappings rearranged
* some positional change
* * and \ won't popup due to क्ष and ज्ञ
* ओ औ code correced
* some vovels reordered
* Hindi does not capitalization concept
* Add initial support for switching the subtype on space bar long press
* Fix keyboard presses behind the header panel
* Fix taps behind sheet
* Extract string ressource and refactor code
* Instant select subtype
* Persist suptype change in prefs
* Update snygg dynamic color scheme on wallpaper change
* Move broadcast receiver handling to FlorisImeService and properly unregister the receiver
* Set systembar color on stylesheet change
* Fix text being rendered behind the top app bar
This commit fixes an issue where the text was rendered
behind the top app bar in the crash dialog activity by
removing the top app bar in the style and adding a top
app bar in the layout XML.
* Fix toolbar rendering messed up in crash dialog screen
---------
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
This commit fixes an issue where the BottomSheetContent
was drawn behind the system navigation bar. To fix this
issue, I applied the saveDrawingPadding Modifier to the
AnimatedVisibility. There was a color problem on the
system navigation bar, so I set the background color to
SheetOutOfBoundsBgColorInactive. Now the system nav bar
is colored the right way.
This Commit fixes a crash when opening the clipboard history
with a theme which does not provide a sp size for the header
or the clipboard item. The sp value is now saveTimes multiplied
with 1f.
This commit introduces the new color schemes for spoofed
material you themes. The material you themes can now be
used on any android version that is supported by FlorisBoard
and not just on android 12+.
This package includes a set of material 3 color schemes
and a map of the corresponding colors to the color schemes.
Please visit the packages README.md for information
on how the schemes were created.
* Hide sensitive clip data in clipboard history
* Add is remoteDevice flag
* Do not link password length to displayed characters
* Add backspace in clipboard history (#2615)
* Use ClipboardItem level function for the obfuscation of the text
* Move the backspace button to the header bar
* Adjust innerHeight to match the full layout
* Use KeyboardLikeButton instead of FlorisIconButtonWithInnerPadding
* add delete subtype feature
* Delete dialog switch from AlertDialog.Builder (unstyled) to JetPrefAlertDialog() to match rest of the ui
* Rework code and add new changes, add translations for subtype delete dialog
* Fix: when dialog is open and screen is rotated app crashes
* Remove translations due to contribution guidelines
* Add english translation so that the project can be built again ;)
* Revert spacing in values-ru/strings.xml
---------
Co-authored-by: lm41 <lm41@lm41.xyz>
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Change Clipboard History Checkbox to TriStateCheckbox
* Fix history import error when files are already in ClipboardFileStorage
* Ahhhh yes, the nitpicks `:DD`
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
---------
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* CJK keyboard fixes, see expanded message:
- fix full-width comma
- add () to first symbol screen popups
- merge postal sign with # popups
- add = to + popup
- add full-width = to half-width popup
- fix half-width <> and single guillemets ‹›
- add check mark to square root symbol popup
- Add [] to popups
- Add pinyin characters in popup mapping
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* fix: issue with brackets, ü, and add cjk popup to Chinese preset
---------
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* implement material3 for the settings ui
* fix chip colors
* fix statusbar color
* fix aboutlibraries color
* fix alignment of subcheckboxen
* fix wrong card colors
* Update cornershape of the dropdown menu
* update ScrollableModifiers to material 3
* better card and background colors
* update jetpref
* change contrast of outlined cards
* apply suggestions
* implement suggestions
* add corners on text background in the theme editor
* apply the systembar color for the navbar
* set material you as default on android 12+
* fix card content padding
* Fix status bar color not adapting to navbar color state
* update jetpref dependency to 0.2.0-beta01
---------
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Implement backup/restore clipboard history
* Fix duplicate clipboard items when merging the same archive multiple times
* Apply suggestions
* Update UI
* Implement backup of media clipboard history items.
* Implement restore and add strings; apply suggestions
* change from popBackStack() to navigateUp()
The following color names are now available:
- surfaceBright
- surfaceDim
- surfaceContainer
- surfaceContainerHigh
- surfaceContainerHighest
- surfaceContainerLow
- surfaceContainerLowest
These colors have replaced the color name "surface", which has been removed.
See section "Surfaces" in the blog entry https://material.io/blog/material-3-compose-1-2 for more info
* Remove (most) drawables and refactor codebase to use androidx.material.icons instead
* use ImageVector for ButtonBar
* use the new vectorRessource function instead of jeticon
* resolve build error
* Switch to rc jetpref
* Apply suggestions
* Add Emoji Suggestions for a More Expressive User Experience
- Implement EmojiSuggestionProvider:
- Manages emoji suggestion tasks, including initialization and maintenance of supported emojis.
- Generates and returns suggestions based on user input and preferences.
- Updates in NlpManager to Include Emoji Suggestions:
- Adds emoji suggestions when applicable and available.
- Create Custom EmojiSuggestionCandidate Class:
- Encapsulates individual emoji suggestions for seamless integration.
Future Actions:
- Introduce Espresso tests in Florisboard to validate the emoji suggestion flow.
* Fix review comments
* Addressed review comments
- Added logic to dynamically get the locale file.
- Currently only supports English as related files are added.
- To support other locales in future, we can just add the related file.
- Added en.txt and en_US.txt and updated root.txt to match emojicon 44.1
version.
* fix random rotated images in threema
* add filter for the projection
* do not filter only for orientation request but also for every other column
* Apply the suggestion
* get the orientation of the image on insert
* emoji history visibility when locked fix (#2309)
* Add POST_NOTIFICATIONS permission
* remove deprecation warning
* add better naming for readability
* rename QabType to QuickActionBarType for better readability
* add smartbar vibrations (#2134)
* add share to clipboard
* remove strings
* Add Notification permission to startup menu (#2378)
To display Notifications on Android 13+ the app nust request permission to do so.
* remove deprecation warnings (use defaultDeserializer instead of default)
* Rework NotificationPermissionState handeling on Android 13+.
If the permission is NOT_SET (the user installed the app when the permission wasn't necessary), restart the SetupScreen or add this option to the SetupScreen.
If the permission was granted or denied, the user will not be asked again even if he revokes the permission later in the settings.
* Add comments/docs to the NotificationSetup code
* Revert "remove strings"
This reverts commit ee8a62d647.
* fix crash when InputFeedbackManager is not initialized
* apply the usual formatting nitpicks
* Add the bottom sheet to CopyToClipboardActivity
* add strings
* reformat file
* fix resource context not initialized error
* apply the patch of patrick@patrickgold.dev;
Enhance the bottom sheet with swipe gestures;
* Update app/src/main/kotlin/dev/patrickgold/florisboard/FlorisCopyToClipboardActivity.kt
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Update app/src/main/res/values/themes.xml
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
---------
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Refine Clipboard Suggestion Validation to Prevent Empty and Invalid Items
Summary:
- This PR addresses an issue where empty or invalid clipboard items that
could lead to incorrect suggestions.
- It introduces validation logic to ensure only meaningful content is suggested.
Context:
- The issue was observed when apps like KDE Connect added empty or special
character-only items to the clipboard.
- The ClipboardSuggestionProvider previously lacked validation for such cases.
Changes:
- Added validation for empty clipboard items.
- Enhanced validation to handle special characters (newlines, tabs).
- Introduced private methods and constants for improved readability and maintainability.
* Update the validation with Regex
* Remove redundant Kashida key in Persian layout
There is a Kashida(code: 1600) key inside
the popup of Dot key(code: 46). The Kashida is
a very low use character in Persian writing, so
removing it from the main layout improves the
layout usability by increasing the width of the
Space-bar.
* Add Arabic Kaf to the Persian popup
The Arabic Kaf (code: 1603) is part of the standard Persian
keyboard (ISIRI 9147), but it was missing in the current layout.
This commit adds the Arabic Kaf (code: 1603) to the popup of the Persian Kaf
(code: 1705) key, following the convention of other keys that have
both Arabic and Persian variants.
This improves the backward compatibility and accessibility of
the layout for users who need to type both scripts.
---------
Co-authored-by: Mohammad Sadegh At'hari <msadegh64@users.noreply.github.com>
There is a Kashida(code: 1600) key inside
the popup of Dot key(code: 46). The Kashida is
a very low use character in Persian writing, so
removing it from the main layout improves the
layout usability by increasing the width of the
Space-bar.
* Bug fix: expected content cannot match
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Reset suggestions when switching subtypes
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Draft: record last candidate or gesture commit position to help determine composing range
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Let the NlpProvider handle last candidate or gesture commit position when determining composing range.
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* draft: allow Enter to commit raw text for CJK
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Add full-width comma to CJK symbols
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Add minimal support for physical keyboard handling (space, enter)
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Force suggestion on for HanShapeBased to avoid user confusion
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Delete pushes lastCommitPosition back instead of resetting to -1
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* fix: delete flogDebug without import
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* fix: allow composing range to change based on subtype switch
* fix: bug where HanShapeBased force suggestion on not reflected in displayed candidates
* fix: for speed, stub out getListOfWords and getFrequencyForWord
* Polish LANGUAGEPACK.md. Add warning about phonetic input. Add translations.
* Move Chinese language pack README to another file
---------
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* feat(ime/nlp): Add `HanShapeBasedLanguageProvider`
* feat: Manually set default NLP to be HanShapeBased
* feat: Temporarily disable adding spaces
This commit should give insight into how the keyboard adds spaces, this
should then be refined into not adding a space after commiting a CJK
text suggestion
* fix(ime/nlp): Remove empty str suggest in HanShape
* feat(ime/nlp): Handle locale variants in HanShape
this should facilitate multiple layouts in the zh locale
* fix(ime/nlp): Handle query params in HanShape
This also helps performance as the DBC doesn't have to compile the query
for every string the user writes
* Space behavior QoL updates for Han shape-based layout (#1)
* Separate space behavior for zh* and latin, and allow space when there is no suggestion.
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Add checking if locale is CJK
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* refactor: Change predicate to a getter & rename
* chore: Remove TODO `supportsAutoSpace` message
* fix: Fix spaces after sugg. in non-space subtypes
* fix: Fix auto space predicate in `PhantomSpace`
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
Co-authored-by: waelwindows <waelwindows9922@gmail.com>
* Draft: editor screen exposes nlpProviders and shape-based Chinese input methods as variants
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Fix defaults for zhengma preset
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Add word tables for added input methods
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Fix: bug in zhengma preset
* Draft: support composing with special characters by delegating nlpProvider to decide composing range.
* Catch SQLite errors such as layout (locale variant) not found (e.g. using HanShapeBased with JIS)
* fixup: remove TODO
* fix: partly addresses 2101, allow searching for locale in English for phones lacking system locale IME
* Adds support for importing "language packs" (sqlite3 db for HanShapeBased for now)
* Changes language pack to zip files. Adds a basic language pack class for storing metadata of IMEs.
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Implement language pack as a type of Flex extension, and draft its import and view UI
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* fix: input method name translation
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Trim down to zhengma, quickclassic, and cangjie for the barebones Chinese shape-based pack. Polish extension user documentation.
* Fix hack to allow multiple language pack extensions to co-exist.
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
* Replace quickclassic with boshiamy
* Fix href in LANGUAGEPACKS.md
* build(nix): Clean up nix flake
* refactor: Encapsulate lanaguage pack query in HSB
* feat(ime/nlp): Implement `getListOfWords` in HSB
* feat(ime/nlp): Implement `getFrequencyForWord`
* chore: Normalize weights for freq in `han.sqlite3`
* chore(ime/nlp): Add some logging for HSB
* Update app/src/main/assets/ime/keyboard/org.florisboard.localization/extension.json
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Signed-off-by: moonbeamcelery <moonbeamcelery@proton.me>
Co-authored-by: moonbeamcelery <114041522+moonbeamcelery@users.noreply.github.com>
Co-authored-by: moonbeamcelery <moonbeamcelery@proton.me>
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Is superseded by the fact that all surfaces (except candidates and inline autofill) are now action buttons and freely reorder-able. As such there is no need anymore to distinguish between row types.
The enable pref is now a list preference with a built-in switch, this means the force-on (ignore) toggle is now a list pref, which can be used if audio/vibration is enabled via the built-in switch.
Especially fixes the splash screen for Android 7-11 devices, which utilize the SplashScreen compat library and where the app icon did not draw correctly.
Additionally an unnecessary intermediate splash screen background step has been removed, which should improve Settings UI cold startup time slightly and make it seem more snappy.
* close unused fd
dup2 doesn't close old fds, it only duplicates them.
* use `extern "C"` by block instead individual
also formatting changes for function parameters
* fix a memory leak
* cpp refactor: add utils::log() which takes log_priority
* std{out,err} logger: various improvements
- use std::thread rather than pthread
- redirect std{out,err} to stdin to avoid read() calls
- don't use global variables, for avoid spawning unneeded threads use a static function variable
- check for errors in pipe()
- use a lambda function for thread
Key notes:
- It only works in rich editors
- It intentionally does NOT work in URL, EMAIL and PASSWORD text fields
- 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
- Performance checking needs to be redone for the commitChar() method
* Add layout
* Add popup mappings and subtype presets; use QWERTY
* ...forgot the main thing
* Add Indonesian popup mapping and subtype presets
* oops
* Fix syntax issue in Indonesian subtype preset
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
This change allows us to definitely know which commit a build corresponds to. For debug builds a short commit is included within the version name, for beta and stable builds it is just an internal `BuildConfig` field.
* Added a button for switching to an IME that supports voice
* Moved voice input button to the left of clipboard
* Improve voice key position and show toast on failure
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Addition character assignments and changed TLD strings for Hungarian keyboard layouts.
These are important changes because Hungarian users mostly search accented characters where they belong.
For example, the u ú ü ű are similar shapes but u ú and ü ű are the short and long symbol pairs for two different sounds (the same is true for o ó and ö ő).
So the changes are intended to show up as follows:
- assignments for o and u is kept for compatibility with the old style and non-hungarian layouts but with hungarian language (as I use florisboard)
- assignments added for ö and ü to found their long versions (ő and ű) in the right place too (as others use florisboard)
TLD strings are changed because .hu and .eu is widely used in Hungary and .gov.hu is the official ending for government sites.
Note: the prior GMS Gradle plugin [oss-licenses-plugin](https://github.com/google/play-services-plugins/tree/master/oss-licenses-plugin) was, despite belonging to the GMS service stack, open-source. However it was a bit clunky to use and it does not keep up with the newest Gradle plugin standards, so it got replaced by Mike Penz' AboutLibraries library/plugin. This plugin allows me to define custom licenses and have an JC integration without needing to maintain much code, which is always a plus.
* Delete extension.json
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Update fa3.json
insert character "ئ" as the default character
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
This applies to apps that report that they are "raw" but in fact they are rich. This new detection works by checking if the initial selection is valid, if so then we assume that the editor is rich.
* Update tetex rule for: vowel + side char
* Update full rule for a, ă
* Add rule for e
* Update e+{c, m, n} and ê + {c, m} (2 rules)
* Add full rule for e, ă (mark and un-mark)
* Full rule for i
* Full rule o
* Full rule for u
* Add â+{c} (mark + unmark)
* Add â + {m, n}
* Add â + {p, t}
* Full â (mark + unmark)
* Add ê + {n, p, t} (mark)
* Full ê
* Full ô
* Full ơ
* Full ư
* Add full iê + {m, n, p, t, u, ng}: mark & unmark
* Add uyê + {n, t}: mark, un-mark
* Add ươ + {c, i}
* Add ươm
* Add ươ: mark & unmark
* Add full yê: {m, n, t, u, ng} - mark, unmark
* Remove useless rule: "ưow": "ươ"
* Add ach, ich, êch
* Fix Vietnamese default subtype using incorrect composer ID
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Double tap events now use a fixed value provided by the system (by default `300ms`) and do not depend on `prefs.keyboard.longPressDelay` anymore.
Additionally key repeat also uses a system value, however both the default system value and the previous hard-coded value are `50ms`, no nothing should change here for the user.
* Ukrainian popup mappings improvements
* Make all letters relevant not to override default symbols
* Update extension.json
* Remove extra domains: they look ugly
Based on information from https://en.wikipedia.org/wiki/Hebrew_keyboard
Combining characters don’t display well on their own. In the source code, they are avoided altogether by using JSON
escape codes like `\u05c2`, while in labels a placeholder letter is used. The letter ס was chosen because it is hollow,
and the letter ש must be used for its dots because other letters take the HEBREW POINT SHIN DOT on the wrong side when
combined.
* feat: Add Western Armenian layouts, popup mapping, and currency
* feat: Add Eastern Armenian layouts, popup mapping, and currency
* fix: Fix Armenian popup mapping
* fix: Add yev to Armenian popup mapping
* fix: Fix Western Armenian language tag
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* fix: Differentiate Western layout name
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* fix: Differentiate Eastern layout name
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Co-authored-by: PJTSearch <pjtsignups@gmail.com>
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
2 fixes for wrong layout in the Urdu phonetic keyboard. One was a wrong(duplicate) HTML code causing 2 different keys to output the same character. The other was a wrong label on a key resulting in 1 key label appearing twice and giving 2 different outputs.
* Fix Kurdish language not changing app language manually + some correct and improvement to kurdish layouts
* Add language mappings for Kurdish languages (ckb and ku)
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Value was changed from explicit inherit > var > *encoders to *encoders > var > explicit inherit. This speeds up the selection process, as users naturally read top to bottom and inherit is almost never used by a user anyways.
Semi-live only because you must apply a property value before the change reflects on the keyboard UI. THis is also done because instantly updating the stylesheet when using the color picker would create lag.
This bug caused some rules to be magically hidden, because they were either
incorrectly resolved as equal or the comparator returned `=` even though the
codes, groups or modes did not match at all.
Old location:
`files/{timestamp}.stacktrace`
New location:
`no_backup/unhandled_stacktraces/{timestamp}.stacktrace`
Additionally clean up some "magics" and improve code in the crash utility.
The term "assets" is not correct anymore, as these actions are used
universally and assets themselves are deprecated in favor of packages
and components.
This is done as the new theme engine now gets applied and the old
engine was used all over the place. The code base is now getting nearer
to be JC only, but it is not finished yet.
* Update TLD list for the Romanian layout.
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
* Update popup defaults for the Romanian layout.
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
* Add the missing Romanian layout punctuation marks.
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
* Remove slurs from glide dictionary
Last thing you want to do is accidentally text someone the n-word.
* Missed a spot
removed "dyke"
* Couple more
"gaylord", "homo"
* Update config.json
The ﷼ currency is more then one country currency.
* Last Update config.json
* Update config.json
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Update config.json
* Update config.json
* Create ho.json
* Update ho.json
* Create warang_citi
* Update ho.json
* Rename warang_citi to warang_citi.json
* Update config.json
* Update and rename ho.json to warang_citi.json
* Add numericRow preferred for hoc language
* Update warang_citi.json for uper case 𑣖
Added the missing line "$": "auto_text_key" for the letter 𑣖.
* Update warang_citi.json
Added popups.
* Update warang_citi.json
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
This is a step normally planned for after 0.3.14, but due to the fact
that the whole theme manager UI has to be rewritten anyways, some parts
of the planned theme rework will be done sooner than planned, saves some
work afterwards.
Removal because some of them have not been updated for ages and
because the old Junit and Mockito code messes with kotest.
The old unit tests will be reimplemented in kotest as best as possible.
* igbo.json
Igbo language character layout
* Update config.json
Updated config.json to add 'Igbo' default subType
* Update config.json
format tweak...
* Updated config.json - added igbo section
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* Add Basic Telex composer
* Add vi-VN popups
* Declare vietnamese language
Not sure about currencies
* Composer with rules supports uppercase and lowercase
* Fix composer composition in Firefox URL bar (again)
* Add fallback Telex rules
Warning, uw needs uuww
* Save a bit of visual space on Telex rule declarations
* Add missing popup
* Add z-rules
* Add files via upload
* Contributing guidelines hyperlink
* Rename western.json to western-numrow.json
* western keyboard-unchanged
* Update and rename western-numrow.json to western-additional-symbols.json
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
* feat: Add Japanaese JIS layout
* feat: Add KanaSelector and KanaSizeSelector
* test: Try out new selectors
* fix: Add new selectors to polymorphic key data list
This should help make florisboard recognize the new selectors
when used in layouts.
* fix: Implement `evaluteKana` for ComputingEvaluator
This should fix the crashes, hopefully
* feat: Rework the JIS layout
* fix: Implement basic logic for kana state
* feat: Add popups for JIS
* chore: Rename JIS specific layouts
For some reason this change broke the pop-ups
* feat: Add Kana Unicode compositor
* feat: Implement flipping small state and refactor
This should allow small kana characters to be switched over to their
normal counterparts. Also clean up and refactor `KanaUnicode` and make
the filename more appropriate
* Merge `master` to `japanese`
* chore: Add internal codes for Kana switching
This should be the starting point for getting actual keys
to switch between the kana types
* feat: Add initial modifer layout for JIS
* chore: Add keycode for ideographic CJK space
* feat: Add logic for kana switching
* chore: Update layout modifer to use kana switch
* feat: Add icon for kana switcher button
* fix: Scale the icon and update relevant entries
* feat: Begin work on kana selector popup
* Add kana attributes to keyboard state
* Add workaround for Japanese popups
* chore: Remove URL popups for JIS layout
* chore: Add codes and groups for kana switching
This commit adds the "~kana" group with groupId 4.
* feat: Use "~kana" in JIS layout.
* feat: Remove `KanaSizeSelector`.
It will be redundant when compositor handles it instead.
* feat: Add alpha code for making kana small.
This code currently uses a sentinel character to trigger
the transformation. This is not ideal as that means that users
won't be able to use that character in the keyboard. This won't
be a problem if the sentinel character is a Unicode codepoint
that cannot or would not be used normally. As such, this is just
a demonstration of the how the feature should function not it's
final implementation.
* test: Add kana small key in JIS for testing.
This is to preview changes to the kana small algorithm,
This commit should be removed from history later on.
* fix: Add `KANA_SWITCHER` to exceptionsForKeyCodes
* chore: Change "~kana" groupId to avoid conflicts
* fix: Change Kana small behaviour
* chore: Change internal kana small key code
* test: Remove kana small button from JIS layout
* feat: Add iteration marks to daku list
* feat: Allow swtiching between kana modifiers
This allows users to add/remove dakuten/handakuten/small
from kana and swtiching between the three. This is helpful
as it allows users to quickly rectify mistakes. It also lays
the groundwork for the future 12 flick layout
* feat: Change Kana swticher behaviour on katakana
Makes katakana switch over to hiragana immediately. As half-width
katakana is not usually used. The kana-switcher pop-up suffices
switching over to it when needed.
A potential downside to doing it like this making the half-width
katakana more hidden and less likely to be used.
* Add CJK_SPACE special behavior to input logic
* feat: Add CJK punctuation to popups and JIS layout
* feat: Add CJK punctuation symbols
* feat: Add CJK row numbers
* feat: Add postal mark symbol in CJK symbols
And change kana small internal code. Used to be set to
postal mark with face. Now set to geta mark.
* chore: Set default numeric row to CJK for JIS
* feat: Add modifiers layouts for CJK punctuation
* chore: Add latin half-width braces to CJK layout
* fix: Change composer behaviour on empty string
* chore: Add non-composing (han)daku to JIS popups
* fix: Change composer behaviour to be consistent
Also clean up the code a little.
* fix: Change composer empty string behaviour
* feat: Add WidthSelector and migrate half_kata Kana
This adds width selector for all languages instead of tying it down
to only `KanaSelector`. As such `KanaSelector`'s `half_kata`' field
is obsolete.
* fix: Fix bug in composing logic
* fix: Implement width properly and remove half_kata
* refactor: Clean up JIS layout JSON
* fix: Change JIS punctuation to use width_selector
* Improve half width implementation / Clean-up code base
* fix: Remove Half-kata from kana switcher cycle.
* feat: Add char width keycodes and implementation
* feat: Add half-width forms to symbols/cjk layouts
* feat: Add char width switcher to CJK mod layouts
Icons are yet to be added, so the labels will be strings for now
* feat: Add half-width forms for symbols2/cjk layout
* chore: Add more appropriate CJK chars to symbols2
* feat: Add icons for character width switching.
Note that `ic_keyboard_char_width_full` and `ic_keyboard_char_width_half`
are just copies of `ic_keyboard_char_width_switcher` for now.
* feat: Add relevant entries to show char width icons
* chore: Update the character width pop up icons.
And rename the internal names so that they match up with kana_switcher.
* fix: Make char width swticher icon toggle instead
* fix: Make character width icons more consistent.
* chore: Remove reference to char_width_switcher icon
* test: Iest code for why the composer is not working
* test: Remove test code for KanaUnicode
This reverts commit f6ae545183.
* fix: Correct small kana association for E and U
* test: Remove test code for KanaUnicode
This reverts commit f6ae545183.
* fix: Don't add small sentinel on non small char.
* fix: Correct small ya entry in KanaUnicode
* feat: Make kana switcher icon toggle between modes
* fix: Update svg colors to fit with other vectors
* Update app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt
Co-authored-by: Patrick Goldinger <patrick.goldinger@pm.me>
* chore: Fix author name
* chore: Fix author name in CJK numbers
* chore: Fix indentation on author field
Co-authored-by: Waelwindows <waelwindows@hotmail.com>
Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
Looks like I forgot to clone images when the internal clipboard is off
but the clipboard history is still on. We have to own the items in the
clipboard history since authorization to read them is temporary.
This allows for selectors to be used within popups as well. Is also the solid foundation for further development with emojis and other keyboards than the text keyboard.
The merge of the hints depends on the underlying main key. Especially,
hints should only be shown for character keys, and if the hint is
identical to the main key, it should not be added at all. Since the
actual main key is only evaluated on demand with TextKey#compute, all
corresponding hint merge logic needs to be moved there too.
A new configuration was introduced to allow showing the popup keys of
the hint keys of a given character key in addition the character key's
normal popup keys.
The previous change allowed both number and symbol hint to be merged at
the same time, with the number hint being shown as popup only.
Therefore, when allowing the popups of the hint key to be shown as
popups, both hint keys need to be taken into account.
To ensure this and also take into account the separate key hint
settings for number and symbol hints, the MutablePopupSet was extended
to contain both hint keys as well as both lists of popup keys in
addition to the existing main key and relevant list. The logic that
chooses the key prioritization when rendering the popup has now also
been moved from the PopupManager to the PopupSet.
For performance, the prioritized collection of popup keys is generated
once and then cached for a given configuration in a new PopupKeys
object. This class now has the collection semantics previously present
in the PopupSet class. Different from before, the PopupKeys object now
explicitly contains the prioritized keys (those that should be shown
directly above the original key for easier reach) in order of priority.
The PopupManager now only needs to take the number of prioritized keys
(maximum 3: main key, number hint, symbol hint) when calculating the
key positions in the popup.
To allow symbol layouts with the same or more rows as the character
layout to be hinted more consistently, the hinting of the numeric row
is split from the rest of the symbol layout.
If enabled, the numeric row hinting is always done in the first row.
If an actual numeric row is enabled as well, no additional numeric
hints will be shown (as they are only added to CHARACTER type keys).
The symbol hinting is now bottom-aligned: hints from the last symbol
row are shown in the last character row.
If the symbol layout (excluding numeric row) has at least the same
number of rows as the character layout, the numerical row is disabled
and numerical hinting is enabled, the symbol keys take precedence. The
numeric hints are instead added as additional popup characters.
Instead of creating an EmojiKeyView for every emoji, you can use a
RecyclerView to only create the ones which are visible on screen, and
then reuse them later.
To make the switch from character to symbol layer more consistent,
a neo specific symbol modifier layout was added. This also allows
overriding the comma and full stop with their layer 3 equivalents.
The default de locale already defines a lot of extended popups which
do not match the Neo2 / Bone layout logic. Adding a locale variant
allows overriding those defaults.
As the Locale class does not support arbitrary country keys, the new
locale was chosen as a variant of de_DE with variant name "neobone".
There is no deep meaning in the name, it is only the concatenation of
neo and bone, and according to the Javadoc of Locale, a valid variant
must have either 5 to 8 characters or start with a number.
* For now, only layers 1, 2 and 3 are supported.
* Layer 2 is reachable via caps, apart from number row, comma and full
stop (which I think are easier to use if not affected by caps).
Instead, the relevant characters are added as popups.
* Layer 3 is set up as a separate neo2 symbol / number row layer
The overall layout is kept as much as possible, with the following
exceptions:
* The number row contains only numbers and minus sign, while circumflex
and grave accents are not included.
* To not overcrowd the layout and have the same number of keys for
first and second row, the acute accent is not included as separate
key but can be reached as additional popup to sharp s.
* Comma and full stop are not put between m and j (or z and k
respectively), because the backspace takes up too much space for both
keys to be put in this row.
* Also, having comma and full stop on the same height with the space
key makes the layout more consistent with the existing layouts and
the special usage as ~left and ~right keys.
currency is wrong
code is plugged at the wrong place
input is ignored sometimes
there is reflection for what seems to be no reason
I know, this is just a test and this will either be done again (properly) on another branch or discarded altogether
With this rearrange, when Accent is prioritized in hinted symbols, آ is the first option in the popup.
آ is one of the most used alphabets in Persian language.
Switched out every String for a CharArray. Also got rid of the ideal
gesture cache. It had a minimal impact on performance and was taking up
a ridiculous amount of memory.
Increased default preview time, and added options to adjust it.
Reduced number of points on the gesture drawn.
Fixed some teeny tiny bugs which caused gesture typing to not work.
Namely, a crash that occured when a word starts and end on the same
letter (due to incorrect behaviour of resample) and also an issue where
gestures weren't reset while typing
* switch positions between emojis and one hand keys
* new theme
* new theme
* Create gboard_like_day.json
* Rename gboard_like_day.json to gboard_day.json
* Changing label and name's value
* Changing label and name's value
Co-authored-by: Karim <52888633+itskarim@users.noreply.github.com>
Co-authored-by: Kareem <d.abdelkarim@outlook.com>
The KeyView now better caches and refreshes the theme of the key
according to its current state. Also, the Theme.getAttr() method
has been improved (both in terms of functionality and in performance).
Overdraw caused high CPU usage (~25-50% of CPU when open but no
touch events). Now the CPU is only used to process input events and
execute any follow up events. If FlorisBoard is nw left open without
using it, CPU usage goes down to 0%.
This rework is a very important one, as it solves many conflicts which
arised while implementing special keyboard layouts like dvorak, etc.
With the new data structure, popup keys carry around way less baggage,
but at the same time the structure around the keys have improved a lot and provide more useful information for the popup manager.
This includes that smart hint/accent prioritization is now working
theoretically, now it just needs to be defined correctly in the
json files.
Also the layout and extended popup json files got a authors field
which indicates who the author is. At the current time not very
important, but this is a small step in modularization into assets,
which are the very base of extension support (but that's still a
looong way).
Also some parts of the LayoutManager got a code cleanup, which makes
especially the merging of popups and hints better readable.
isAsciiCapable and isEmojiCapable have no real use in FlorisBoard,
and as the Android InputMethodSubtype class will never be used,
there's no reason to keep these in. Removing them lets the config
look more clean.
- Smartbar now doesn't show in number, phone and phone2 layouts.
- Remove "show instead" preference as it does not do anything anymore.
- Change one-handed icon to a smartphone, which should improve clarity.
- Number row is now not part of the Smartbar anymore, but is an
extension of the character layout, meaning that it is possible to
show both a number row and the Smartbar.
- The Smartbar can now be disabled in the preferences.
- Adjust height calculation when number row is shown.
- Fix Smartbar not applying calculated height correctly.
- The Smartbar XML layout has been completely changed and is now
pretty solid.
- SmartbarManager's tasks have been split up: UI related things
and the management of the state are now managed within the
SmartbarView, setting the values and listening to events is now done within TextInputManager. Removing SmartbarManager was an important
step because the code and logic was just a pure mess.
- SmartbarView is now responsible to manage the state, show and hide
features based on various parameters from the keyboard core.
- Keyboard height can - besides of the preset values - be set between
50% and 150%
- Key font size range has been extended to 50%-150%
- Key font size multiplier now affects the popup as well
- Key popup size scales with the keyboard height value
- Fix key size algorithm not working on xxhdpi screens
- Improve key popup manager backend
• Give your bug report a good name (no generics like "Error" or "Crash"), so others can easily identify the topic of your issue.
• Describe the bug in a short but concise way.
• If you have a screenshot or screen recording of the bug, link them at the end of this issue.
• Also make sure to fill out the environment information. This info is valuable when trying to fix your described bug.
- type:textarea
id:description
attributes:
label:Short description
description:Describe the bug in a short but concise way.
validations:
required:true
- type:textarea
id:reproduce
attributes:
label:Steps to reproduce
value:|
1. Go to '…'
2. Click on '…'
3. Scroll down to '…'
4. See error
validations:
required:true
- type:input
id:florisversion
attributes:
label:FlorisBoard Version
placeholder:e.g. 0.X.X
validations:
required:true
- type:dropdown
id:installsource
attributes:
label:Install Source
options:
- Google PlayStore
- F-Droid
- GitHub
validations:
required:true
- type:input
id:device
attributes:
label:Device
placeholder:e.g. OnePlus 7T
validations:
required:true
- type:input
id:androidversion
attributes:
label:Android
placeholder:e.g. 10, Stock
validations:
required:true
- type:checkboxes
id:checklist
attributes:
label:"Checklist"
options:
- label:"I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
required:true
- label:"I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
required:true
- label:"I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise."
description:Create a report with a generated crash log attached to help FlorisBoard improve
labels:
- "bug"
body:
- type:markdown
attributes:
value:|
Thank you for your help in making FlorisBoard better!
Guide to a good crash-report:
• Please search existing bug/crash reports to avoid creating duplicates.
• Give your crash report a good name (no generics like "Error" or "Crash"), so others can easily identify the topic of your issue.
• Describe what you were doing what could've led to the crash and whether the crash is random or reproducible.
- type:textarea
id:description
attributes:
label:Short description
description:Describe the bug in a short but concise way.
validations:
required:true
- type:textarea
id:reproduce
attributes:
label:Steps to reproduce
value:|
1. Go to '…'
2. Click on '…'
3. Scroll down to '…'
4. See crash
validations:
required:true
- type:textarea
id:crashlog
attributes:
label:Crash log
description:Paste the generated crash log below
validations:
required:true
- type:checkboxes
id:checklist
attributes:
label:"Checklist"
options:
- label:"I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
required:true
- label:"I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
required:true
- label:"I have taken the time to fill in all the required details. I understand that the crash report will be dismissed otherwise."
Thank you for your help in making FlorisBoard better!
Guide to a good feature-request:
• Please search existing proposals to avoid creating duplicates.
• If you have multiple ideas which are not directly connected to other, file a new issue for each idea. This makes it easier to implement your proposals.
• Describe your idea in a short but concise way.
• If you have any examples, e.g. screenshots or other keyboards have the proposed feature implemented, feel free to post them after your description.
- type:textarea
id:feature
attributes:
label:Feature idea
description:Please explain your idea in a precise way.
validations:
required:true
- type:checkboxes
id:checklist
attributes:
label:"Checklist"
options:
- label:"I made sure that there are *no existing issues* - [open](https://github.com/florisboard/florisboard/issues) or [closed](https://github.com/florisboard/florisboard/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
required:true
- label:"I have read and understood the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md)."
required:true
- label:"I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise."
We detected illegal changes that disobey the [contribution guidelines](https://github.com/florisboard/florisboard/blob/main/CONTRIBUTING.md#translation). This is a kind reminder that pull requests must not contain translated `strings.xml` files, as those are exclusively managed from Crowdin.
<optionname="notice"value="Copyright (C) &#36;originalComment.match("Copyright \(C\) (\d+)", 1, "-", "&#36;today.year")&#36;today.year The FlorisBoard Contributors 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."/>
d="m 96.244398,34.438502 -0.434237,0.0066 c -20.01657,0.256595 -36.186415,16.58873 -36.186415,36.666707 v 6.506976 C 79.890332,73.322449 95.279427,55.74901 96.244398,34.440694 Z"
d="m 12.68887,25.874383 0.149132,0.0022 c 4.506853,0.05702 8.996162,0.787328 13.290282,2.168991 11.959063,3.851112 21.891685,12.759549 27.168322,24.058483 l 0.973744,2.083461 0.969357,-2.085654 C 62.347596,36.789522 77.776168,26.104661 95.702698,25.876577 l 0.149133,-0.0022 c 0.291684,2.098811 0.443009,4.241486 0.445201,6.421443 l -0.510995,0.0066 C 74.600536,32.576546 57.485458,49.860493 57.485458,71.111788 v 6.917088 c -1.048309,0.155711 -2.046178,0.188608 -3.079135,0.192995 h -0.13378 c -1.068047,0 -2.144867,-0.07238 -3.212915,-0.219313 v -6.89077 c 0,-21.251295 -17.117271,-38.535242 -38.300578,-38.809382 l -0.510997,-0.0066 c 0,-2.147061 0.149133,-4.296315 0.445203,-6.421443 z"
d="m 101.9772,99.716601 c 0,-2.46287 -1.997925,-4.462992 -4.460795,-4.462992 H 85.243728 c -2.460676,0 -4.460798,1.997929 -4.460798,4.462992 v 3.822599 c 0,2.46068 1.997928,4.4608 4.460798,4.4608 h 12.272677 c 2.460676,0 4.460795,-1.99793 4.460795,-4.4608 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_5"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 78.620517,84.818763 c 0,-2.460676 -1.997928,-4.460798 -4.460797,-4.460798 h -6.096864 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.096864 c 2.460676,0 4.460797,-1.997929 4.460797,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_6"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 61.450612,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_7"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 27.11738,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.096863 c -2.460676,0 -4.460798,1.997929 -4.460798,4.460798 v 3.824795 c 0,2.460676 1.997929,4.460798 4.460798,4.460798 h 6.096863 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_8"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 95.78823,84.818763 c 0,-2.460676 -1.997929,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.462869,0 -4.462991,1.997929 -4.462991,4.460798 v 3.824795 c 0,2.460676 1.997928,4.460798 4.462991,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_9"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 21.038062,69.923119 c 0,-2.46287 -1.997928,-4.462991 -4.460797,-4.462991 h -6.09467 c -2.4606765,0 -4.4607984,1.997929 -4.4607984,4.462991 v 3.822601 c 0,2.460676 1.9979288,4.460798 4.4607984,4.460798 h 6.09467 c 2.460676,0 4.460797,-1.997928 4.460797,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_10"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 101.9772,69.923119 c 0,-2.46287 -1.997925,-4.462991 -4.460795,-4.462991 h -6.09467 c -2.460676,0 -4.460797,1.997929 -4.460797,4.462991 v 3.822601 c 0,2.460676 1.997928,4.460798 4.460797,4.460798 h 6.09467 c 2.460676,0 4.460795,-1.997928 4.460795,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_11"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 44.282899,84.818763 c 0,-2.460676 -1.997928,-4.460798 -4.460798,-4.460798 h -6.09467 c -2.462869,0 -4.462991,1.997929 -4.462991,4.460798 v 3.824795 c 0,2.460676 1.99793,4.460798 4.462991,4.460798 h 6.09467 c 2.460676,0 4.460798,-1.997929 4.460798,-4.460798 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_12"
style="stroke-width:2.19311"/>
<path
fill="#fe9801"
d="m 27.21607,99.716601 c 0,-2.46287 -1.997928,-4.462992 -4.460798,-4.462992 H 10.482595 c -2.4606765,0 -4.4607984,1.997929 -4.4607984,4.462992 v 3.822599 c 0,2.46068 1.9979288,4.4608 4.4607984,4.4608 h 12.272677 c 2.460676,0 4.460798,-1.99793 4.460798,-4.4608 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_13"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 83.756795,67.041365 c 0.655742,0.776363 1.054889,1.783003 1.054889,2.881754 v 3.822601 c 0,2.460676 -1.997928,4.460798 -4.460798,4.460798 h -6.096863 c -1.557112,0 -2.927809,-0.798293 -3.723911,-2.006701 4.91258,-2.307158 9.377765,-5.414803 13.226683,-9.158452 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_14"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 24.529503,66.738714 c 3.796284,3.76558 8.20664,6.919282 13.066585,9.263722 -0.774169,1.320257 -2.210661,2.204082 -3.848919,2.204082 h -6.096862 c -2.460676,0 -4.460798,-1.997928 -4.460798,-4.460798 v -3.822601 c 0,-1.247883 0.510996,-2.375144 1.337801,-3.186598 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_15"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 14.015705,51.362778 c 1.868535,4.322632 4.359915,8.346999 7.366677,11.950289 h -4.822663 c -2.460676,0 -4.460798,-1.997928 -4.460798,-4.460797 v -3.824795 c 0,-1.517637 0.758819,-2.85763 1.916784,-3.664697 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_16"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 94.369284,51.764118 c 0.87286,0.813646 1.418946,1.975997 1.418946,3.263357 v 3.824795 c 0,2.460676 -1.997929,4.460797 -4.460798,4.460797 h -4.116479 c 2.897106,-3.471703 5.313921,-7.355711 7.156137,-11.548949 z"
stroke-linejoin="round"
fill-rule="evenodd"
id="path_17"
style="stroke-width:2.19311"/>
<path
fill="#ffffff"
d="m 78.782808,99.819677 c 0,-2.432165 -1.971611,-4.40597 -4.403777,-4.40597 H 33.738397 c -2.432166,0 -4.405969,1.973805 -4.405969,4.40597 v 3.774353 c 0,2.43217 1.973803,4.40378 4.405969,4.40378 h 40.640634 c 2.432166,0 4.403777,-1.97161 4.403777,-4.40378 z"
First off, thanks for considering contributing to FlorisBoard!
Thanks for considering contributing to FlorisBoard!
There are several ways to contribute to FlorisBoard. This document provides some
general guidelines for each type of contribution.
There are several ways to contribute to FlorisBoard. This document provides some general guidelines for each type of contribution.
## Giving general feedback
The FlorisBoard community is international, as such we require all contributions, including issues, pull requests, and participation in the Matrix chat to be in English and follow the [code of conduct](https://github.com/florisboard/florisboard/blob/main/CODE_OF_CONDUCT.md). Contributions not adhering to these requirements will be dismissed. Thanks for making the FlorisBoard community an inclusive and safe space for everyone!
Either use the review function within Google Play or email me at
[florisboard@patrickgold.dev](mailto:florisboard@patrickgold.dev). I
love to hear from you!
## Non-code contributions
## Adding a new feature or making large changes
### Translations
If you intend to add a new feature or to make large changes, please discuss this
first through a proposal on GitHub. Discussing your idea enables both you and the
dev team that we are on the same page before you start on working on your change.
If you have any questions, feel free to ask for help at any time!
To make FlorisBoard accessible in as many languages as possible, the platform [Crowdin](https://crowdin.florisboard.patrickgold.dev) is used to crowdsource and manage translations. The list of languages in Crowdin covers a good range of languages, but feel free to email [florisboard@patrickgold.dev](mailto:florisboard@patrickgold.dev) to request a new language.
## Adding a new keyboard layout / dictionary for locale
> [!IMPORTANT]
> This is the only source of translations - **PRs that add/update translations are not accepted.**
As FlorisBoard is currently in alpha stage, things might change drastically. This
also includes the config scheme of keyboard layouts. To prevent incompatible
configs because some features and structures may change, please do not add this
kind of content yet. As FlorisBoard's state progresses and its core stabilizes,
you will be able to add keyboard layouts.
### Bug reporting
## Translating FlorisBoard
Allows us to see where FlorisBoard has flaws and should be improved to maximize stability and user experience. To make this process as smooth as possible, please use the pre-made [bug report template](https://github.com/florisboard/florisboard/issues/new?template=bug_report.yml). This makes it easy for us to understand what the bug is and how to solve it.
Before starting to translate, when adding a new translation please file
an issue stating that you want to translate FlorisBoard into a language.
Once this gets approved you can start translating. When updating an
already existing translation file you can just send a PR directly.
#### Capturing error logs
If you are not familiar with PRs, check out this guide:
Logs are captured by FlorisBoard's crash handler, which gives you the ability to copy it to the clipboard and paste it in the crash report [issue template](https://github.com/florisboard/florisboard/issues/new?template=crash_report.yml). This is the preferred way to capture logs.
Notes for tips below:
- Replace `<language>` with the language you want to add
- Replace `<code>` with the ISO 639-1 code of the language you want to
add
([List of codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes))
Alternatively, you can also use ADB (Android Debug Bridge) to capture the error log. This is recommended for experienced users only.
### Tips when adding a new translation
### Feature proposals
- To add the new translation file, navigate to `app/src/main/res/values`
and copy the file `strings.xml` into the folder
`app/src/main/res/values-<code>` (you have to create this folder)
- Translate only the phrases inside the brackets, leave the name
- When finished translating, commit your changes locally, as the commit
message use `Add <language> translation`
- Push your change(s) and create the PR. When everything checks out, it
will get accepted.
Use the feature proposal [issue template](https://github.com/florisboard/florisboard/issues/new?template=feature_request.yml) to suggest a new idea or improvement for this project.
### Tips when updating a translation
### Feedback
- To update a translation, check the `strings.xml` in
`app/src/main/res/values` for newly added strings and add them to the
translation file in `app/src/main/res/values-<code>`
- When finished translating, commit your changes locally, as the commit
message use `Update <language> translation`
- Push your change(s) and create the PR. When everything checks out, it
will get accepted.
You can [give general feedback](https://github.com/florisboard/florisboard/discussions/new?category=feedback) directly here on GitHub. This is the preferred way to give feedback, as it allows not only for me to read and respond to feedback, but for everyone in this community.
## Bug reporting
## Code contributions
This kind of contribution is the most important, as it tells where
FlorisBoard has flaws and thus should be improved to maximize stability
and user experience. To make this process as smooth as possible, please
use the premade [issue template](.github/ISSUE_TEMPLATE/bug_report.md)
for bug reporting. This makes it easy for us to understand what the bug
is and how to solve it.
You are always welcome to contribute new features or work on existing issues, there are a lot to choose from :) It is always best to quickly ask if someone is already working on this issue to avoid duplicate issues.
### Capturing ADB debug logs
> [!NOTE]
> If you intend to implement a bigger feature please coordinate with us so we can prevent that there's a major difference in expected implementation.
Logs are captured by FlorisBoard's crash handler, which gives you the
ability to copy it to the clipboard and paste it in GitHub.
If you are overwhelmed by the code don't hesitate to ask for help in the [dev chat](https://matrix.to/#/#florisboard-dev:matrix.org) or the discussions tab! Some issues are also marked as good first issue, which are easy to do tasks.
### System requirements for development
- Desktop PC with Linux or WSL2 (Windows)
- MacOS and Windows without WSL2 probably works too however there's no official support
- At least 16GB of RAM (because of Android Studio / IntelliJ)
- The following tools must be installed:
- Android Studio (bundles SDK and NDK) or IntelliJ with Android and Compose plugin
- Java 17
- CMake 3.22+
- Clang 15+
- Git
- [Rust](https://www.rust-lang.org/tools/install)
- Utilities (optional)
- Python 3.10+
- Bash, realpath, grep, ...
### Manual build without Android Studio
If you want to manually build the project without Android Studio you must ensure that the Android SDK and NDK are properly installed on your system. Then issue
```./gradlew clean && ./gradlew assembleDebug```
and Gradle should take care of every build task.
## Donating
You can also show your support by buying me a coffee, so I can stay up all night and chase away bugs or add new cool stuff :)
Default barebones Chinese shape-based language pack which are always available.
Please download the [full Chinese language pack](#full-chinese-shape-based-pack) to access input methods such as wubi, quick cangjie, and other versions of these input methods.
This pack is released under the same license as Florisboard.
## Full Chinese shape-based pack
Chinese shape-based language pack based on fcitx5-table-extra.
This pack is released under a separate license. Please visit to download: [TODO: add link to release page](https://)
- **Input methods that include pinyin, jyutping, zhuyin as (auxiliary) functions are only provided for convenience. Currently, FlorisBoard lacks phonetic input algorithms. These functions currently have poor user experience and are not recommended for daily use.**
The following input methods are included in this language pack:
- 中文 (中国) [T9笔画] / Chinese (China) [T9]
- 中文 (中国) [五笔98] / Chinese (China) [WUBI98]
- ~中文 (中国) [五笔98-拼音混打] / Chinese (China) [WUBI98PINYIN]~
- 中文 (中国) [五笔98-单字] / Chinese (China) [WUBI98SINGLE]
- 中文 (中国) [五笔-大字库] / Chinese (China) [WUBILARGE]
- 中文 (中国) [郑码] / Chinese (China) [ZHENGMA]
- 中文 (中国) [郑码-大字库] / Chinese (China) [ZHENGMALARGE]
- ~中文 (中国) [郑码-拼音混打] / Chinese (China) [ZHENGMAPINYIN]~
- ~中文 (香港) [廣東拼音] / Chinese (Hong Kong) [CANTONESE]~
- ~中文 (香港) [港式廣東話] / Chinese (Hong Kong) [CANTONHK]~
- 中文 (香港) [輕鬆-大字庫] / Chinese (Hong Kong) [EASYLARGE]
- ~中文 (香港) [粤語拼音-表格] / Chinese (Hong Kong) [JYUTPINGTABLE]~
- 中文 (香港) [速成三代] / Chinese (Hong Kong) [QUICK3]
- 中文 (香港) [經典速成] / Chinese (Hong Kong) [QUICKCLASSIC]
- 中文 (香港) [筆順五碼] / Chinese (Hong Kong) [STROKE5]
- 中文 (台灣) [行列] / Chinese (Taiwan) [ARRAY30]
- 中文 (台灣) [行列-大字库] / Chinese (Taiwan) [ARRAY30LARGE]
- 中文 (台灣) [嘸蝦米] / Chinese (Taiwan) [BOSHIAMY]
- 中文 (台灣) [倉頡三代] / Chinese (Taiwan) [CANGJIE3]
- 中文 (台灣) [倉頡五代] / Chinese (Taiwan) [CANGJIE5]
- 中文 (台灣) [倉頡-大字庫] / Chinese (Taiwan) [CANGJIELARGE]
<p><i>Major versions only</i><br><br>Updates are more polished, new features are matured and tested through to ensure a stable experience.</p>
</td>
<td valign="top">
<p><i>Major + Alpha/Beta/Rc versions</i><br><br>Updates contain new features that may not be fully matured yet and bugs are more likely to occur. Allows you to give early feedback.</p>
**Google Play**: Join the [FlorisBoard Test Group](https://groups.google.com/g/florisboard-public-alpha-test), then visit the [testing page](https://play.google.com/apps/testing/dev.patrickgold.florisboard). Once joined and installed, updates will be delivered like for any other app. ([Store entry](https://play.google.com/store/apps/details?id=dev.patrickgold.florisboard))
_B. Google Play Public Alpha Test_:
</p>
<p>
You can join the public alpha test programme on Google Play. To become a
tester, follow these steps:
1. Join the
[FlorisBoard Public Alpha Test](https://groups.google.com/g/florisboard-public-alpha-test)
Google Group to be able to access the testing programme.
FlorisBoard is currently available through Google Play and IzzySoft's
repo for F-Droid, but is currently in the inclusion process for the main
F-Droid repo. Planned proper F-Droid release is version 0.3.0.
**Google Play**: Join the [FlorisBoard Test Group](https://groups.google.com/g/florisboard-public-alpha-test), then visit the [preview testing page](https://play.google.com/apps/testing/dev.patrickgold.florisboard.beta). Once joined and installed, updates will be delivered like for any other app. ([Store entry](https://play.google.com/store/apps/details?id=dev.patrickgold.florisboard.beta))
* [x] Landscape orientation support (needs tweaks)
* [ ] Tablet screen support (0.4.0)
**Manual**: Download and install the APK from the release page.
### Layouts
* [x] Latin character layouts (QWERTY, QWERTZ, AZERTY, Swiss, Spanish,
Norwegian, Swedish/Finnish, Icelandic, Danish); more coming in
future versions
* [x] Non-latin character layouts (Persian)
* [x] Adapt to situation in app (password, url, text, etc. )
* [x] Special character layout(s)
* [x] Numeric layout
* [x] Numeric layout (advanced)
* [x] Phone number layout
* [x] Emoji layout (tweaks: 0.3.0)
* [x] Emoticon layout
* [ ] Kaomoji layout (0.3.0)
</p>
</td>
</tr>
</table>
### Preferences
* [x] Setup wizard
* [x] Preferences screen
* [x] Customize look and behaviour of keyboard
* [x] Theme presets (currently only day/night theme)
* [x] Theme customization
* [ ] Theme import/export (0.4.0 or 0.5.0)
* [x] Subtype selection (language/layout)
* [x] Keyboard behaviour preferences
* [ ] Text suggestion / Auto correct preferences (0.4.0 or 0.5.0)
* [x] Gesture preferences (0.3.0)
Beginning with v0.7 FlorisBoard will enter the public beta on Google Play.
### Composing suggestions (0.4.0 or 0.5.0)
* [ ] Auto suggest words from precompiled dictionary
* [ ] Auto suggest words from user dictionary
* [ ] Auto suggest contacts
* [ ] Multilingual typing
## Highlighted features
- Integrated clipboard manager / history
- Advanced theming support and customization
- Integrated extension support (still evolving)
- Emoji keyboard / history / suggestions
### Other useful features
*[x] One-handed mode
* [x] Clipboard/cursor tools
* [x] Integrated number row / symbols in character layouts (0.3.0)
* [ ] Floating keyboard (0.4.0)
* [x] Gesture support (0.3.0)
* [ ] Glide typing (0.4.0)
* [x] Full integration in IME service list of Android (xml/method)
(integration is internal-only, because Android's default subtype
implementation not really allows for dynamic language/layout
pairs, only compile-time defined ones)
* [ ] Description and settings reference in System Language & Input
* [ ] (dev only) Generate well-structured documentation of code
* [ ] ...
> [!IMPORTANT]
>Word suggestions/spell checking are not included in the current releases
> and are a major goal for the v0.6 milestone.
Note:
Feature roadmap: See [ROADMAP.md](ROADMAP.md)
(?) = not sure if it will be implemented
## Contributing
Want to contribute to FlorisBoard? That's great to hear! There are lots of
different ways to help out, please see the [contribution guidelines](CONTRIBUTING.md) for more info.
(0.x.0) = planned version when feature will be implemented.
## Addons Store
The official [Addons Store](https://beta.addons.florisboard.org) offers the possibility for the community to share and download FlorisBoard extensions.
Instructions on how to publish addons can be found [here](https://github.com/florisboard/florisboard/wiki/How-to-publish-on-FlorisBoard-Addons).
Many thanks to Ali ([@4H1R](https://github.com/4H1R)) for implementing the store!
> [!NOTE]
> During the initial beta release phase, the Addons Store _will_ only accept theme extensions.
> Later on we plan to add support for language packs and keyboard extensions.
## List of permissions FlorisBoard requests
Please refer to this [page](https://github.com/florisboard/florisboard/wiki/List-of-permissions-FlorisBoard-requests)
to get more information on this topic.
## Used libraries, components and icons
* [Google Flexbox Layout for Android](https://github.com/google/flexbox-layout)
by [google](https://github.com/google)
* [AndroidX libraries](https://github.com/androidx/androidx) by
[Android Jetpack](https://github.com/androidx)
* [AboutLibraries](https://github.com/mikepenz/AboutLibraries) by
[mikepenz](https://github.com/mikepenz)
* [Google Material icons](https://github.com/google/material-design-icons) by
[google](https://github.com/google)
* [Moshi JSON library](https://github.com/square/moshi) by
[square](https://github.com/square)
* [ColorPicker preference](https://github.com/jaredrummler/ColorPicker) by
[Jared Rummler](https://github.com/jaredrummler)
[Google](https://github.com/google)
* [JetPref preference library](https://github.com/patrickgold/jetpref) by
[patrickgold](https://github.com/patrickgold)
* [KotlinX coroutines library](https://github.com/Kotlin/kotlinx.coroutines) by
[Kotlin](https://github.com/Kotlin)
* [KotlinX serialization library](https://github.com/Kotlin/kotlinx.serialization) by
[Kotlin](https://github.com/Kotlin)
Many thanks to [Nikolay Anzarov](https://www.behance.net/nikolayanzarov) ([@BloodRaven0](https://github.com/BloodRaven0)) for designing and providing the main app icons to this project!
## License
```
Copyright 2020 Patrick Goldinger
Copyright 2020-2025 The FlorisBoard Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -136,3 +128,12 @@ 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.
```
Thanks to [The FlorisBoard Contributors](https://github.com/florisboard/florisboard/graphs/contributors) for making this project possible!
<!-- BEGIN SECTION: obtainium_links -->
<!-- auto-generated link templates, do NOT edit by hand -->
This feature roadmap intents to provide transparency to what is planned to be added to FlorisBoard in the foreseeable future. Note that there are no ETAs for any version milestones down below, experience has shown these won't hold anyway.
Each major milestone has associated alpha/beta releases, so if you are interested in previewing features quicker, keep an eye out! Each major 0.x release has also patch releases after the initial major release, which will be published on both the stable and preview tracks.
## 0.5 (currently in development)
> [!NOTE]
> The milestone 0.5 was split, thus the word suggestions now come with version 0.6. The old version 0.6 has been moved down and is now 0.7. The time it takes to implement word suggestions will not change, but we can now release the new theme editor earlier, which would otherwise lie dormant.
- [ ] Theme rework part II / Snygg v2
- [x] See https://github.com/florisboard/florisboard/pull/2855
- [x] Spaces in URI bug (See https://github.com/florisboard/florisboard/issues/2898)
- [ ] Rework cache manager (See https://github.com/florisboard/florisboard/issues/2870)
- [x] Re-add time based theme switching (See https://github.com/florisboard/florisboard/pull/2977)
- [ ] Add support for any remaining new features introduced with Android 13 / 14
- [ ] Proper physical keyboard support (See https://github.com/florisboard/florisboard/issues/2815)
- [x] Raise minimum required Android version from Android 7 (SDK level 24) to Android 8 (SDK level 26)
## 0.6
- [ ] Implement predictive text support / spell checking
- [ ] Add new extension type: Language Pack
- Basically groups all locale-relevant data (predictive base model, emoji suggestion data, ...)
in a dynamically importable extension file
## k3lp
> [!NOTE]
> The development of k3lp is not tied to a florisboard version and takes place on [codeberg.org](https://codeberg.org/k3lp/k3lp) simultaneously.
- [ ] New keyboard layout engine + file syntax based on the upcoming Unicode Keyboard v3 standard
- [ ] Add Tablet mode / Optimizations for landscape input based on new keyboard layout engine
## 0.7+
> [!NOTE]
> From 0.6 onwards we plan to have more stable 0.X releases but with at most one large feature per release, thus having a much quicker iteration of new features on the stable track, which is a benefit for everyone involved.
- [ ] Add floating keyboard mode
- [ ] New text processing logic
- [ ] Complete rework of the Emoji panel
- [ ] Emoji search
- [ ] Fully scrollable emoji list (soft category borders)
- [ ] Side scrollable emoji list (swipe for next category)
- [ ] More granular theming options
- [ ] Layout customization (e.g. placement of category buttons)
- [ ] Maybe: consider upgrading to emoji2 for better unified system-wide emoji styles
- [ ] Reimplementation of glide typing with the new layout engine and predictive text core
- [ ] Prepare FlorisBoard repository and app store presence for public beta release on Google Play (will go live with stable 0.7)
- [ ] Rework branding images and texts of FlorisBoard for the app stores
- [ ] Focus on stability and experience improvements of the app and keyboard
- [ ] Add support for new features introduced with Android 15 / 16
## Backlog / Planned (unassigned)
**Features that MAY be added (even in versions mentioned above) or dismissed**
- Full on-board layout editor which allows users to create their own layouts without writing a JSON file
- Voice-to-text with Mozilla's open-source voice service (or any other oss voice provider)
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER NOT NULL, `_display_name` TEXT NOT NULL, `_size` INTEGER NOT NULL, `mimeTypes` TEXT NOT NULL, PRIMARY KEY(`_id`))",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"displayName",
"columnName":"_display_name",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"size",
"columnName":"_size",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"mimeTypes",
"columnName":"mimeTypes",
"affinity":"TEXT",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"_id"
],
"autoGenerate":false
},
"indices":[
{
"name":"index_clipboard_files__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_clipboard_files__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd573e2ae2cbe7026957bc8d8fda291f3')"
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER NOT NULL, `_display_name` TEXT NOT NULL, `_size` INTEGER NOT NULL, `orientation` INTEGER NOT NULL, `mimeTypes` TEXT NOT NULL, PRIMARY KEY(`_id`))",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"displayName",
"columnName":"_display_name",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"size",
"columnName":"_size",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"orientation",
"columnName":"orientation",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"mimeTypes",
"columnName":"mimeTypes",
"affinity":"TEXT",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"_id"
],
"autoGenerate":false
},
"indices":[
{
"name":"index_clipboard_files__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_clipboard_files__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'dc886df9792fe6b6ad532cc7aa7c4a84')"
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `type` INTEGER NOT NULL, `text` TEXT, `uri` TEXT, `creationTimestampMs` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `mimeTypes` TEXT NOT NULL)",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"type",
"columnName":"type",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"text",
"columnName":"text",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"uri",
"columnName":"uri",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"creationTimestampMs",
"columnName":"creationTimestampMs",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"isPinned",
"columnName":"isPinned",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"mimeTypes",
"columnName":"mimeTypes",
"affinity":"TEXT",
"notNull":true
}
],
"primaryKey":{
"columnNames":[
"_id"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_clipboard_history__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_clipboard_history__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6fbec9d7ea017f8aefac4fb84dbd5189')"
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `type` INTEGER NOT NULL, `text` TEXT, `uri` TEXT, `creationTimestampMs` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `mimeTypes` TEXT NOT NULL, `isSensitive` INTEGER NOT NULL DEFAULT 0, `isRemoteDevice` INTEGER NOT NULL DEFAULT 0)",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"type",
"columnName":"type",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"text",
"columnName":"text",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"uri",
"columnName":"uri",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"creationTimestampMs",
"columnName":"creationTimestampMs",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"isPinned",
"columnName":"isPinned",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"mimeTypes",
"columnName":"mimeTypes",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"isSensitive",
"columnName":"isSensitive",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"0"
},
{
"fieldPath":"isRemoteDevice",
"columnName":"isRemoteDevice",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"0"
}
],
"primaryKey":{
"autoGenerate":true,
"columnNames":[
"_id"
]
},
"indices":[
{
"name":"index_clipboard_history__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_clipboard_history__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '145ca5bf4bff8e98f71ebc70ab3b495b')"
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `type` INTEGER NOT NULL, `text` TEXT, `uri` TEXT, `creationTimestampMs` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `mimeTypes` TEXT NOT NULL, `is_sensitive` INTEGER NOT NULL DEFAULT 0, `is_remote_device` INTEGER NOT NULL DEFAULT 0)",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"type",
"columnName":"type",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"text",
"columnName":"text",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"uri",
"columnName":"uri",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"creationTimestampMs",
"columnName":"creationTimestampMs",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"isPinned",
"columnName":"isPinned",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"mimeTypes",
"columnName":"mimeTypes",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"isSensitive",
"columnName":"is_sensitive",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"0"
},
{
"fieldPath":"isRemoteDevice",
"columnName":"is_remote_device",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"0"
}
],
"primaryKey":{
"autoGenerate":true,
"columnNames":[
"_id"
]
},
"indices":[
{
"name":"index_clipboard_history__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_clipboard_history__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1dd181d116dcb4530fb5b33451ea9ab5')"
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `word` TEXT NOT NULL, `frequency` INTEGER NOT NULL, `locale` TEXT, `shortcut` TEXT)",
"fields":[
{
"fieldPath":"id",
"columnName":"_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"word",
"columnName":"word",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"freq",
"columnName":"frequency",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"locale",
"columnName":"locale",
"affinity":"TEXT",
"notNull":false
},
{
"fieldPath":"shortcut",
"columnName":"shortcut",
"affinity":"TEXT",
"notNull":false
}
],
"primaryKey":{
"columnNames":[
"_id"
],
"autoGenerate":true
},
"indices":[
{
"name":"index_words__id",
"unique":false,
"columnNames":[
"_id"
],
"orders":[],
"createSql":"CREATE INDEX IF NOT EXISTS `index_words__id` ON `${TABLE_NAME}` (`_id`)"
}
],
"foreignKeys":[]
}
],
"views":[],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '787af4a2df15bf9d2c0597519d3fb273')"
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.