ankidroid / Anki-Android

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

Feedback - First time user experience #7334

Closed crantok closed 2 years ago

crantok commented 3 years ago
Reproduction Steps
  1. Make sure you have never heard of Anki or any spaced-repitition flashcard apps.
  2. Get told about Anki by a friend and think, "Spaced repetition? That's what saysomethingin.com uses. I liked that. I'll try Anki."
  3. Go to the Android store, type "anki", click on the first app you notice. You are now using Ankiapp.
  4. Find the interface very intutuive and gamified, despair at the quality of the available decks and lack of feedback mechanism, easily download the one deck you find usable.
  5. Spend a lot of time on that deck.
  6. Months later, stumble across an open source app called Ankidroid that is part of an ecosystem called Anki, from which Ankiapp is catching crumbs.
  7. Feel a mixture of emotions.
  8. Download and open Ankidroid.
  9. Tap the eye catching "+" icon in the lower left.
  10. Tap "Get shared decks". (Feel excited.)
  11. See a repository of rated and commented decks with useful descriptions.
  12. Cry quietly with joy.
  13. Download a deck.
  14. "Hang on. I'm in a web browser. That's going to my downloads folder."
  15. Back in the app, tap the eye-catching "+" icon in the lower left.
  16. Tap "Add".
  17. "Hmm. 'Add note'. It has a front and back, so I assume that is like a card in a deck. I'm guessing this is not what I need."
  18. Go back to main screen. See exclamation mark in red circle. Tap on that.
  19. "Cloud sync? Login? Is this the problem? Do I need to create an account to get downloads into the app? I'll just have a look around before doing anything as drastic as generating another password..."
  20. Notice the three dots in the top right.
  21. Remember the three seashells in Demolition Man. Chuckle. Click on the three dots.
  22. "Yikes! Lots of options. Guessing this is more fully featured than Ankiapp."
  23. "Ooh, check media!"
  24. ...may take a long... "Nope."
  25. Tap import. Get taken to Recent files. Tap on apkg file. Wait. (My phone seems be slow today.)
  26. Feel relief. Use deck. Find it at least as useable as previous app. "What was it called? Can't remember..."
Expected Result

Getting to use an intuitive app with limited functionality and moderate quality content, and recommending it to people.

Actual Result

Getting to use a partially intuitive app which probably has a lot of functionality for me to discover, with high quality content, that I would think twice about recommending to half the people I know because Import.

Debug info

As far as I can tell, both the app and myself are bug free.

Research

Enter an [x] character to confirm the points below:

No, no, no and no. I have ADHD. If I try doing those then I'll either end up on twitter for 3 hours or start a rewrite of the app.

welcome[bot] commented 3 years ago

Hello! πŸ‘‹ Thanks for logging this issue. Please remember we are all volunteers here, so some patience may be required before we can get to the issue. Also remember that the fastest way to get resolution on an issue is to propose a change directly, https://github.com/ankidroid/Anki-Android/wiki/Contributing

david-allison commented 3 years ago

Hi @crantok , thanks for the detailed feedback! What would you say the actions to fix this would be, and which are the most important issues?

mikehardy commented 3 years ago

I also appreciate the feedback. What I wonder is, if the download of shared deck finishes and you just clicked open, did our configured file association between apkg and AnkiDroid work, so that it did just import? Because it is supposed to be that if you tap, it just works.

That said! Perhaps there is something we can do in our captive WebView for the shared deck website on AnkiWeb, where when a download finishes, if it's an .apkg we get control and can operate on it more intuitively? I have not scanned the available WebView APIs but that could be a game changer if there was a hook to get control again on apkg load. Or maybe we can catch the click itself and download via our controlled logic vs the standard WebView download logic, allowing similar more intuitive behavior - I think the API for that does exist

david-allison commented 3 years ago

That said! Perhaps there is something we can do in our captive WebView for the shared deck website on AnkiWeb, where when a download finishes, if it's an .apkg we get control and can operate on it more intuitively?

They don't support getting the current URL for privacy reasons. https://stackoverflow.com/questions/33343917/how-to-get-url-change-from-customtabsclient

We can get navigation events (page finished etc...)

But we can't query the download events/status from other apps: https://stackoverflow.com/a/17575025

We can potentially poll the downloads folder, but that's a little hacky

mikehardy commented 3 years ago

I didn't realize CustomTabsClient had a different interface from WebView. Perhaps switching to WebView is an improvement, we haven't had great fun with CustomTabsClient (multiple crash bugs) and if it's going to be finicky perhaps just having one finicky way (WebView) to wrap web content is a system improvement, at the same time it allows us to decisively improve a long-standing source of customer support load / complaints

crantok commented 3 years ago

Hi @crantok , thanks for the detailed feedback! What would you say the actions to fix this would be, and which are the most important issues?

IMHO a seamless import (or one with barely noticeable seams) of a downloaded deck is the most important issue for app users like me. I am not yet considering making a deck. I'm just finding out how useable the app is as a learning device.

I also appreciate the feedback. What I wonder is, if the download of shared deck finishes and you just clicked open, did our configured file association between apkg and AnkiDroid work, so that it did just import? Because it is supposed to be that if you tap, it just works.

Ah! Good point!

You mentioned a few options about trying to interface to the web browser or polling the downloads directory. Will the captive web browser tell you that it has completed a download, even if won't allow you to have any other details about it? At that point, the most recent apkg file in downloads is highly likely to be the desired import target. Alternatively, when the browser closes, any apkg files downloaded since the browser was opened are potential import targets.

Thank you very much for the quick replies to this. I was not expecting that :)

mikehardy commented 3 years ago

This path is as you say the most important for new users and we receive a lot of justified complaint, so it's a natural area of really high interest for us. I'm glad to hear the "tap .apkg -> import" does work, but I think we still have some prototype tests to do to see if we can take the work in between "I clicked on a share deck to download" and "it's imported and ready" away from the user. Seems like the sort of thing where the user expressed intent and the machine should do the work, having the user need to then find the deck and do something is friction.

Thanks again for the feedback

david-allison commented 3 years ago

Had a spike at getting the download done in a WebView + DownloadManager / BroadcastReceiver, it works without leaving the app, but to productionise:

mikehardy commented 3 years ago

I think the best way is to hook into the actual native Download Manager APIs somehow, they do background transport and I think handle the persistent foreground service notification that keeps things alive (and provides nice feedback to users). Not sure if that's possible but it has all the notification / wake lock / efficient transfer stuff all done if it was possible to hook into it somehow. That's just addressing transfer and app focus though

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

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

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

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

david-allison commented 3 years ago

9229 fixes most of the issues listed.

The other points raised:

@ShridharGoel - pinging in case this brings out any ideas, no action required

github-actions[bot] commented 2 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

david-allison commented 2 years ago

Now #9229 is merged. The majority of complaints are resolved in V2.16