[Android] Flaming Durtles - Android app with offline support

Thank you so much, and I’m so sorry for assuming Flaming Durtles was the problem! It seems the WK devs fixed the blip and I was able to get those reviews down properly this time :blush:

As for syncing, hmm, I’m pretty sure it said it was performing 100+ background tasks right after I finished 100+ reviews. Did it wait to do the sync because I have the Undo button active? This part’s not a huge deal, just curious about what it’s doing.

Thank you!

No worries, it’s cool :slight_smile:

Ah yes, I forgot about that setting.

Normally, as soon as you finish one item, i.e. answered both meaning and reading correctly, the result is committed and can’t be undone anymore, and the sync is scheduled for immediate execution. And if you’re online, the sync is started immediately.

If you have delayed processing enabled, and you finish one item, the result is stored locally in the database, but it’s held back - it can still be undone, and if you abandon the session without finishing it normally, all of the results of the session will be completely lost. And when you finish the session, then all of the review results are committed at once, and all of them are scheduled for syncing in one go.

Other than that it all works the same. You need to have the app open so the sync can start, but once it’s going it will keep going in the background.

That makes a lot of sense! Sure enough, I seem to have “delayed processing” enabled. Maybe I turned it on thinking it was required to use the undo button normally – if that’s not the case, I think I have no need for it and will turn it back off. That should make things a little safer for future sessions.

Thanks for the quick responses and for making such a great app! My WK life is a lot easier with it – my last stint with WK was browser-only and I eventually fell off the boat, but after resetting and having this, it’s much easier to stay on top of reviews every day. Here’s to making it farther this time!

If you have delayed processing enabled, then you get unlimited undo, meaning that you can always undo all the way back to the start of the session. Without that option, undo only works up to the point of the last completed item, since completing an item commits the result for syncing - it’s a hard wall that you can’t undo across.

With or without that option, you can always undo an incorrect answer immediately after you make it, which is the most important thing. Most people don’t need the delayed processing option.

Got it! That’s perfect~ Thanks again!

Okay, so a thing just happened… I have just been accused in email of being racist because the APK file for Flaming Durtles contains the words ‘blacklist’, ‘whitelist’ and ‘whitespace’. It was a rather lengthy and abusive message.

I ignored the email because I refuse to have any kind of online discussion about racism anymore. The subject is so incredibly emotionally charged, especially now, that it’s effectively impossible to have a rational discussion on the subject anymore.

So I’m just going to say this once, and move on. I do not want to have a discussion about this, this is just a statement.

  • Flaming Durtles contains the words “blacklist” and “whitelist” because it has to. Those two words are used in the WK API, and for FD to function correctly it must know and recognize those two words. Recognizing them is the only purpose for which they appear. All occurrences of these words are hidden, i.e. they are not visible to a normal user.

  • Flaming Durtles contains the word “whitespace” because that is the standard term for a category of spacing characters, and I need to use that word because the Android standard library (based on the Java standard library) uses it as well. Interacting with the standard library is the only purpose for which that word appears. All occurrences of this word are hidden, i.e. they are not visible to a normal user.

  • The words “black” and “white” appear frequently in Flaming Durtles, sometimes in a way that is visible to a normal user. In all cases, the words “black” and “white” are only used to identify colours for UI elements in the app, and for no other reason.

  • The word “master” appears frequently in Flaming Durtles, often in a way that is visible to a normal user. This is because the word “master” is the name of one of WK’s SRS stages. The word “master” does not appear in any other meaning or context. The word “slave” does not appear in Flaming Durtles.

This is the full extent of the use of the words “black”, “white”, “master”, “slave” and their derivatives in the app. If you have a problem with this, I suggest you stop using Flaming Durtles and WaniKani. If you think I am racist because of this, that’s your problem. Not mine.


Wow, that’s ridiculous


That is the most profoundly uninformed email I have read about lately. Perhaps that person should take things up with Gutenberg, as whitespace is a basic typesetting term since like the 1600s?

Here is some love, @ejplugge!! <3 <3 <3


I personally use this feature to prevent items from burning when I don’t think I’m ready. Especially when my answer feels like it’s a guess and I don’t feel confident I will always give the same answer. I will undo and intentionally mark it wrong so I can continue reviewing.

In German, it is not white, but empty (Leerzeichen, Leerraum), so Gutenberg cannot be made responsible.


I am sorry you went through that. Those terms are standard programming jargon. How people even looked at your source code is beyond me. Especially considering they really would have had to go out of there way to see this kind of information.

1 Like

I did some thinking last night of how to maybe make the ordering better and give a better sense of randomness.

Instead of reordering the items in a filtered subgroup in a random order, keep the items in the filtered order. But, if you get a item wrong, then shuffle it back into the list somewhere randomly. That way, the initial ordering is kept. It will only be placed in a random later spot if it is skipper or wrong.

I think I’d prefer that honestly to just randomly ordering the subgroup.

Also, it may be good to check that the card isn’t placed randomly back at it’s same position and instead is placed at least one card away.

I was wondering whether it could have been an automated thing. Some bot going through everything on the app stores and scanning for the words in the code


They didn’t get the source code, the only ones who have that are me and the folks at GitHub. But it’s enough to have an APK file, which is what you get from the Play Store when you install an app. It has only the compiled code, but since I don’t encrypt the APK, it’s easy to scan that for strings of text.

Possibly, but the email was more targeted than that, it mentioned WaniKani specifically, and the forums.


Leerzeichen is a space character. Whitespace is unprinted or non-printing area on the typebed.


Just writing to show appreciation and offer a small suggestion for the UI.

I’m using the app for some time and I have to say that I really like it! You made great work with it.
The one thing I’m missing is a quick way to globally switch audio on/off.

Most of the time I want to hear audio both in lessons and reviews. However if I’m doing some quick reviews in a public place, I’d rather have it disabled. It would be great if I can do it with a single click from the main screen. An on/off icon on the top bar perhaps?

Anyway, thanks again for this great app!

I’ll put it on the list.

Ah, that’s a really good point! I definitely remember times (before I reset) where a burn felt undeserved. I guess you can always unburn later, but doing it on the spot does seem handy. I’ll keep that in mind in case I wanna turn that setting back on later.

As for the email fiasco: yikes. If they genuinely have an issue with programming terms, screaming at an independent developer is not the way to go about it. Sorry you had to endure that.


Another release with not much in the way of new features, mostly some fixes and quality-of-life improvements and behind-the-scenes code improvements. The biggest change for me is an overhaul of the main quiz screen. I have finally been able get that screen under control and it now behaves much better with different sizes of keyboards, and it adapts more dynamically to changing window sizes. This is something I’ve been dying to get right for a long time… I’m sure it’ll need some more tweaking, but the foundations are much better now.

Version 1.22.0, 2020-06-10:

  • Lots more refactoring to improve the behind-the-scenes quality of the code, and to be better prepared for new app features and changes to WaniKani itself.

  • The quiz UI has been overhauled to be more flexible, and will now adjust more dynamically to different display sizes and showing/hiding the soft keyboard. There’s now also a setting to set the maximum font size for the main question text.

  • Improve query building for self-study. This doesn’t change anything visually, but the self-study should stop randomly forgetting its presets. And I’m prepping the self-study to support multiple presets as well.

  • Update the pitch info reference data.

  • Update libraries and tools to the latest Android SDK versions, in preparation for Android 11 compatibility.

  • A few minor UI tweaks to make things look better on various screens.

  • Fix the tag colouring in mnemonic text so it doesn’t overflow on long spans of text. Also added an option to disable this colouring and revert to the old style of bold text.

  • Add a support/feedback page to the app, to (hopefully) help users to find the forums or email for support.

  • Add more lesson ordering options, and add an option to shuffle session items after the selection for the session has been made.

  • Remove some no-longer needed locking operations to (hopefully) resolve some performance problems reported by a few users.

As part of this update, I have officially decided to drop support for landscape mode on phones, unless you have a hardware keyboard. Landscape mode has always been a mess on phone-sized displays, since soft keyboards will typically cover all or nearly all of the screen. I’ve always tried to make landscape work at least somewhat, but for phone-sized screens I’m going to stop trying. If landscape mode works for you on a phone, then that’s great, but if you have problems with it you’re on your own. Landscape mode is still usable if you have a hardware keyboard or a tablet.


Hm, usually my updates are approved in less than an hour, but this one is taking longer. Hopefully it’s just a little bit of Corona-related delay, and not a sign that Google has issues with this update…