Giter Club home page Giter Club logo

vocabletrainer-android's Introduction

VocableTrainer-Android Build Status

VocableTrainer-Android is a word and vocable training software for the android platform. It provides training with different modes, sessions and multiple word lists.

Get it on F-Droid

Features

  • N:N word support (multiple meanings)
  • "Additional" Column shown after solving (irregular verbs etc)
  • A<->B Random training over multiple lists
  • Stop/Continue training sessions at any time
  • Classic Mode: type in and verify
  • Quick Mode: no typing
  • Adjustable amount of word repetition in training
  • Export/Import of lists to/from CSV files with highly configurable CSV format

Missing Features

Features planned

  • Usage statistics for repetiton of worst vocables
  • Import/Export of KVTML files
  • Fast list editing from the PC (requires online account)

Bugs, Contribution etc

Feel free to open an Issue for ideas, bugs, localisation or feature requests. Or even better a PR.

You can also join the matrix channel #vta:matrix.org to ask questions.

FAQ

  • Docs ?!
    Docs!
  • What about these internet permissions?! These are used only to take part in an opt-in android-api-version survey.
  • What about a localisation for X ?
    I would appreciate a PR for localizations.
  • Playstore version
    Google wants money for publishing a free app, so if you want to see a playstore release, you can donate for that.
  • The latest release is not on f-droid.
    Please wait for f-droids build process to catch up.
  • What is this first 1.0 version before 0.1 about ?
    Default values weren't changed. It is therefore "0.0"

Distribution

Please always link to the f-droid repository, I won't give any support for unofficial builds.

You are not allowed to distribute this application under this name by yourself until 4 years after the last release.

License

VocableTrainer-Android is distributed under the Apache License, version 2.0.

vocabletrainer-android's People

Contributors

0xpr03 avatar easyvector avatar naofum avatar vistaus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

vocabletrainer-android's Issues

Bug on the vocable trainer - Instead of edit entry, it brings new list when rotated

Expected Behavior

One should be able to edit entry even on landscape mod

Actual Behavior

When trying to edit an entry, and the screen is rotated (landscape mod), it goes back to create a list again, and the previous entry created would be wiped off

How to produce the bug

Open the app, click on create list, enter the name of your desired list and what you would call columns A and B and click OK. Now click on the Add icon (+) which is located at the button right side. Now here is where you have to edit the entry of the list you created earlier. Create/Edit an entry with the Add button.
After creating an entry, now try creating another entry and rotate screen. Once the screen is rotated,
the entries and the list created would disappear and would now require us to create a new list and start all over again......

PS

Entry is different from list....

TEST TOOLS

  • Operating system : Android 6.0
  • Phone : Infinix hot s
  • Viable Trainer V0.5.3

Recording of the bug is showned below......

Watch the video below to see how it behaves....

https://youtu.be/-IPtehEnEWE

Feature request: Training without having to type in the solution

On a typical soft-keyboard of a mobile phone, typing in the words is tedious. Thus I suggest an option for an alternative, quicker training method: Just have in your head what you think the solution is, then press a new button labelled check or similar which gives a dialog showing the correct answer and buttons yes and no whether you knew it correctly. Hit the appropriate button and go on with the next word. That way learning is considerably faster.

Crash on Training with pre 0.6 Lists

Describe the bug
Lists created for VTA < 0.6? are crashing in training for classic modes.
Quick mode displays null for "Additional".
Lists created after upgrading to >= 0.6? work without any issues. All lists can be edited without any issues.

If version 0.6 is the limit,then definitely the "additional" introduction is making problems.

It is worth noting that this bug is probably of no concern any more, current users already had to deal with this issue or will never have this problem.

To Reproduce
Currently investigating, it seems to be as follows:

  1. Create lists with VAT < 0.6`
  2. Update VAT
  3. (Create additional new lists)
  4. Start training with Classic Mode
  5. Click Solve
  6. Crash

Expected behaviour
No Crash, no "null" for additionals.

Additional context
Possible problem during database upgrade or handling or trainer with old entries.

Things that should be configurable

Tracking issue for things that should be configurable. Please leave a comment for things that should be added to an options section of the app.

  • Addition auto-next time
  • input extract on landscape mode
  • Extended Storage discovery
  • Disable Animations (recyclerview.. )
  • action done mode for editors (close dialog / hide keyboard)
  • training progressbar (entries finished / points)

Documentation

We're in need of more documentation. Currently there's a tiny info in the wiki, but a more comprehensive walk-through would be nice.

The wiki is world-editable, feel free to fix / add stuff.

  • Pictures
  • DB scheme

Enhancement: Disable autocorrection while learning

While adding new vocabularies the autocorrection of the keyboard is very useful. While learning the vocabulary it should be disabled so that one has to know the spelling by heart and does not 'sheat' with the autocorrection. This could also be optional.

remove trailing whitespace

Maybee we should have a system to clean the superficial spaces, I'm not sure if we can have the same rule for every language, but something like : remove every space before first and last character, and every space following another one (avoid double spacing and more).

This should be done either when creating the list or only when checking the equality.

App Icon

It would probably be good to have an icon for the app, making it easier to find.
As I'm really not a graphics person I'm in favour of somebody else doing this, so feel free to take this issue if you want.

Deletion Undo for Entries is broken

Describe the bug
Entry deletion undo animation broken & thus can seem to be non working.

To Reproduce
Steps to reproduce the behavior:

  1. Create List
  2. Create Entry
  3. Delete Entry
  4. Optional: Directly leave editor, giving no time for invisible undo animation

Expected behavior
Undo-Animation, deletion on back before undo.

Additional context
Undo-Bar not visible, animation still running invisible, so deletion can appear to be completely broken while in reality the undo-animation wasn't finished to actually delete the item.

Online Account Sync

I'm evaluating whether to implement an online account feature (self-hostable) where you can upload your lists and thus edit them on your PC in your browser. This eliminates the import/export busywork completely. Import and Export won't ever be removed, but editing or creating new vocable lists from your PC should be much faster and easier for non tech-savvy folks.

List is incomplete on landscape orientation

Expected behavior

The full listview should be visible or be able to display via scrolling up and down the list on both portrait and landscape screen.

Actual behavior

On landscape position, three options (delete list, export, import) gets off the list and can't be seen.

How to reproduce

Download here, Open app and switch to landscape view on home page.

  • App: vocable trainer version 0.5.3
  • Operating system: Android Nougat 7.0

Recording Of The Bug

20180330_104349.gif



Posted on Utopian.io - Rewarding Open Source Contributors

Import/Export

Currently there is no way a user can import/export his vocables.
What I have in mind is editing vocables from the PC and then importing it into the vocable app, as filling up tables is much easier with a real keyboard.
This could be achieved by using the vocable-trainer for desktop.
Still we would need a import/export strategy like export to SD-Card / work file directory etc.

I'm not sure what's the best solution. Cloud synchronisation would be another option, but I'm not a big fan of it as we would also require some syncing server.

I'm open for ideas.

Vocable trainer App Crashes ~ Bug

Expected Behavior

It shouldn't crash, regardless of the position of the screen. Whether portrait or landscape.

Actual Behavior

When a training session is successful, and screen goes landscape mode, the app crashes

How to produce the bug

Open the app, click on start new session ,click on the column A at the top to create a session, click on start session,Now when you get a message saying 'You've finished this training session', rotate your screen(i.e landscape mode). The app would crash.....

TEST TOOLS

  • Operating system : Android 6.0
  • Phone : Infinix hot s
  • Vocable Trainer V0.5.3

Recording of the bug is showned below......

Watch the video below to see how it behaves....

https://youtu.be/Pl03Zeb8ihA



Posted on Utopian.io - Rewarding Open Source Contributors

Crash on List Selection dialog in Import with raw data

Describe the bug
Crash on list selection dialog return in Import due to change in VList from Serializable to Parcelable, giving an invalid return.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Import
  2. Select import List of raw data
  3. Choose "Append to List"
  4. Select List
  5. App Crash

Expected behavior
No crash, List is selected

Statistics

Statistics Feature
This includes

  • Amount of sessions over time
  • Most failed entries (lists?) of last X days, last session

Nice to have:

  • Avg tries per entry
  • Avg sessions
  • Amount of entries solved
  • Hints used

There should be a way to reset those numbers.

  • Create DB plan for v2.1
  • Migrate DB to v2.1
  • Change database controller
  • Implement Changes in trainer
  • Create UI for statistics

Import/Export UI not responsive & Improvements

  • Extract export list & import preview into another tab
  • viewmodel for customformat changes
  • Allow scrolling
  • Fix arbitrary crash on viewport change when in file selection
  • rework ui & fix spinner dropdown size
  • Do Import prefetch in background to avoid observer triggering issues
  • Export in viewmodel, making it rotation safe
  • Import in viewmodel, making it rotation safe

THE CUSTOM FORMAT PAGE GOES BACK UNEXPECTEDLY

Expected Behavior

It should allow users adjust the custom format settings on landscape mode

Actual Behavior

Each time the app gets to the custom format page, and the device is rotated, the app goes back unexpectedly

How to produce the bug

  • Open the app

  • Click on import

  • Click on the more option icon at the top right corner

  • Select Edit Custom Format

  • Now rotate screen, such that you should adjust some settings on landscape mode

  • The app would always go back to the import page , Thereby disallowing users from using it

TEST TOOLS

  • Operating system : Android 6.0
  • Phone : Infinix hot s
  • Vocable App Trainer v0.5.3

Recording of the bug is showned below......

Watch the video below to see how it behaves....

https://youtu.be/9T8NiWpkN-8



Posted on Utopian.io - Rewarding Open Source Contributors

Import/Export to XML of playstore alternative

The alternative vocabltrainer on playstore exports only to a custom XML file.
We could add support for this and allow import/export of that format.

Needs investigation whether this format supports all requirements.

CustomFormat: unhandled exception on illegal format Input

Exceptions from a third-party library have not been handled.

Reproduce:

  1. Export -> Edit custom format
  2. Enable Escaping and Comment, click BACK.
[APE] // CRASH: vocabletrainer.heinecke.aron.vocabletrainer (pid 25350) (elapsed nanos: 18947365328958)
[APE] // Short Msg: java.lang.IllegalArgumentException
[APE] // Long Msg: java.lang.IllegalArgumentException: The comment start and the escape character cannot be the same ('n')
[APE] // Build Label: Android/sdk_google_phone_x86/generic_x86:6.0/MASTER/4088240:userdebug/test-keys
[APE] // Build Changelist: 4088240
[APE] // Build Time: 1497047463000
[APE] // java.lang.IllegalArgumentException: The comment start and the escape character cannot be the same ('n')
[APE] // 	at org.apache.commons.csv.CSVFormat.validate(CSVFormat.java:1208)
[APE] // 	at org.apache.commons.csv.CSVFormat.<init>(CSVFormat.java:531)
[APE] // 	at org.apache.commons.csv.CSVFormat.withCommentMarker(CSVFormat.java:1283)
[APE] // 	at org.apache.commons.csv.CSVFormat.withCommentMarker(CSVFormat.java:1265)
[APE] // 	at vocabletrainer.heinecke.aron.vocabletrainer.fragment.FormatFragment.savePrefsToCSVFormat(FormatFragment.java:125)
[APE] // 	at vocabletrainer.heinecke.aron.vocabletrainer.fragment.FormatFragment.onStop(FormatFragment.java:85)
[APE] // 	at android.app.Fragment.performStop(Fragment.java:2391)
[APE] // 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1025)
[APE] // 	at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1253)
[APE] // 	at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:1605)
[APE] // 	at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1587)
[APE] // 	at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:578)
[APE] // 	at vocabletrainer.heinecke.aron.vocabletrainer.Activities.FragmentActivity.handleFragmentBack(FragmentActivity.java:82)
[APE] // 	at vocabletrainer.heinecke.aron.vocabletrainer.Activities.FragmentActivity.onBackPressed(FragmentActivity.java:68)
[APE] // 	at android.app.Activity.onKeyUp(Activity.java:2477)
[APE] // 	at android.view.KeyEvent.dispatch(KeyEvent.java:2664)
[APE] // 	at android.app.Activity.dispatchKeyEvent(Activity.java:2730)
[APE] // 	at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:541)
[APE] // 	at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
[APE] // 	at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319)
[APE] // 	at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
[APE] // 	at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310)
[APE] // 	at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127)
[APE] // 	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089)
[APE] // 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
[APE] // 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
[APE] // 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
[APE] // 	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
[APE] // 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
[APE] // 	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
[APE] // 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
[APE] // 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
[APE] // 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
[APE] // 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
[APE] // 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
[APE] // 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
[APE] // 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
[APE] // 	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3820)
[APE] // 	at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3981)
[APE] // 	at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2253)
[APE] // 	at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1874)
[APE] // 	at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1865)
[APE] // 	at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2230)
[APE] // 	at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
[APE] // 	at android.os.MessageQueue.nativePollOnce(Native Method)
[APE] // 	at android.os.MessageQueue.next(MessageQueue.java:323)
[APE] // 	at android.os.Looper.loop(Looper.java:135)
[APE] // 	at android.app.ActivityThread.main(ActivityThread.java:5417)
[APE] // 	at java.lang.reflect.Method.invoke(Native Method)
[APE] // 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
[APE] // 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
[APE] // 

Support variants of CSV for import/export

Since CSV files come in a variety of flavours, I suggest to let the user select the variant of CSV to use on import, with the possibility to create custom presets in the settings that allow to individually select delimiter, line ending, quote character, quote format, etc. See also discussion on #2.

UI Feedback

This issue is for feedback on the (new) UI.
Feel free to put your rant about my horrible design abilities in here ;)

Support intentions

Support sending/receiving .csv files from/to other apps. Docs.

While doing this we can also register ourself for .csv files.

Dropdown menu for delimiter selection

As discussed in #31 and as desired as a reminder here:
The possibility to select a tab sign directly would be nice. One solution could be a drop-down menu.

Original idea:

Maybe you can use a drop down menu for delimiters. The custom format settings are much more than only set the delimiter. In most cases, only a few separators are required. And for users who need a special delimiter, one point in the drop down menu could be "other character", which opens the 1 character restricted input window.

Crash on import.

I just click on import and get...

W/dalvikvm( 3531): threadid=1: thread exiting with uncaught exception (group=0x41f25ce0)
W/dalvikvm( 3531): threadid=1: uncaught exception occurred
W/System.err( 3531): java.lang.NullPointerException
W/System.err( 3531):    at vocabletrainer.heinecke.aron.vocabletrainer.Activities.lib.EntryListAdapter.getView(EntryListAdapter.java:95)
W/System.err( 3531):    at android.widget.AbsListView.obtainView(AbsListView.java:2338)
W/System.err( 3531):    at android.widget.ListView.makeAndAddView(ListView.java:1812)
W/System.err( 3531):    at android.widget.ListView.fillDown(ListView.java:698)
W/System.err( 3531):    at android.widget.ListView.fillFromTop(ListView.java:759)
W/System.err( 3531):    at android.widget.ListView.layoutChildren(ListView.java:1645)
W/System.err( 3531):    at android.widget.AbsListView.onLayout(AbsListView.java:2149)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
W/System.err( 3531):    at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
W/System.err( 3531):    at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
W/System.err( 3531):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
W/System.err( 3531):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
W/System.err( 3531):    at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
W/System.err( 3531):    at android.view.View.layout(View.java:15140)
W/System.err( 3531):    at android.view.ViewGroup.layout(ViewGroup.java:4866)
W/System.err( 3531):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2342)
W/System.err( 3531):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2048)
W/System.err( 3531):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1211)
W/System.err( 3531):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6282)
W/System.err( 3531):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
W/System.err( 3531):    at android.view.Choreographer.doCallbacks(Choreographer.java:591)
W/System.err( 3531):    at android.view.Choreographer.doFrame(Choreographer.java:560)
W/System.err( 3531):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
W/System.err( 3531):    at android.os.Handler.handleCallback(Handler.java:808)
W/System.err( 3531):    at android.os.Handler.dispatchMessage(Handler.java:103)
W/System.err( 3531):    at android.os.Looper.loop(Looper.java:193)
W/System.err( 3531):    at android.app.ActivityThread.main(ActivityThread.java:5323)
W/System.err( 3531):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 3531):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err( 3531):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
W/System.err( 3531):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
W/System.err( 3531):    at dalvik.system.NativeStart.main(Native Method)
W/dalvikvm( 3531): threadid=1: calling UncaughtExceptionHandler
E/AndroidRuntime( 3531): FATAL EXCEPTION: main
E/AndroidRuntime( 3531): Process: vocabletrainer.heinecke.aron.vocabletrainer, PID: 3531
E/AndroidRuntime( 3531): java.lang.NullPointerException
E/AndroidRuntime( 3531):        at vocabletrainer.heinecke.aron.vocabletrainer.Activities.lib.EntryListAdapter.getView(EntryListAdapter.java:95)
E/AndroidRuntime( 3531):        at android.widget.AbsListView.obtainView(AbsListView.java:2338)
E/AndroidRuntime( 3531):        at android.widget.ListView.makeAndAddView(ListView.java:1812)
E/AndroidRuntime( 3531):        at android.widget.ListView.fillDown(ListView.java:698)
E/AndroidRuntime( 3531):        at android.widget.ListView.fillFromTop(ListView.java:759)
E/AndroidRuntime( 3531):        at android.widget.ListView.layoutChildren(ListView.java:1645)
E/AndroidRuntime( 3531):        at android.widget.AbsListView.onLayout(AbsListView.java:2149)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
E/AndroidRuntime( 3531):        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
E/AndroidRuntime( 3531):        at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
E/AndroidRuntime( 3531):        at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
E/AndroidRuntime( 3531):        at android.view.View.layout(View.java:15140)
E/AndroidRuntime( 3531):        at android.view.ViewGroup.layout(ViewGroup.java:4866)
E/AndroidRuntime( 3531):        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2342)
E/AndroidRuntime( 3531):        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2048)
E/AndroidRuntime( 3531):        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1211)
E/AndroidRuntime( 3531):        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6282)
E/AndroidRuntime( 3531):        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
E/AndroidRuntime( 3531):        at android.view.Choreographer.doCallbacks(Choreographer.java:591)
E/AndroidRuntime( 3531):        at android.view.Choreographer.doFrame(Choreographer.java:560)
E/AndroidRuntime( 3531):        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
E/AndroidRuntime( 3531):        at android.os.Handler.handleCallback(Handler.java:808)
E/AndroidRuntime( 3531):        at android.os.Handler.dispatchMessage(Handler.java:103)
E/AndroidRuntime( 3531):        at android.os.Looper.loop(Looper.java:193)
E/AndroidRuntime( 3531):        at android.app.ActivityThread.main(ActivityThread.java:5323)
E/AndroidRuntime( 3531):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3531):        at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 3531):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
E/AndroidRuntime( 3531):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
E/AndroidRuntime( 3531):        at dalvik.system.NativeStart.main(Native Method)
V/Provider/Settings(  626): get setting for user 0 by user 0 so skipping cache


Same I got after click on "Create list".

Code Cleanup

  • remove obsolete casting for findViewById
  • use non-null asserts on getActivity and the like
  • make things private which can be private
  • fix spelling mistakes in class names
  • Docs
  • replace class instances with lambdas on anonymous event functions (setOnClickListener..)
  • Import cleanup
  • Copyright
  • unify lower parts of fragment_trainer_classic & fragment_trainer_classic_mm
  • Package naming conventions (lib/..)
  • Create Adapter class
  • Fix *Right/Left -> *End/Start in layouts

Fix file dialog issue with protected dirs

Navigating in the file dialog to a protected folder presents a nullpointer error. Afterwards the App is stuck in this folder as the path is valid (passing the loading tests, saved as last path) but is unreadable, making it also impossible to navigate away. Currently only fixable by re-installation of the app, otherwise import/export is broken.
(Testable via WhatsApp folder?! random to reproduce)

File Import broken with recent android API

Describe the bug
Recent android versions require the use of the MediaStore.Files system or applying MANAGE_EXTERNAL_STORAGE permissions.
The current WRITE/READ_EXTERNAL_STORAGE permissions won't suffice as they only report media files (images,videos..), since those android changes.

The MediaStore system will apparently replace the file-navigation with some kind of index and removes the folder structure.

The latter one is restricted to a specific set of apps and thus should probably not be used. It may also require additional permissions-requests from the OS, though it works as a drop-in fix for the current system using appops set --uid vocabletrainer.heinecke.aron.vocabletrainer MANAGE_EXTERNAL_STORAGE allow.

To Reproduce
Steps to reproduce the behavior:

  1. Create an API v30 emulator
  2. Drop a .csv file inside
  3. Try to import it
  4. File isn't visible in file chooser, directory doesn't report this file as existing for the app. File is visible in "Files" App.

UI Theming & Icons

Tracking issue for UI overhaul & icons

  • Enable Theming
  • Implement Icons for buttons
  • Introduce material theme guidelines

Dark mode / night mode

Please add dark mode / night mode.
I have seen themes is on there way. I hope something like this gets into the settings quickly.

Crash on empty Trainingset when resuming.

Expected behavior

On clicking upon resume session it must be resume.

Actual behavior

While clicking on resume session it brings me to home screen.

How to reproduce

Install app from f droid.

Open it and start session.

Click on the header to start with an empty session.

Finally it shows you have finished session.

Then it shows the option in which "resume option " is also present.

Click on it and it brings us to home.

  • Browser:Vocable Trainer Beta
  • Version:0.5.3
  • Operating system:5.1.1

Recording Of The Bug

https://youtu.be/Tb2443axhnI



Posted on Utopian.io - Rewarding Open Source Contributors

Drop Support for pre v21 API Android

Tracking issue for dropping support on android pre v21.
As of now we have ~1% of users using android with an API pre 21 this means Android 4.4 from 2013. Keeping support for those older APIs will introduce a good amount of overhead due to changes in the support libraries. I suggest adding a warning and then dropping support at end of December 2019.

Blocks #42

Broken Quick Mode UI after switch

Describe the bug
Quick mode UI breaks after switching from classic mode.

To Reproduce
Steps to reproduce the behavior:

  1. Start training
  2. Answer vocable in classic mode
  3. Switch to quick mode
  4. UI shows all possible buttons of quick mode (correct/wrong/resolve)

Expected behavior
Only shows buttons currently to be shown on new vocable

List group tags

Allow grouping lists by some tag you can search on later.
Personal suggestion from a user, apparently the alternative app on playstore supports this reasonably.

Frequently Asked Question (FAQ) Proposal

Hello there, I'd like to contribute to your awesome project by writing an updated Frequent Asked Questions for users self-service and other write-up like About Us and Contact Us page. Would love to hear from you, thanks.

N:N Vocables Support

This is a tracking issue for N:N vocable support and is subject to change.

  • db scheme draft
  • user info dialog about upcoming change
  • Database implementation
  • Database upgrade status dialog
  • Database & upgrade testing
  • editor integration
  • trainer integration
  • export support of N:N
  • import support of N:N
  • export enforce multi-value csv formats
  • additional delimiter for multi-value cells required for N:N
  • escaping option for delimiter
  • additional trainer mode
  • update Docs

Preview is in #23

All questions / feature requests /bugs can be asked/reported here.

Bad ui feedback in new session dialog

There is currently no feedback when no "times to solve" is entered. This gives the impression that something is broken as the "Start Session" button is just not responding at all.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.