Giter Site home page Giter Site logo

m-i-n-a-r / birday Goto Github PK

View Code? Open in Web Editor NEW
822.0 8.0 75.0 39.81 MB

🎉 A beautiful Kotlin app to remember birthdays and events without having to open Facebook, set alarms or rely on Google Calendar

License: Other

Kotlin 99.72% Shell 0.28%
birthday-reminder kotlin-android animated-vector-drawables room-database material-components google-contacts android material-design kotlin

birday's Introduction

Birday

An open source app to remember birthdays and events without having to open Facebook, set alarms or rely on Google Calendar.

Introduction

This is an open source app to remember birthdays and other events in a fast, light and beautiful way. No less, no more. I had this idea considering that Google Calendar doesn't display an automatic notification the day of the birthday, and sometimes i need to remember a birthday for a person who is not in my Contacts. Also, adding too much events to the calendar makes it messy and i prefer to manage them separately. The main focus of this app is being easy to use, clean and lightweight. I'm always glad to add features, but only important and really useful features!

Translations (guide and info below, refer to Crowdin)

LANGUAGE SPECIAL THANKS UPDATED BY
English myself ar-maged, Commenter25
Spanish myself Joseahfer
Swedish SlowNicoFish
Dutch stefanvi
Italian myself myself
French Mattis Biton
Hungarian Obi
German pizzapastamix WrstFngr, AlexanderRitter02
Vietnamese Lee Huynh dmtrilc
Russian koterpillar
Czech Miloš Koliáš IQLogic
Slovak IQLogic
Polish mateusz-bak
Croatian Dominik Novosel Dominik Novosel
Portuguese smarquespt smarquespt
Brazilian BadJuice67 Paiusco
Romanian ygorigor ygorigor
Traditional Chinese Still34 daoxi
Simplified Chinese daoxi daoxi
Catalan retiolus
Serbian Th3Unkn0wn0n3 vatonbero
Ukrainian taras
Greek Retrial
Marathi Ramesh Kumar
Malayalam Lavin-tom
Hindi assembleDebug
Finnish manaryde

Features

  • Notification the day of the event (with selectable time and optional grouping for multiple events in the same day)
  • Additional notification up to 21 days before the event (multiple selections are possible)
  • Import from contacts or calendar (import on first launch, auto import on each launch option, selectable on conflict strategy)
  • Easily backup and restore your saved events!
  • Experimental CSV and JSON import/export
  • insert an event manually, just specifying a first name, an optional last name, an image and a date (with optional year)
  • Choose your favorite events to see detailed information about them and a countdown for each one
  • Tap on an event to see every possible detail and the available actions
  • The birthdays are also automagically backed up in cloud by Google Play Services when the app is installed from Play Store
  • A set of stats (zodiac, average age and much more) when more than 5 events are inserted
  • Easily delete, modify and share the saved events!
  • Each event has an handy note field
  • Easily hide the top cards to display the list in fullscreen
  • Main list organized by month or alphabetically
  • Quick glance row, to visualize the events in the next 10 days
  • Yearly overview screen (advanced mode available)
  • A nice searchbar and an event type selector
  • Quick apps launcher
  • Light, dark, Amoled black and system default theme
  • Full Material 3 / Monet support
  • Selectable accent (no app restart needed, 12 choices)
  • Shimmer effect (it can be disabled) and confetti, because why not
  • Name first or surname first choice
  • Notification only for favorite events
  • Hide and show images
  • Material 3 configurable widgets (minimal and complete)
  • Beautiful animations (and animated notification icon, both can be disabled, but if you do it, be aware that I hate you)
  • Multiwindow / freeform full support
  • Animated splashscreen and app intro, dynamic layouts and more
  • Small and optimized apk size
  • 30+ locales supported and counting!

Screenshots

Download

The app is available through Google Play and F-Droid

Get it on F-Droid Get it on Google Play

Credits and contributions

Birday uses some open source libraries, just a few:

Top contributors (special thanks to them!):

  • Alberto Pedron for the precious advices and for contributing with many useful pull requests
  • Dominik Novosel for the suggestions, for supporting the project and for the LTS version
  • Simone Sestito for adding useful features and for being a great friend

Currently, Birday supports the languages in the above table. If you want to translate the app in any other language or update an existing translation, just contact me or send a pull request: you'll be quoted both on Github and in the Play Store description. For a detailed guide on how to translate the app, refer to the Wiki

This app was written during my free time as a training. It was first published on May 1, 2020. Many good devs helped me understanding the best practices and they taught me a lot of useful tricks. A special thank to every contributor here and on Reddit. and God bless Stack Overflow.

birday's People

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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

birday's Issues

contacts

Is there a way just to add the birthdays to existing contacts easily? This way they would also be displayed in the calendar app. Alternatively there could be an option to add contacts, because realistically you would have the phone number of people you want too congratulate, right?

Maybe contact import should also be executed automatically on first start up, took me a while to find it in settings.

Wrong date when modifying a new entry

Hey there, first off: great app! I very much like the effort and detail you put into the UI!

I stumbled upon some minor issue, most similar to:
#1

If you create a new entry but have to modify the date before saving, the date selector will not use the already added date, but will go back to todays date.

So for example:

  1. I create a new entry, enter user pre and surename and add the date 14. September 2001
  2. I click "OK" on the date selector
  3. I notice that I did not change the date - only the year. So I, again, click on the "select a date" selector
  4. The date selector opens with todays date and todays year

Thanks again for your work!

Export to csv

Exporting and maybe importing the entries in csv or txt files would be a nice to have.

The "(youngest|oldest) person" stat calculation is not taking months into account (it seems)

Description:
I have added two birthdays for People born in this year (February and the current month: September).
In the stats it is showing me the Person born in February as "the youngest person".

So it seems it is only respecting the Year as input. Mind my non-existing Kotlin skills, but it seems to be related to this one:

private fun getAge(eventResult: EventResult) = if (!eventResult.yearMatter!!) -1 else eventResult.nextDate!!.year - eventResult.originalDate.year - 1

Allow me to set the birth year as far back as I like

For what it's worth the app is great. However, a lot of the birthdays I want to be reminded of are for people who have passed away. Historical persons for example.

I shouldn't have to use a different app just because you only allow the person entered to be born max 100 years ago.

Please just allow us to write the year. It's faster and makes more sense. If you don't wish to add this as a default feature, please make it something I can enable in the settings.

Do this and I'll fully localise your app in a language you don't currently have as a thanks.

Hint texts are blocked on the home page and the favorites page

Describe the bug

Dear developer!
In the process of using, I found a bug in layout / display. As shown in the figure below, on the home page and the favorites page, hint texts are blocked by the round button below. This may be an adaptation problem. I suspect it is because display and font size are set to large (mainly due to display size).
Because of some problems with my eyesight, I often use the largest font and display.
103165857-dbaf8580-4857-11eb-9e22-120ae1901389

App version is 2.1.0, my mobile phone is Google Pixel 2, and the screen resolution setting is 1920* 1080. And my font size and display size are the largest ! ! ! Also, my Android system version is 10.0.
The above is a description of the problem. The overall experience of the software is good. You can see that the design is very attentive. Thank you very much for the efforts of the developers all the time. I hope to receive a reply. Thank you so much!!

Expected behavior

I hope that I can see all of the texts in those tab buttons, and in this circumstance, part of them seem to be blocked.

Steps to reproduce the behavior:

1.use the largest font and display in the display setting and then open this app
2.click the first tab button and then click the second one on the navigation bar at the bottom of the screen
3.this kind of error could be seen on two pages

Screenshot

(The blocked parts are marked in red)

copy copy

Environment

  1. Version of Birday: 2.1.0
  2. Device : Google Pixel 2,
  3. OS version : Android 10.0

Chinese year calculation should take into account full date

Years in Chinese lunar calendar ("Chinese zodiac") don't start on January 1. For example, year of the Rat started on January 25, 2020, and therefore someone born on January 10 would still be an Ox.

Birday should implement the lunar calendar properly and show the correct signs.

I've found:

Numbers and Symbols aren't allowed in name

When I try to enter the legal first name of someone I know:

Su3an

The app gives the error that "Numbers and Symbols aren't allowed in names."

Unfortunately, real names have no such restrictions. That validation should be turned off, and any character should be allowed in the name fields.

Also, related, but different (I can open a separate issue for this if you want):

When I enter a first name or last name with multiple words, or with an apostrophe in it, the app auto-capitalizes the separate words. This is not always correct. For example, this legal name

Ja’net

Gets corrected to

Ja'Net

Which is not her legal name. Also, the last name

van Zijl

Gets corrected to

Van Zijl

Which is not their legal last name, and is therefore incorrect.

Do these seem like changes you'd be willing to accept for Birday? If so, let me know, and I can try to figure out how to make these changes in the code. But I don't want to bother if they for sure wouldn't be accepted.

Thank you! :)

custom text setup for widget enhancement

Hi,
thanks for the great app it really looks good. It would be nice if the user could change the text setup for the widget. Right now it's like:

icon "upcoming birthdays"
<name>, <day in number> <month in text> <year>. <number> "remaining days"

for a minimalist like me, I don't need the icon or the text "upcoming birthdays" because it just takes up space I could use for useful information. what really bothers me is that there is two times information regarding the time being the exact date and the remaining days. if I could choose which text is displayed I would pick something like:
<name (maybe even full name)> is turning <number> in <number> days

this way you have the information how old someone turns and the remaining time until he/she does. so I don't have to open the app and check how old he/she gets or even calculate the age myself. getting more useful information with less text.

also it would be nice to see the next 2-3 birthdays and not just one (?). that is also a reason why it would be okay for me to drop the icon and "upcoming birthdays" and add the favourite icons before the contacts or something, so I see in an instant that one of my favourites is getting older soon

cheers

suggestion: allow other anniversaries

this app is fantastic! I always forget birthdays and google contacts clutters the list too much with insignificant dates.

other than birthdays, it would be fantastic to also have the option to add other anniversaries, like weddings. and maybe even deaths? (so I don't forget to send my condolences. although I realise that the festive icons do not really match this type of event. )

Now that I think of it, allowing other events then birthdays do mess with the statistics. it's probably needed to let the user decide if it's a birthday or some other kind of event. that way you could only use the birthday-entrys for stats.

Birday does not properly handle Feb 29 birthdays

Birday crashes upon launch or any interaction when the time is set to 00:07 on 1 Jan 2021. It can be fixed by setting the date to 31 Dec 2020. Experienced on a OnePlus 7 Pro running LineageOS for microG 17.1 (Dec update; based on Android 10 Open Source Project)

Februar is shown as March

On the German locale, when want to choose a month in the month picker the name of the month of March is also shown for Februar. When I press on it, it shows Februar though.
When Februar is choosen, everything works fine. If not, March is shown as the month name.
How it is ("Februar" unselected):
photo_2020-10-30_20-19-20

How it should be ("Februar" selected):
photo_2020-10-30_20-44-29

Xperia XA2
LineageOS 17.1 (Android 10)

Why the restriction on numbers and symbols in names?

This seems like a pointless restriction to me. If it makes the app run faster or work better, then that makes more sense. But otherwise, why have the app work against the user for no benefit? Yeah, you don't usually see people in the real world with numbers or symbols in their name, but what if I want to put someone's online username? What if I wanna put a little heart next to my partner's name?

Notification improvements

Right now, when a birthday reminder notification pops up, the text on the notification says "upcoming birthday! Name Surname". This isn't very helpful, tbh. I can't tell whether the birthday is today, tomorrow, or day after. Instead, the notification should say "Upcoming birthday tomorrow! Name Surname" or "Birthday in 2 days! Name Surname" or "Birthday today! Name Surname."

Showing the contact's photo on notification would be cool too.

Also, can you please make the notification sticky, so that they can't be accidentally swiped away? Add a "dismiss" action button to it and only clicking that should dismiss the notification.

Add birthday subevents

In some countries, name days are considered equal to birthdays or close to it - hence it's customary for people to note down people's birthdays, as well as name days. Having a custom field to add these in (since there might be more than 1, I have two per year) would be a welcome addition.

Date format

Would be nice if there was a DD/MM/YY mode for input.

track unbirthdays too: day of the week + day of month

Many people dislike the date of their birthday for some reason, for instance: if they were born on Christmas. An alternative birthday to celebrate is the day of the week plus the day of the month. My grandmother was born on Friday the 13th. She sometimes would celebrate Friday the 13th as though it were a birthday. IIRC, I think I was born on Sunday the 28th, so I could celebrate any month when the 28th is also a Sunday. The term "unbirthday" has been used a number of different ways, but while this isn't the most popular use, I think this is the only well-defined and useful definition of unbirthdays that I have come across.

Unbirthdays can occur up to twice a year, but are also absent some years, and also sometimes fall on the birthday itself. This is the kind of thing it would be helpful to rely on an app to track.

Improvements on the date input

I have found some ways to further improve the user experience.

  1. When the birth year is not included then it would look nicer in the input field if it would also not been shown there. In short: remove year in date input field if year is not being considered.
  2. You can't move forward to the future in the calendar. If you could, this would make it easier to select for example the next month and then pick a year. Or if the year is not being considered, then it is kind of a hassle to pick the last year just so you can pick a month which is further than the current one.

Other than that, I think the app really looks good! Good job!

Birthday notification timers

Hey I work midnight shift so it would be great for me to set reminders for birthdays in the afternoon, when I wakw up. Not sure why you have limited the time frame.

Feature Request: Cloud Backup

It would be great if there was an option to do a Cloud Backup. This could be done via using Google Drive or the 25MB-Auto-Backup included in Android, any cloud solution would help.

suggestion on unknown birth years

it would be great allowing not having a birth year! Now a lot of my contacts are from the year 2000, the standard import choice if nothing is mentioned). it's a bit strange to see a notification for my grandma's 20th birthday :)

Brainstorming further on that idea: if the birth year is not known, make it possible to add someone's age! This could be calculated back to the right year so from that moment on there's no doubt on their age again.

button vibration forced in date selection screen

Just leaving some more minor issues I found using the app. As stated in #11 I really appreciate your work with this app.

Description:
If you deselect the "Vibration" Option in the Customizations (so "No vibrations when a button is pressed" is shown), the date selection screen will still vibrate during button press. So f.e. switching the day, switching the month or pressing on the year will all trigger a phone vibration.

Thanks!

Add build instructions or nightly builds

Less advanced users may, for various reasons, like to test the latest version of the codebase but might not know how to compile it. I, for example, would like to test my translation before the next public release. Adding build instructions or, perhaps better yet, nightly builds would make testing the application much easier.

Add name format strings to the localization table

The Problem

Strings involving a person's name become impossible to localize in certain languages if the name cannot be freely moved around in the localized string.

Let's take random_chinese_year for example: the current English string is Chinese zodiac sign of, which under the context of the app would become thing like Chinese zodiac sign of Dave. This is fine in most Latin-written languages or countries. However, this string becomes impossible or awkward when localized in languages such as Chinese. In Chinese, the subject has to be moved to the front of the sentence in order to make the sentence readable, less awkward, or even to make sense at all. Think of it like Dave's Chinese zodiac sign, except in English both are acceptable while in Chinese it is not.

The Solution

Add strings involving a subject (e.g., names) as a format string in the string table. The above example would become Chinese zodiac sign of %s instead. That way, languages such as Chinese could be written as %s 的星座, where the %s has to be at the front of the sentence.

Option to disable zodiac / star sign

Displaying the zodiac signs may not be an big problem for many people, but it would still be nice to be able to deactivate it. Some people are quite opposed to astrology.

suggestion: change selection behavior

atm, long-press gives stats about the entry, short-press gives the options to edit or delete.

I'd like to suggest to combine the short-press and long-press menus to one menu. Could just look like the long-press menu, but with the two buttons (edit/delete) at the bottom. or even in the top-right as icons (trashcan and pencil, for instance)

this leaves the long-press unused. could perfectly be repurposed as a way to start the selection process (selecting multiple items for bulk delete or maybe even bulk edit? although that probably would rarely be used)

Support for older devices

I dont know if the programming language and effects you use are compatible with older android versions, but i would love to try your app if you add support for older versions as well :D

Bug: Birthdays dates are displaying the wrong date

Issue:
Hi! First of all, I must thank you for the app! I'm trying to leave Facebook and I've found this app to be exactly what I needed to take that step (I love the UI, btw). However, today I added my friend's birthdays for the first time and, although the date input is showing the correct value, the timeline/dashboard is showing them as if their birthdays are one day before they actually are.

Expected behaviour:
The birthdays should display the correct date.

Additional information:
UTF offset from where I live: UTC−05:00

Additional notification option per contact

Right now, notification settings are global and apply to all contact birthdays. But not all contacts are equally important. For most contacts, a reminder on the day of birthday is enough. For few other close friends, I'd like to get an additional notification 1 day before. For family members, I'd like to get another additional notification 1 week before.

Thus, instead of being a global setting, it'd be very useful if you can make "additional notification" a per contact setting.

Vibration on key press still on in calendar mode

Even though I have the vibrations on press off, it still vibrates when picking a date. I also tried restarting the app.
Also shouldn't that be something that one should choose in the system settings? Maybe remove the option?

Xperia XA2
LineageOS 17.1 (Android 10)

Suggestion: set minimum widget height to 1 row instead of 2

Hi!

I love your app, but there is one thing I'd like to see improved/changed. Currently, the minimum widget height is 2 rows, while the information shown (title/header and 1 upcoming birthday) should fit within a 1-row widget. Reducing the minimum widget height to 1 row would allow me to place some more shortcuts on my homescreen.

Sync with Contacts

Hi!

You have made a nice app, thanks for it!

It could be an interesting idea to synchronize your app with contacts. Now as I know, the feature works for import from Contacts. How about export to contacts?

I think, it'd be really cool!

Allow hiding instead of deleting dates

Usecase: I save birthdays in my contacts first. Whenever I pull the data from my contacts (because I added new data there) I have to delete some birthdays in birday which I don't want to be reminded about. If I could hide them instead of deleting, they wouldn't reappear after every sync. Right now I have to choose between deleting them in Birday everytime or deleting the data from my contacts completely. Neither are optimal solutions.

Thanks for the great app!

Add in-app language selector

I'm not sure if I'm the only one with this problem, but I prefer to keep my system language in English because my native language is very poor in IT terminology. But when I use Birday, I can't quickly work out things I don't often talk about in English such as dates and astrological signs. Seeing as though Birday pulls dates and their translations from the system, how difficult would this be to implement?

Wrong date when editing a birthday

When I try changing a birthday, a Bottomsheet will show up. Clicking on the date input, a calendar is opened correctly, but it is set to the current day instead of the birthday of the person I'm trying to edit.

Show next N number of birthdays in the widget, along with photos.

The widget currently is very bare bones. My suggestion is - adding some more features to it.

  1. Instead of showing just one next birthday, show N number of birthdays; for example, show next 5 birthdays. Or birthdays in the next 30 days.
  2. Instead of being just all text, show the contact photos on the left or right side of each row.

Export to external storage doesn't work

When clicking "export and share birthdays" the backup is supposed to be saved in Android/data/com.minar.birday/files. It is not saved there, there is not com.mindar.birday in Android/data. Backup can be exported to cloud eg. Nextcloud only it is not saved to phone's external storage.

App version 2.1.0 from F-Droid
Android 11
OnePlus 8T

Birthdays imported from phone contacts

The feature "Import birthdays from Google" also imports them from the phone storage (I don't have contacts saved in my google account, but the app still managed to import them from the storage). I think it would be better if it was called "Import birthdays from the phone" or something like that, since it can be confusing.

The app is great btw

Import contacts bug

I have Android 10 and i'm using birday version 2.1.0 .

I imported a vcf file using Contact app in the contact list of the device. Each contact in this file has a display name and a birthday.
Once imported, i tried to import these contacts using birday but none of them were recognized.

Is there any way to solve this issue? A simple solution can be to let the user imports contacts using a vcf file.

Add translation guide

Writing a translation guide would encourage more people, especially beginners like myself to translate Birday to other languages and help explain some of the specifics required to do so.
Some things such a guide should probably include:

  • The procedure to acquire strings.xml
  • The meaning of special symbols and why they should be left where they are
  • How to use escaped characters and what they are for, e.g. won't vs. won\'t
  • How to use language specific plurals, as excellently documented by https://developer.android.com/guide/topics/resources/string-resource#Plurals
  • Explain strings that may be difficult to translate without context, along with where they might appear
  • How to submit a pull request to add the translation
  • Some general tips and tricks

You know, things that are considered common knowledge among professional translators.

Add widget option to only show text if next birthday is closer than N days

Hey,
first of all, I love your app.
The widget looks really nice and I use it on my homescreen to remind me of upcomming birthdays.
At this moment the next birthday is 30 days in the future, which means for the next 30 days I will be reminded of this upcomming birthday every time I unlock my phone. I would love an option to have the widget only show text if the next birthday is closer than N days. This allows the widget to "get out of the way" if no birthdays are upcoming. Additionally, this allows for a more gentle way of beeing reminded, compared to the single notification X days before/on the birthday.
Thank you for developing this app! 😊

Manually Import events from calendar.

I don't have all birthday's in my contacts. For some acquittances, I have birthdays saved only in calendar, but I don't have these people saved in my contacts. Thus, a useful feature for me would be - ability to import events from Calendar.

Flow -

  1. I tap "Import from calendar" button.
  2. A list of calendar events show up.
  3. I tap the event I want to import.
  4. Birday populates the fields of a new birthday reminder entry, using the data of this event.

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.