sspanak / tt9 Goto Github PK
View Code? Open in Web Editor NEWA T9 keyboard for Android devices with a hardware keypad.
License: Apache License 2.0
A T9 keyboard for Android devices with a hardware keypad.
License: Apache License 2.0
Remove the non-English words from the English dictionary. Done
English remains active, even though it is not in the list of enabled languages.
Expected:
This is a regression due to #18.
Experiment with this commit to check what is the better UX option. If it feels better without animations, then ditch them. It would simplify the code a lot.
This causes an unknown error and a crash. When Android resurrects TT9, try typing again and it will crash again.
This is a regression caused by #18.
Word adding is possible only in Predictive mode. If the user clicks the "Add Word" button in any other mode, nothing happens, which is confusing. To make it clear why is that, display a toast, saying: "You can add words in Predictive mode only".
Until #55 is done, adding words should remain completely disabled.
Truncating the dictionary database takes a couple of seconds and the UI remains blocked, which is undesirable.
Instead of generating version "X.1", the gradle script generates version "X.2", when there are no commits after the last tag. Fix it!
Currently, there is no way of accepting a partially typed word. Also, Center key accepts suggestions inconsistently. So, let's follow the Nokia 3310 rules:
After #24 and #25. They are required for implementing the "next language" function.
TraditionalT9.updateStatusIcon()
only updates the icon.The ProgressDialog used for showing the dictionary loading progress is deprecated. Use ProgressBar instead.
Here is a great tutorial.
Make sure not to allow multiple imports at once.
Currently there is such function in TraditionalT9Settings
, but it is not the right place for it. Also, the code looks suboptimal.
DictionaryDb
.beginTransaction
and endTransaction
.UnicodeBOMInputStream
.dict.properties
anymore. Clean up the build.graddle
file.TraditionalT9Settings
.mEditing = NON_EDIT
in onStartInput()
. However, this causes the Back keypress event to be skipped. Fix it!This is the same as: Clam-#24
As a performance optimization, consider using: getCurrentInputEditorInfo().getInitialTextBeforeCursor()
(and AfterCursor). As stated here, it may avoid the IPC round trip time.
Official guide: https://developer.android.com/guide/topics/ui/settings
TraditionalT9Settings.java
.settings_legacy
folderCustomInflater.java
MultiSelectListPreference
res/xml/prefs.xml
, res/values/arrays
, res/values/const
and whatever remains unused in res/layout
and res/drawable
.LangHelper.java
, if it still exists.Having a random list is a bit confusing and also it becomes a bit more difficult to spot the language we are looking for.
After #29.
After #7.
.
, ?
, !
)Besides moving the cursor, LEFT and RIGHT keys must also commit the currently selected word/letter in ABC and Predictive modes.
To solve the issues above:
A regression after #18
After #24.
Currently, different bits of a single language are spread across LangHelper.java
and CharMap.java
. This means each file has multiple responsibilities and also will make adding of new languages more and more difficult.
CharMap.java
and LangHelper.java
anymore. Delete them.LangHelper.java
is still used in the legacy preferences code. Removing it would be possible after #29.After #7.
The file is: TraditionalT9.java
if .. else
clauses. Refactor them to be switch .. case
for better readability.updateStatusIcon()
. Do so when actually changing it or on the first run.onStartInput()
It's a hack and it causes build warnings.
Research whether showing the window there is necessary at all. showWindow()
happening there was inherited from the original version, but it looks redundant.
Manage the window visibility and set any required flags in onRestart()
.
.,-?!'@:/;1
).:)
:D
;)
:(
:*
:P
. Consider adding other smileys.store-res
folder. The old readme is no longer needed. Possibly the different logo sizes are not needed either.res
folder.After #50
In case Predictive mode is selected, use the text case of the input field.
InputFieldHelper.determineTextCase()
workcurrentInputConnection.getCursorCapsMode(inputField.inputType)
to get the initial text case. - Based on the result, choose the initial text case.After #19.
The erased digit pops up again, but they must not.
This is a regression, caused by #18
The current way of key remapping puts too much power in the hands of the user and requires too much technical knowledge and reading the Android documentation to figure out the key codes. Also, it makes no sense to remap the number keys, because the norm for them is to type letters. So:
*
, #
or CALL
along with hold option. All phones have these three keys, so using them only should be safe enough.Try making the DPAD_CENTER button work as a submit or Enter button. sendDefaultEditorAction() could be useful. Alternatively, consider making use of sendKeyChar().
This seems to be important, because some forms do not have a "submit" button, so one should "press ENTER" to submit them.
Instead of the flat storage in SQL, try using a Trie. It may be much faster and use less space. When switching, ensure the suggestions still have priorities.
Educational info:
A DAWG may be even a better option, because it allows sharing common intermediate nodes. For example:
t | o | p
| a |
| i |
This may be useful for compressing the assets. Here is a nice implementation in Python.
After completing #18, #14 and #26, adding new words functionality no longer works.
DictionaryDb
.LangHelper.java
.Display a toast saying: "No dictionary for this language. Go to Settings to load it."
DatabaseHelper
:
T9DB
T9DB
updateWords()
function. Get rid of text case conversions. Simplify the code even more, if possible. Give it a more meaningful name.The Soft Keys do not fit well on the screen. Align them better.
Other people's efforts:
Steps to reproduce:
The IME is active, none of the UI elements are visible (the language indicator, the soft keys or the word suggestions).
Expected:
At step 4 the UI must re-appear.
Additional info:
This is similar to: Clam-#35
"ѝ" липсва в CharMap.java
и няма как да бъде написано.
абе
Алф
блус
дооправяне
дюнер
еднослойна
зариби
звънях
мега
метъл
мхм
накефен
накефил
обувал
оф
Петрохан
присети
пръднах
пърдя
сера
скапаната
смутих
сядайте
тоз
турбо
усилих
хаха
... otherwise it is very confusing.
This is a regression due to #18.
These no longer function properly. They will be remade in #27.
Don't forget to remove the colors from colors.xml
.
After #31.
Currently, the app settings are stored in the SQLite database in a weird format (sort of like bits in an integer, but not really). This causes major inconvenience when a new setting needs to be added or an existing one removed. Also, one needs to keep track of the setting indices to identify and use them.
This task does not entail redesigning the UI. It will be done in #29.
T9DB
. All settings-related stuff must be deleted.TraditionalT9.java
.Investigate what exactly what TraditionalT9::modeNotify()
and the related stuff do. If it takes care of the mode icon in the top bar, keep it. If it notifies in another way, remove it.
It was made possible in this commit. After adding a new word it restores the focus of the previously edited text field.
Review it and use if it makes sense.
Review commits 043a348, 44c56e2, df4b9dc and asses whether they bring any useful improvements to the prediction. If yes, then use them.
Make languages future-proof. In LanguageCollection
throw an error when there are languages with duplicate IDs.
Replace current Help link with a Help screen that displays the user-manual.md
file. If displaying markdown is overcomplicated, just convert it to HTML. Displaying HTML is very easy by doing:
textView.setText(Html.fromHtml("<p>some text</p>", Html.FROM_HTML_MODE_COMPACT));
Update On Cat S22 Flip, attempting to open the web help seems to cause an ActivityNotFoundException
:
Exception android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=https://github.com/... }
at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:2073)
at android.app.Instrumentation.execStartActivity (Instrumentation.java:1729)
at android.app.Activity.startActivityForResult (Activity.java:5481)
at android.app.Activity.startActivityForResult (Activity.java:5439)
at android.app.Activity.startActivity (Activity.java:5825)
at android.app.Activity.startActivity (Activity.java:5778)
at androidx.preference.Preference.performClick (Preference.java:219)
at androidx.preference.Preference.performClick (Preference.java:219)
at androidx.preference.Preference$1.onClick (Preference.java:94)
at android.view.View.performClick (View.java:7448)
at android.view.View.performClickInternal (View.java:7425)
at android.view.View.access$3600 (View.java:810)
at android.view.View$PerformClick.run (View.java:28309)
at android.os.Handler.handleCallback (Handler.java:938)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:223)
at android.app.ActivityThread.main (ActivityThread.java:7711)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:952)
Sometimes, in specific apps, one needs to type using a non-default mode, for example, always use Abc, instead of predictive, or always use capitals. However, every time a text field is focused, it starts with the default mode. Switching to the desired mode all the time is very annoying, so let's fix it.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.