ankidroid / Anki-Android

AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.
GNU General Public License v3.0
8.43k stars 2.19k forks source link

Add option to remove number of cards due / time and deck card counts from default view #6996

Closed z1lc closed 3 years ago

z1lc commented 4 years ago

I would like the ability to hide the count of the total number of cards due & the estimate of time from the top bar, as well as individual deck card counts on the home screen. On most days, I don't complete all of my scheduled reviews and seeing this number can be demotivating. In the screenshot below, I've put a red box around numbers that I would like to create a preference to hide.

I have posted a bounty for this: https://www.bountysource.com/issues/92535114-add-option-to-remove-number-of-cards-due-time-and-deck-card-counts-from-default-view

Screenshot_20200829-102410_AnkiDroid

mikehardy commented 4 years ago

Hi there! There is a danger in the path of "a preference to toggle everything" that open source projects fall in to as they cater to niche needs, and we get lots and lots of complaints about the app being over-complicated - "a preference to toggle everything" is one of the reasons why. Also it creates code paths that are not normally exercised and as the app moves forward, porting to new APIs on underlying libraries, going through internal refactorings etc, every preference adds to the inertia.

Which is to say, I won't close this immediately, and if you proposed a PR for this and you're other suggestion I'd have a look at it, but in general I don't favor more toggles unless it's a request from lots of users vs 1. Hopefully you understand

z1lc commented 4 years ago

Hi Mike! Understandable. I've actually implemented this functionality in my fork, but have run into too many merge conflicts when trying to sync it. After receiving a notification from Google about the impending target SDK upgrade, I decided it might be better to get this into mainline.

Is there some middle ground functionality where this avoids some of the annoyance of "too many toggles"? I'm thinking of eg a feature flag or a separate pref page that wouldn't clutter the main app. If there isn't, it sounds like it might be better to just go through a rebase on my fork.

z1lc commented 4 years ago

Separately, would it help to have other users that mention interest in this feature on this issue? I have a few friends that are on the forked version that utilize this functionality, I could ask them to show support here.

mikehardy commented 4 years ago

If you posted a PR with the toggle in advanced preferences we could look, with a fork and a bounty you're clearly motivated and it would be nice to have another person capable of hacking around on the source using the main repo vs a fork

z1lc commented 4 years ago

Before I go in and start implementing, let me give a little background to why I even created a fork in the first place. I broadly believe that Anki's approach of expecting you to complete all reviews every day is unnecessarily inflexible. It doesn't match up with how I'd like a learning system to function.

In my view, the system should be adaptive, both in terms of retention rate and new card introduction rate. That is, during times when you're without phone/busy/lazy, the app should automatically detect this, reduce the amount of new cards it introduces, and prioritize certain reviews based on how overdue they are. Right now, Anki doesn't do any of this, and it means that when you have a time period when you can't use the app in the same exact way you've used it daily, you have a backlog of massive reviews waiting for you with no prioritization. You can, of course, reduce new cards manually through the settings when you know a period of time is coming up when you won't have as much time for studying. But this is annoying to have to do, doesn't deal with reviews piling up, and doesn't help when you don't know that such a time period may come up.

The most critical piece of functionality from my fork, then, is a basic implementation of these ideas. I've implemented a succession of PRs that take different approaches to the review prioritization idea: first, by increasing interval, then by "skew" (days overdue / interval), then by "effective ease" (integrating the ease factor into skew). In a PR from June, I implemented the dynamic changing of new card introduction based on recent mature retention (I added some comments on this in that PR).

I consider this functionality the most critical to why my fork is valuable. I realize that this is a significant departure from how most people use Anki, and if that doesn't fit into the mainline vision of AnkiDroid, I understand. But for me, that is the whole reason to make a fork in the first place -- the aesthetic changes I mention in the issue here were more of a test to see if/how quickly someone might want to implement a feature with a bounty. Ultimately, I would hope to create an option to allow this kind of review prioritization / new card introduction.

Let me know what you think.

mikehardy commented 4 years ago

Those are very interesting ideas. If learning is a pipeline / process, Anki is already working hard for you once things are in the pipe, but I like the idea of Anki adapting the rate of ingress as well - it clearly has a lot of information about recent study time and recent study success. I find myself manually tuning new cards up and down to fit my external idea of desired load (it's a time box, for me and my family). No reason Anki couldn't figure out that at current rate of new cards per day / retention / time spent that I am (for example) needing to add 6 more new cards on average in order to hit the timebox correctly in a stable manner beginning next week, or perhaps 20 new today, 15 tomorrow, then 5 and 5 next two days, then 6 stable going forward to hit the timebox immediately and stabilize it :thinking:

I'll have to look through the patches, but honestly, this kind of feature is something the whole ecosystem could / would need before we put it in Anki as a default feature. I don't say that to discourage, I think it's neat, I think the whole ecosystem could use it and Damien might be interested, have you tried posting that in the Anki forums?

In parallel - let's say that for some reason it is not accepted upstream. We have a Javascript API that is currently focused on making as much card information as possible available to the reviewer WebView, and allowing the WebView to interact with the card - so you may build a replacement reviewer UI if you like. Related - Anki already has hooks that allow scheduler interaction, giving add-ons a chance to alter scheduler behavior. I see a natural extension to the Javascript API where certain scheduler features are exposed to Javascript and those files may be kept as permanent add-ons, such that you could potentially override scheduler features in AnkiDroid, in a supported way. Perhaps if statistical information was JSON'd into a WebView, and the WebView was hooked to override the answer to "how many new cards today", "get me the next card", then you'd have a solution for the use case as well. ?

mikehardy commented 4 years ago

Separately, would it help to have other users that mention interest in this feature on this issue? I have a few friends that are on the forked version that utilize this functionality, I could ask them to show support here.

In general yes - just using the emoji / reaction response on an issue is useful. We listen to feedback for sure

voidplayer commented 4 years ago

Damien, and the manual in general (its even in the faq i believe), is against this kind of change. I think the rationale is 'The learning (intervals) will be messed up if you dont do what anki tells you to do' and 'it encourages bad practices'

Im also a long time proposer of these kind of features that give the learner an important role in using anki

Here goes some insights as a long time user, personally and through seeing other people interact with anki in real life

My current problems with what anki expect of me:

These are just normal use cases. I know my studying will suffer if i dont do it perfectly. But let me do it anyway and let anki accommodate the best it can to my wishes. Most of the time its not just a wish, but necessity imposed by life really

I deal with all these on a regular basis, and that is why i know this can be done somewhat, but its not user friendly. I had to learn a lot about anki internals and read of best ways to deal with them. @z1lc had to fork the program

Is really too much to accommodate for this uses cases that everybody will need to do eventually and put a disable button on a deck that will put it on hold permantly / for a year ?

I see this as condoms. Not having them available wont discourage sex, just will encourage the problems

Some days i didnt have enough energy left and forced myself to do the cards. I failed a lot of cards more than i usual do and, worse, i hated anki

I had to learn not to do this and I dont do it anymore. As @z1lc i review when i can. Most of the days is everything, but many days is just 50% and some rare weekends i take 3 days off. Im not cramming an exam. I dont have to deal with dates. Im just learning a language at my own pace and if a card is not optimal, is okay. I also had to learn to gauge my reviews and i know how to deal with them when they pile up. But most people will just stop reviewing

A couple more insights:

voidplayer commented 4 years ago

One last remark. I like how common zother folder is to order decks. Why not accomodate for things that everybody is already doing anyway :)

github-actions[bot] commented 3 years ago

Hello 👋, this issue has been opened for more than 2 months with no activity on it. If the issue is still here, please keep in mind that we need community support and help to fix it! Just comment something like still searching for solutions and if you found one, please open a pull request! You have 7 days until this gets closed automatically

z1lc commented 3 years ago

As this issue has a bounty, would prefer to keep this open.

github-actions[bot] commented 3 years ago

Hello 👋, this issue has been opened for more than 2 months with no activity on it. If the issue is still here, please keep in mind that we need community support and help to fix it! Just comment something like still searching for solutions and if you found one, please open a pull request! You have 7 days until this gets closed automatically