Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Importing individual events #173

Open
DominikNovosel opened this issue Nov 13, 2022 · 5 comments
Open

Importing individual events #173

DominikNovosel opened this issue Nov 13, 2022 · 5 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@DominikNovosel
Copy link
Contributor

DominikNovosel commented Nov 13, 2022

Currently, there is no way to do this automatically except for importing a backup, which overwrites existing data.
However, there is an option for sharing a pre-formatted block of text that gives essential information about the event, eg.

🎈 Birday Reminder
🥳 Dominik Novosel (Birthday)
🕯 Thursday, May 4, 2023
📅 Wednesday, May 4, 2005

The simplest possible solution (or at least the most user-friendly) would be to have the user copy and paste this into a text entry field, whereupon Birday would analyze it, pull out the relevant data and save it as a new entry. This seems super practical for sharing since it's just text that can be sent through any messaging service.

Drawbacks:

  • How would this play with the translations?
  • Do Kotlin string methods support emojis?
  • Error correction?
  • Varying date and name formats
  • UI considerations (where to put this option?)
@m-i-n-a-r
Copy link
Owner

Another interesting proposal, thanks!

  • The translations are a problem and recognize each language requires a lot of logic. Furthermore, one could easily manipulate the text
  • Yep, they should
  • Hard to tell
  • Yep, another huge logic block
  • Probably in settings, in the import/export section?

Considering all this aspects, i had an idea:
the share functionality could share not a text, but an image. Specifically, a QR code containing all the information to import the contact in the app (coded in the same formats, language and so on) and a text below just like the current one.
Issues with this approach:

  • instead of sharing the QR, the app could simply display it, it makes more sense to me
  • the app itself should embed a QR reader! That's not a problem, i already developed many apps containing such component, but it needs an additional permission, and i'm trying to avoid additional permissions at all costs 😞
  • Such feature should be integrated seamlessly inside the app, without changing the UI. As i wrote in previous comments, Birday has a lot of senior users (my grandparents do use it either 😄 )

@m-i-n-a-r m-i-n-a-r added enhancement New feature or request help wanted Extra attention is needed labels Nov 14, 2022
@DominikNovosel
Copy link
Contributor Author

the share functionality could share not a text, but an image. Specifically, a QR code

That's an interesting idea, however, images are a rather bulky medium for transmitting information like this, and importing them into Birday would have the user first figuring out how to save images to the gallery from their messaging app, and then finding that specific image while fumbling in the image selection dialog. This could take about as much time as just saving the event manually for the average user, and would almost certainly confound senior users. I know from experience that most of my relatives would get stuck at step one.

Not to mention that any images that were assigned to certain events wouldn't fit into a QR code nor a shareable text block unless Birday downscales them to a manageable size first. It might make sense to have a separate option to share the event image though. Embedding an image into either of the aforementioned formats seems arduous and unnecessary.

instead of sharing the QR, the app could simply display it, it makes more sense to me
the app itself should embed a QR reader! That's not a problem, i already developed many apps containing such component, but it needs an additional permission, and i'm trying to avoid additional permissions at all costs 😞

Another good option, but this means that the sender and recipient would have to be in physical proximity, go through the process described above, or jury-rig some kind of QR code exchange session on some video conferencing service to accomplish a transfer. If you were to go down this route though, it is my understanding that you could simply not ask for the camera permission until the user goes to use this feature.

I still think that a pre-formatted text block would be the optimal solution. We could even call it a "BirCode"! To get around localization issues, the data could be made entirely machine readable with some human readable instructions tacked on, eg.

Paste this text into the Name field in the Add event menu in Birday [data, possibly encoded in CSV]

The parser code could simply ignore everything outside the brackets and then read in the data. In writing the instructions, I tried to comply with your request not to include UI changes, but I think an innocuous Import from BirCode button would be better. Asking the user to paste it into the Name field is a bit arbitrary and requires additional logic to recognize that the input is not a name, and hunting down the same option in the settings is, once again, something that takes time. It also seems more intuitive, since most people would look for this option in the Add event menu, where they usually go to do exactly that; add a singular event.

@m-i-n-a-r
Copy link
Owner

That's an interesting idea. The only purpose of my QR idea was to make the data uneditable, but I fully agree about the cumbersome procedure. The almost 3000 reviews I had until now praise the app because "it's easy to use" and this has to be the main focus, always. With that being said, the BirCode idea is something I could try to implement. To summarize:

  • The app can share a properly formatted code (using the share event function, it makes no sense to develop a completely different share function) in text format
  • The text can be easily copied and pasted in the main "insert event" dialog to quickly import a single event
  • The field to paste it should be initially hidden
  • This will require additional strings, thus translations. 😰

I still want to release the update before developing this feature, but it could be easy doing it in this way. I'm slow as hell, but I'll do it, I promise 😄

@simonesestito
Copy link
Contributor

In order to share a single event with a friend, my little idea is to use Deep Links. Let me explain.

Alice wants to send to Bob the event representing Charlie's birthday.
Alice clicks a share button on Charlie's birthday event, and it shares the message to Bob.
The message may look something like:

Save Charlie's birthday and never forget about it.
Use Birday: https://birday.app/event?data=someBase64DataOrWhatever

Bob receives the message and he's very glad that Alice reminded him of Charlie's birthday. He never wants to miss it again!

Bob clicks on the link and 2 things may happen:

  1. He already has Birday installed $\Rightarrow$ the app opens up and immediately the pre-filled dialog shows up (no auto addition for security reasons - Bob still has to click an OK button)
  2. Otherwise, he's redirected to the Play Store to install it. Clicking on the deep link again will run point 1

Talking about implementation details, without using Firebase Deep Links or other Google products, the birday.app domain may run an extremely simple AWS Lambda (or equivalent) or maybe even a simple GitHub Pages single static file that runs a very little and simple JS function in user's browser such that it tries to open a deep link with custom scheme (like birday://whatever) or even letting Birday open birday.app links (using the .well-known/assetlinks.json file)

@m-i-n-a-r
Copy link
Owner

That's even better! I'll probably go for this solution. I'll update the issue when i start working on it 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants