├── .editorconfig
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── dependabot.yml
└── workflows
│ ├── foss-release.yml
│ ├── gplay-release.yml
│ ├── holiday-generator.yml
│ ├── holiday-generator
│ ├── .gitignore
│ ├── config.js
│ ├── main.js
│ └── package.json
│ ├── image-minimizer.yml
│ ├── no-response.yml
│ ├── pr-labeler.yml
│ ├── pr.yml
│ ├── release-commenter.yml
│ └── testing-build.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle.kts
├── detekt-baseline.xml
├── lint-baseline.xml
├── proguard-rules.pro
├── schemas
│ └── org.fossify.calendar.databases.EventsDatabase
│ │ ├── 10.json
│ │ ├── 11.json
│ │ ├── 8.json
│ │ └── 9.json
└── src
│ ├── debug
│ └── res
│ │ └── values
│ │ └── strings.xml
│ ├── foss
│ └── res
│ │ └── values
│ │ └── bools.xml
│ ├── gplay
│ └── res
│ │ └── values
│ │ └── bools.xml
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ └── holidays
│ │ ├── AR
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── AT
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── AU
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── BD
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── BE
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── BG
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── BO
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── BR
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── CA
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── CH
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── CN
│ │ └── public.ics
│ │ ├── CO
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── CR
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── CZ
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── DE
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── DK
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── DZ
│ │ └── public.ics
│ │ ├── EE
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── ES
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── FI
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── FR
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── GB
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── GR
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── HR
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── HT
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── HU
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── ID
│ │ └── public.ics
│ │ ├── IE
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── IL
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── IN
│ │ └── public.ics
│ │ ├── IS
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── IT
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── JP
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── KR
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── KZ
│ │ └── public.ics
│ │ ├── LI
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── LK
│ │ └── public.ics
│ │ ├── LT
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── LU
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── LV
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── MA
│ │ └── public.ics
│ │ ├── MK
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── MX
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── MY
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── NG
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── NI
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── NL
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── NO
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── PK
│ │ └── public.ics
│ │ ├── PL
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── PT
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── RO
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── RS
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── RU
│ │ └── public.ics
│ │ ├── SE
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── SG
│ │ └── public.ics
│ │ ├── SI
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── SK
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── TH
│ │ └── public.ics
│ │ ├── TR
│ │ └── public.ics
│ │ ├── TW
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── UA
│ │ └── public.ics
│ │ ├── US
│ │ ├── other.ics
│ │ ├── public.ics
│ │ └── regional.ics
│ │ ├── UY
│ │ ├── other.ics
│ │ └── public.ics
│ │ ├── ZA
│ │ ├── other.ics
│ │ └── public.ics
│ │ └── metadata.json
│ ├── ic_launcher-playstore.png
│ ├── kotlin
│ └── org
│ │ └── fossify
│ │ └── calendar
│ │ ├── activities
│ │ ├── EventActivity.kt
│ │ ├── EventTypePickerActivity.kt
│ │ ├── MainActivity.kt
│ │ ├── ManageEventTypesActivity.kt
│ │ ├── SelectTimeZoneActivity.kt
│ │ ├── SettingsActivity.kt
│ │ ├── SimpleActivity.kt
│ │ ├── SnoozeReminderActivity.kt
│ │ ├── SplashActivity.kt
│ │ ├── TaskActivity.kt
│ │ ├── WidgetDateConfigureActivity.kt
│ │ ├── WidgetListConfigureActivity.kt
│ │ └── WidgetMonthlyConfigureActivity.kt
│ │ ├── adapters
│ │ ├── AutoCompleteTextViewAdapter.kt
│ │ ├── CheckableColorAdapter.kt
│ │ ├── DayEventsAdapter.kt
│ │ ├── EventListAdapter.kt
│ │ ├── EventListWidgetAdapter.kt
│ │ ├── EventListWidgetAdapterEmpty.kt
│ │ ├── FilterEventTypeAdapter.kt
│ │ ├── ManageEventTypesAdapter.kt
│ │ ├── MyDayPagerAdapter.kt
│ │ ├── MyMonthDayPagerAdapter.kt
│ │ ├── MyMonthPagerAdapter.kt
│ │ ├── MyWeekPagerAdapter.kt
│ │ ├── MyYearPagerAdapter.kt
│ │ ├── QuickFilterEventTypeAdapter.kt
│ │ └── SelectTimeZoneAdapter.kt
│ │ ├── databases
│ │ └── EventsDatabase.kt
│ │ ├── dialogs
│ │ ├── CustomEventRepeatIntervalDialog.kt
│ │ ├── CustomPeriodPickerDialog.kt
│ │ ├── DateTimePatternInfoDialog.kt
│ │ ├── DeleteEventDialog.kt
│ │ ├── EditEventTypeDialog.kt
│ │ ├── EditRepeatingEventDialog.kt
│ │ ├── ExportEventsDialog.kt
│ │ ├── ImportEventsDialog.kt
│ │ ├── ManageAutomaticBackupsDialog.kt
│ │ ├── ReminderWarningDialog.kt
│ │ ├── RepeatLimitTypePickerDialog.kt
│ │ ├── RepeatRuleWeeklyDialog.kt
│ │ ├── SelectCalendarsDialog.kt
│ │ ├── SelectEventCalendarDialog.kt
│ │ ├── SelectEventColorDialog.kt
│ │ ├── SelectEventTypeColorDialog.kt
│ │ ├── SelectEventTypeDialog.kt
│ │ ├── SelectEventTypesDialog.kt
│ │ ├── SelectHolidayTypesDialog.kt
│ │ └── SetRemindersDialog.kt
│ │ ├── extensions
│ │ ├── Activity.kt
│ │ ├── Context.kt
│ │ ├── DateTime.kt
│ │ ├── Event.kt
│ │ ├── Int.kt
│ │ ├── ListEvent.kt
│ │ ├── Long.kt
│ │ ├── MonthViewEvent.kt
│ │ ├── Range.kt
│ │ ├── String.kt
│ │ ├── TextView.kt
│ │ └── View.kt
│ │ ├── fragments
│ │ ├── DayFragment.kt
│ │ ├── DayFragmentsHolder.kt
│ │ ├── EventListFragment.kt
│ │ ├── MonthDayFragment.kt
│ │ ├── MonthDayFragmentsHolder.kt
│ │ ├── MonthFragment.kt
│ │ ├── MonthFragmentsHolder.kt
│ │ ├── MyFragmentHolder.kt
│ │ ├── WeekFragment.kt
│ │ ├── WeekFragmentsHolder.kt
│ │ ├── YearFragment.kt
│ │ └── YearFragmentsHolder.kt
│ │ ├── helpers
│ │ ├── CalDAVHelper.kt
│ │ ├── Config.kt
│ │ ├── Constants.kt
│ │ ├── Converters.kt
│ │ ├── CssColors.kt
│ │ ├── EventsHelper.kt
│ │ ├── Formatter.kt
│ │ ├── HolidayHelper.kt
│ │ ├── HsvColorComparator.kt
│ │ ├── IcsExporter.kt
│ │ ├── IcsImporter.kt
│ │ ├── MonthlyCalendarImpl.kt
│ │ ├── MyTimeZones.kt
│ │ ├── MyWidgetDateProvider.kt
│ │ ├── MyWidgetListProvider.kt
│ │ ├── MyWidgetMonthlyProvider.kt
│ │ ├── Parser.kt
│ │ ├── SmartSwipeRefreshLayout.kt
│ │ ├── WeeklyCalendarImpl.kt
│ │ └── YearlyCalendarImpl.kt
│ │ ├── interfaces
│ │ ├── DeleteEventTypesListener.kt
│ │ ├── EventTypesDao.kt
│ │ ├── EventsDao.kt
│ │ ├── MonthlyCalendar.kt
│ │ ├── NavigationListener.kt
│ │ ├── TasksDao.kt
│ │ ├── WeekFragmentListener.kt
│ │ ├── WeeklyCalendar.kt
│ │ ├── WidgetsDao.kt
│ │ └── YearlyCalendar.kt
│ │ ├── jobs
│ │ └── CalDAVUpdateListener.kt
│ │ ├── models
│ │ ├── Attendee.kt
│ │ ├── CalDAVCalendar.kt
│ │ ├── DayMonthly.kt
│ │ ├── DayYearly.kt
│ │ ├── Event.kt
│ │ ├── EventRepetition.kt
│ │ ├── EventType.kt
│ │ ├── EventWeeklyView.kt
│ │ ├── HolidayInfo.kt
│ │ ├── ListEvent.kt
│ │ ├── ListItem.kt
│ │ ├── ListSectionDay.kt
│ │ ├── ListSectionMonth.kt
│ │ ├── MonthViewEvent.kt
│ │ ├── MyTimeZone.kt
│ │ ├── Reminder.kt
│ │ ├── Task.kt
│ │ └── Widget.kt
│ │ ├── objects
│ │ └── States.kt
│ │ ├── receivers
│ │ ├── AutomaticBackupReceiver.kt
│ │ ├── BootCompletedReceiver.kt
│ │ ├── CalDAVSyncReceiver.kt
│ │ └── NotificationReceiver.kt
│ │ ├── services
│ │ ├── MarkCompletedService.kt
│ │ ├── SnoozeService.kt
│ │ ├── WidgetService.kt
│ │ └── WidgetServiceEmpty.kt
│ │ └── views
│ │ ├── AutoGridLayoutManager.kt
│ │ ├── MonthView.kt
│ │ ├── MonthViewWrapper.kt
│ │ ├── MyScrollView.kt
│ │ ├── SmallMonthView.kt
│ │ └── WeeklyViewGrid.kt
│ └── res
│ ├── drawable-hdpi
│ ├── ic_check_green.png
│ ├── ic_cross_red.png
│ ├── ic_question_yellow.png
│ └── weekly_now.9.png
│ ├── drawable-nodpi
│ ├── img_widget_date_preview.png
│ ├── img_widget_list_preview.png
│ └── img_widget_monthly_preview.png
│ ├── drawable-xhdpi
│ ├── ic_check_green.png
│ ├── ic_cross_red.png
│ ├── ic_question_yellow.png
│ └── weekly_now.9.png
│ ├── drawable-xxhdpi
│ ├── ic_check_green.png
│ ├── ic_cross_red.png
│ ├── ic_question_yellow.png
│ └── weekly_now.9.png
│ ├── drawable-xxxhdpi
│ ├── ic_check_green.png
│ ├── ic_cross_red.png
│ ├── ic_question_yellow.png
│ └── weekly_now.9.png
│ ├── drawable
│ ├── activated_item_foreground_rounded.xml
│ ├── attendee_status_circular_background.xml
│ ├── day_monthly_event_background.xml
│ ├── day_monthly_event_background_widget.xml
│ ├── divider_width.xml
│ ├── event_list_color_bar.xml
│ ├── ic_bell_outline_vector.xml
│ ├── ic_calendar_vector.xml
│ ├── ic_category_outline_vector.xml
│ ├── ic_change_view_vector.xml
│ ├── ic_circle_vector.xml
│ ├── ic_clock_outline_vector.xml
│ ├── ic_color_outline_vector.xml
│ ├── ic_event_available_vector.xml
│ ├── ic_event_busy_vector.xml
│ ├── ic_event_status_outline_vector.xml
│ ├── ic_globe_vector.xml
│ ├── ic_launcher_background.xml
│ ├── ic_launcher_foreground.xml
│ ├── ic_launcher_monochrome.xml
│ ├── ic_lock_outline_vector.xml
│ ├── ic_mail_outline_vector.xml
│ ├── ic_people_outline_vector.xml
│ ├── ic_repeat_outline_vector.xml
│ ├── ic_task_vector.xml
│ ├── ic_today_vector.xml
│ ├── ic_work_outline_vector.xml
│ ├── selector_rounded.xml
│ ├── shortcut_event.xml
│ ├── shortcut_task.xml
│ ├── stroke_bottom.xml
│ ├── stroke_bottom_right.xml
│ └── stroke_right.xml
│ ├── layout-land
│ ├── fragment_month_day.xml
│ ├── fragment_year.xml
│ └── small_month_view_holder.xml
│ ├── layout
│ ├── activity_day.xml
│ ├── activity_event.xml
│ ├── activity_main.xml
│ ├── activity_manage_event_types.xml
│ ├── activity_select_time_zone.xml
│ ├── activity_settings.xml
│ ├── activity_task.xml
│ ├── all_day_events_holder_line.xml
│ ├── calendar_item_account.xml
│ ├── calendar_item_calendar.xml
│ ├── checkable_color_button.xml
│ ├── date_picker_dark.xml
│ ├── date_picker_light.xml
│ ├── datetime_pattern_info_layout.xml
│ ├── day_monthly_event_view.xml
│ ├── day_monthly_event_view_widget.xml
│ ├── day_monthly_number_view.xml
│ ├── dialog_custom_event_repeat_interval.xml
│ ├── dialog_custom_period_picker.xml
│ ├── dialog_delete_event.xml
│ ├── dialog_edit_repeating_event.xml
│ ├── dialog_event_type.xml
│ ├── dialog_export_events.xml
│ ├── dialog_filter_event_types.xml
│ ├── dialog_import_events.xml
│ ├── dialog_manage_automatic_backups.xml
│ ├── dialog_reminder_warning.xml
│ ├── dialog_repeat_limit_type_picker.xml
│ ├── dialog_select_calendars.xml
│ ├── dialog_select_color.xml
│ ├── dialog_select_event_type.xml
│ ├── dialog_select_holiday_types.xml
│ ├── dialog_select_radio_group.xml
│ ├── dialog_set_reminders.xml
│ ├── dialog_vertical_linear_layout.xml
│ ├── event_list_item.xml
│ ├── event_list_item_widget.xml
│ ├── event_list_section_day.xml
│ ├── event_list_section_day_widget.xml
│ ├── event_list_section_month.xml
│ ├── event_list_section_month_widget.xml
│ ├── filter_event_type_view.xml
│ ├── first_row.xml
│ ├── first_row_widget.xml
│ ├── fragment_day.xml
│ ├── fragment_days_holder.xml
│ ├── fragment_event_list.xml
│ ├── fragment_month.xml
│ ├── fragment_month_day.xml
│ ├── fragment_month_widget.xml
│ ├── fragment_month_widget_config.xml
│ ├── fragment_months_days_holder.xml
│ ├── fragment_months_holder.xml
│ ├── fragment_week.xml
│ ├── fragment_week_holder.xml
│ ├── fragment_year.xml
│ ├── fragment_years_holder.xml
│ ├── item_attendee.xml
│ ├── item_autocomplete_title_subtitle.xml
│ ├── item_event_type.xml
│ ├── item_select_time_zone.xml
│ ├── month_view.xml
│ ├── month_view_background.xml
│ ├── my_checkbox.xml
│ ├── quick_filter_event_type_view.xml
│ ├── radio_button_with_color.xml
│ ├── small_month_view_holder.xml
│ ├── top_navigation.xml
│ ├── week_all_day_event_marker.xml
│ ├── week_event_marker.xml
│ ├── week_grid_item.xml
│ ├── week_now_marker.xml
│ ├── weekly_view_day_column.xml
│ ├── weekly_view_day_letter.xml
│ ├── weekly_view_hour_textview.xml
│ ├── widget_config_date.xml
│ ├── widget_config_event_list.xml
│ ├── widget_config_list.xml
│ ├── widget_config_monthly.xml
│ ├── widget_date.xml
│ ├── widget_event_list.xml
│ └── widget_event_list_header.xml
│ ├── menu
│ ├── cab_day.xml
│ ├── cab_event_list.xml
│ ├── cab_event_type.xml
│ ├── menu_event.xml
│ ├── menu_event_types.xml
│ ├── menu_main.xml
│ ├── menu_select_time_zone.xml
│ └── menu_task.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ ├── ic_launcher_amber.xml
│ ├── ic_launcher_blue.xml
│ ├── ic_launcher_blue_grey.xml
│ ├── ic_launcher_brown.xml
│ ├── ic_launcher_cyan.xml
│ ├── ic_launcher_deep_orange.xml
│ ├── ic_launcher_deep_purple.xml
│ ├── ic_launcher_grey_black.xml
│ ├── ic_launcher_indigo.xml
│ ├── ic_launcher_light_blue.xml
│ ├── ic_launcher_light_green.xml
│ ├── ic_launcher_lime.xml
│ ├── ic_launcher_orange.xml
│ ├── ic_launcher_pink.xml
│ ├── ic_launcher_purple.xml
│ ├── ic_launcher_red.xml
│ ├── ic_launcher_teal.xml
│ └── ic_launcher_yellow.xml
│ ├── values-ar
│ └── strings.xml
│ ├── values-az
│ └── strings.xml
│ ├── values-b+es+419
│ └── strings.xml
│ ├── values-be
│ └── strings.xml
│ ├── values-bg
│ └── strings.xml
│ ├── values-bn-rBD
│ └── strings.xml
│ ├── values-bn
│ └── strings.xml
│ ├── values-br
│ └── strings.xml
│ ├── values-bs
│ └── strings.xml
│ ├── values-ca
│ └── strings.xml
│ ├── values-ckb
│ └── strings.xml
│ ├── values-cr
│ └── strings.xml
│ ├── values-cs
│ └── strings.xml
│ ├── values-cy
│ └── strings.xml
│ ├── values-da
│ └── strings.xml
│ ├── values-de
│ └── strings.xml
│ ├── values-el
│ └── strings.xml
│ ├── values-en-rGB
│ └── strings.xml
│ ├── values-en-rIN
│ └── strings.xml
│ ├── values-eo
│ └── strings.xml
│ ├── values-es-rUS
│ └── strings.xml
│ ├── values-es
│ └── strings.xml
│ ├── values-et
│ └── strings.xml
│ ├── values-eu
│ └── strings.xml
│ ├── values-fa
│ └── strings.xml
│ ├── values-fi
│ └── strings.xml
│ ├── values-fil
│ └── strings.xml
│ ├── values-fr
│ └── strings.xml
│ ├── values-ga
│ └── strings.xml
│ ├── values-gl
│ └── strings.xml
│ ├── values-hi-rIN
│ └── strings.xml
│ ├── values-hr
│ └── strings.xml
│ ├── values-hu
│ └── strings.xml
│ ├── values-ia
│ └── strings.xml
│ ├── values-in
│ └── strings.xml
│ ├── values-is
│ └── strings.xml
│ ├── values-it
│ └── strings.xml
│ ├── values-iw
│ └── strings.xml
│ ├── values-ja
│ └── strings.xml
│ ├── values-kn
│ └── strings.xml
│ ├── values-ko
│ └── strings.xml
│ ├── values-kr
│ └── strings.xml
│ ├── values-land
│ └── dimens.xml
│ ├── values-lt
│ └── strings.xml
│ ├── values-ltg
│ └── strings.xml
│ ├── values-lv
│ └── strings.xml
│ ├── values-mk
│ └── strings.xml
│ ├── values-ml
│ └── strings.xml
│ ├── values-ms
│ └── strings.xml
│ ├── values-my
│ └── strings.xml
│ ├── values-nb-rNO
│ └── strings.xml
│ ├── values-ne
│ └── strings.xml
│ ├── values-nl
│ └── strings.xml
│ ├── values-nn
│ └── strings.xml
│ ├── values-or
│ └── strings.xml
│ ├── values-pa-rPK
│ └── strings.xml
│ ├── values-pa
│ └── strings.xml
│ ├── values-pl
│ └── strings.xml
│ ├── values-pt-rBR
│ └── strings.xml
│ ├── values-pt-rPT
│ └── strings.xml
│ ├── values-pt
│ └── strings.xml
│ ├── values-ro
│ └── strings.xml
│ ├── values-ru
│ └── strings.xml
│ ├── values-sat
│ └── strings.xml
│ ├── values-si
│ └── strings.xml
│ ├── values-sk
│ └── strings.xml
│ ├── values-sl
│ └── strings.xml
│ ├── values-sr
│ └── strings.xml
│ ├── values-sv
│ └── strings.xml
│ ├── values-sw600dp
│ └── dimens.xml
│ ├── values-ta
│ └── strings.xml
│ ├── values-te
│ └── strings.xml
│ ├── values-th
│ └── strings.xml
│ ├── values-tr
│ └── strings.xml
│ ├── values-uk
│ └── strings.xml
│ ├── values-vi
│ └── strings.xml
│ ├── values-zgh
│ └── strings.xml
│ ├── values-zh-rCN
│ └── strings.xml
│ ├── values-zh-rHK
│ └── strings.xml
│ ├── values-zh-rTW
│ └── strings.xml
│ ├── values
│ ├── array.xml
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── donottranslate.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ ├── provider_paths.xml
│ ├── searchable.xml
│ ├── widget_date_info.xml
│ ├── widget_list_info.xml
│ └── widget_monthly_info.xml
├── build.gradle.kts
├── fastlane
├── Appfile
├── Fastfile
├── README.md
└── metadata
│ └── android
│ ├── ca
│ ├── full_description.txt
│ └── short_description.txt
│ ├── cs-CZ
│ ├── full_description.txt
│ └── short_description.txt
│ ├── da-DK
│ └── short_description.txt
│ ├── de-DE
│ ├── full_description.txt
│ └── short_description.txt
│ ├── en-US
│ ├── changelogs
│ │ ├── 1.txt
│ │ ├── 2.txt
│ │ ├── 3.txt
│ │ ├── 4.txt
│ │ ├── 5.txt
│ │ ├── 6.txt
│ │ └── 7.txt
│ ├── full_description.txt
│ ├── images
│ │ ├── featureGraphic.png
│ │ ├── icon.png
│ │ ├── phoneScreenshots
│ │ │ ├── 1_en-US.png
│ │ │ ├── 2_en-US.png
│ │ │ ├── 3_en-US.png
│ │ │ ├── 4_en-US.png
│ │ │ ├── 5_en-US.png
│ │ │ ├── 6_en-US.png
│ │ │ ├── 7_en-US.png
│ │ │ └── 8_en-US.png
│ │ └── tenInchScreenshots
│ │ │ ├── 1_en-US.png
│ │ │ ├── 2_en-US.png
│ │ │ ├── 3_en-US.png
│ │ │ ├── 4_en-US.png
│ │ │ ├── 5_en-US.png
│ │ │ └── 6_en-US.png
│ ├── short_description.txt
│ └── title.txt
│ ├── eo
│ └── short_description.txt
│ ├── es-ES
│ ├── full_description.txt
│ └── short_description.txt
│ ├── et
│ ├── full_description.txt
│ └── short_description.txt
│ ├── eu-ES
│ ├── full_description.txt
│ └── short_description.txt
│ ├── fr-FR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── hi-IN
│ ├── full_description.txt
│ └── short_description.txt
│ ├── hr
│ └── short_description.txt
│ ├── it-IT
│ ├── full_description.txt
│ └── short_description.txt
│ ├── iw-IL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ja-JP
│ └── short_description.txt
│ ├── nl-NL
│ └── short_description.txt
│ ├── pl-PL
│ ├── full_description.txt
│ └── short_description.txt
│ ├── pt-BR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── ru-RU
│ ├── full_description.txt
│ └── short_description.txt
│ ├── sv-SE
│ ├── full_description.txt
│ └── short_description.txt
│ ├── tr-TR
│ ├── full_description.txt
│ └── short_description.txt
│ ├── uk
│ ├── full_description.txt
│ └── short_description.txt
│ ├── zh-CN
│ ├── full_description.txt
│ └── short_description.txt
│ └── zh-TW
│ ├── full_description.txt
│ └── short_description.txt
├── gradle.properties
├── gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── graphics
├── featureGraphic.png
├── foreground.svg
├── icon.svg
└── icon.webp
├── keystore.properties_sample
└── settings.gradle.kts
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig
2 | # http://EditorConfig.org
3 |
4 | # top-most EditorConfig file
5 | root = true
6 |
7 | # LF end-of-line, insert an empty new line and UTF-8
8 | [*]
9 | end_of_line = lf
10 | insert_final_newline = true
11 | charset = utf-8
12 | indent_style = space
13 | indent_size = 4
14 | continuation_indent_size = 4
15 | max_line_length = 160
16 |
17 | [*.xml]
18 | continuation_indent_size = 4
19 |
20 | [*.kt]
21 | ij_kotlin_name_count_to_use_star_import = 5
22 | ij_kotlin_name_count_to_use_star_import_for_members = 5
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Questions
4 | url: https://github.com/FossifyOrg/Calendar/discussions
5 | about: Please ask and answer questions here.
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 |
3 | registries:
4 | maven-google:
5 | type: maven-repository
6 | url: "https://dl.google.com/dl/android/maven2/"
7 |
8 | maven-central:
9 | type: maven-repository
10 | url: "https://repo.maven.apache.org/maven2"
11 |
12 | jitpack:
13 | type: maven-repository
14 | url: "https://jitpack.io"
15 |
16 | updates:
17 | - package-ecosystem: "bundler"
18 | directory: "/"
19 | schedule:
20 | interval: "weekly"
21 | commit-message:
22 | prefix: "chore"
23 | prefix-development: "chore"
24 | include: "scope"
25 | assignees:
26 | - "naveensingh"
27 |
28 | - package-ecosystem: "gradle"
29 | directory: "/"
30 | registries:
31 | - maven-central
32 | - maven-google
33 | - jitpack
34 | schedule:
35 | interval: "weekly"
36 | commit-message:
37 | prefix: "chore"
38 | prefix-development: "chore"
39 | include: "scope"
40 | assignees:
41 | - "naveensingh"
42 |
43 | - package-ecosystem: "github-actions"
44 | directory: "/"
45 | schedule:
46 | interval: "weekly"
47 | commit-message:
48 | prefix: "chore"
49 | prefix-development: "chore"
50 | include: "scope"
51 | assignees:
52 | - "naveensingh"
53 |
--------------------------------------------------------------------------------
/.github/workflows/foss-release.yml:
--------------------------------------------------------------------------------
1 | name: Github Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - "*.*.*"
7 |
8 | jobs:
9 | call-release-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/release.yml@main
11 | with:
12 | tag: ${{ github.ref_name }}
13 | flavor: "foss"
14 | package_name: "org.fossify.calendar"
15 | secrets: inherit
--------------------------------------------------------------------------------
/.github/workflows/gplay-release.yml:
--------------------------------------------------------------------------------
1 | name: Google Play Release
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | track:
7 | description: "Google Play Store release track"
8 | required: false
9 | type: choice
10 | default: "beta"
11 | options:
12 | - internal
13 | - alpha
14 | - beta
15 | - production
16 | rollout:
17 | description: "Rollout fraction (0.0-1.0)"
18 | required: false
19 | type: string
20 | default: "0.05"
21 | validate_only:
22 | description: "Fastlane dry-run?"
23 | required: false
24 | type: boolean
25 | default: false
26 |
27 | jobs:
28 | call-release-workflow:
29 | uses: FossifyOrg/.github/.github/workflows/release.yml@main
30 | with:
31 | flavor: "gplay"
32 | package_name: "org.fossify.calendar"
33 | track: ${{ github.event.inputs.track }}
34 | rollout: ${{ github.event.inputs.rollout }}
35 | validate_only: ${{ github.event.inputs.validate_only == 'true' }}
36 | secrets: inherit
37 |
--------------------------------------------------------------------------------
/.github/workflows/holiday-generator.yml:
--------------------------------------------------------------------------------
1 | name: Generate holiday ICS files
2 |
3 | on:
4 | schedule:
5 | # Run every year on 1st December, midnight
6 | - cron: "0 0 1 12 *"
7 | workflow_dispatch:
8 |
9 | jobs:
10 | generate:
11 | name: Generate ICS
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
15 | - name: Install NodeJS
16 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
17 | with:
18 | node-version: 20
19 | - name: Run script
20 | env:
21 | LOG_ENABLED: true
22 | working-directory: ./.github/workflows/holiday-generator
23 | run: "npm install && npm start"
24 |
25 | - id: app-token
26 | uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e
27 | with:
28 | app-id: ${{ secrets.APP_ID }}
29 | private-key: ${{ secrets.APP_PRIVATE_KEY }}
30 |
31 | - name: Create PR
32 | uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e
33 | with:
34 | token: ${{ steps.app-token.outputs.token }}
35 | sign-commits: true
36 | commit-message: "chore: update holidays"
37 | title: "chore: update holidays"
38 | body: " "
39 |
--------------------------------------------------------------------------------
/.github/workflows/holiday-generator/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | package-lock.json
3 |
--------------------------------------------------------------------------------
/.github/workflows/holiday-generator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@fossify/holiday-generator",
3 | "version": "1.0.0",
4 | "description": "Holiday generator for Fossify Calendar",
5 | "main": "main.js",
6 | "type": "module",
7 | "scripts": {
8 | "start": "node main.js"
9 | },
10 | "license": "GPL-3.0-only",
11 | "dependencies": {
12 | "date-holidays": "^3",
13 | "ics": "^3.7.2"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.github/workflows/image-minimizer.yml:
--------------------------------------------------------------------------------
1 | name: Image Minimizer
2 |
3 | on:
4 | issue_comment:
5 | types: [created, edited]
6 | issues:
7 | types: [opened, edited]
8 | pull_request_target:
9 | types: [opened, edited]
10 |
11 | jobs:
12 | call-image-minimizer-workflow:
13 | uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
14 | secrets: inherit
15 |
--------------------------------------------------------------------------------
/.github/workflows/no-response.yml:
--------------------------------------------------------------------------------
1 | name: No Response
2 |
3 | on:
4 | schedule:
5 | - cron: "0 12 * * *" # Runs daily at noon
6 | workflow_dispatch:
7 |
8 | jobs:
9 | call-no-response-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
11 | secrets: inherit
12 |
--------------------------------------------------------------------------------
/.github/workflows/pr-labeler.yml:
--------------------------------------------------------------------------------
1 | name: PR Labeler
2 |
3 | on:
4 | pull_request_target:
5 | types: [opened]
6 |
7 | jobs:
8 | call-pr-labeler-workflow:
9 | uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
10 | secrets: inherit
11 |
--------------------------------------------------------------------------------
/.github/workflows/pr.yml:
--------------------------------------------------------------------------------
1 | name: PR
2 |
3 | on:
4 | pull_request:
5 | branches: [ master ]
6 |
7 | jobs:
8 | call-pr-workflow:
9 | uses: FossifyOrg/.github/.github/workflows/pr.yml@main
10 |
--------------------------------------------------------------------------------
/.github/workflows/release-commenter.yml:
--------------------------------------------------------------------------------
1 | name: Release Commenter
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | call-release-commenter:
9 | uses: FossifyOrg/.github/.github/workflows/release-commenter.yml@main
10 | secrets: inherit
11 |
--------------------------------------------------------------------------------
/.github/workflows/testing-build.yml:
--------------------------------------------------------------------------------
1 | name: Testing build (on PR)
2 |
3 | on:
4 | pull_request:
5 | branches: [ master ]
6 | types: [ labeled, opened, synchronize, reopened ]
7 |
8 | jobs:
9 | call-testing-build-workflow:
10 | uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.aab
3 | .gradle
4 | /local.properties
5 | /.idea/
6 | .DS_Store
7 | /build
8 | /captures
9 | keystore.jks
10 | keystore.properties
11 | fastlane/fastlane.json
12 | fastlane/report.xml
13 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 | gem "fastlane-plugin-fossify", "~> 1.0"
5 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /gplay/
3 | /foss/
4 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | -keep class org.fossify.calendar.models.** { *; }
2 |
--------------------------------------------------------------------------------
/app/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Calendar_debug
4 |
5 |
--------------------------------------------------------------------------------
/app/src/foss/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 | true
6 |
7 |
--------------------------------------------------------------------------------
/app/src/gplay/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | false
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/AR/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_0e7613bedda25339a988d6eed7278f629fbfef00
9 | SUMMARY:Nochebuena
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:20251224
12 | DTEND;VALUE=DATE:20251225
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_5d2b821003461ec94bcd4ba8aa01c04a31dab775
17 | SUMMARY:Fin del Año
18 | DTSTAMP:20250513T152647Z
19 | DTSTART;VALUE=DATE:20251231
20 | DTEND;VALUE=DATE:20260101
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_ff8a2ae410c147843783264870b9e602c3c7a28e
25 | SUMMARY:Nochebuena
26 | DTSTAMP:20250513T152647Z
27 | DTSTART;VALUE=DATE:20261224
28 | DTEND;VALUE=DATE:20261225
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_c6a841ba2938ee8be39005d79bced97f154c7484
33 | SUMMARY:Fin del Año
34 | DTSTAMP:20250513T152647Z
35 | DTSTART;VALUE=DATE:20261231
36 | DTEND;VALUE=DATE:20270101
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/AT/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_fa49dfe8b4ab3a845bd5128309fc4eacb6480d50
9 | SUMMARY:Karsamstag
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:20250419
12 | DTEND;VALUE=DATE:20250420
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_60d6c2096bc27e4216742a3a53bdf41aeb28b9ac
17 | SUMMARY:Muttertag
18 | DTSTAMP:20250513T152647Z
19 | DTSTART;VALUE=DATE:20250511
20 | DTEND;VALUE=DATE:20250512
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_49b0af4672459d91d38c820bb7c5c6cef45200b6
25 | SUMMARY:Karsamstag
26 | DTSTAMP:20250513T152647Z
27 | DTSTART;VALUE=DATE:20260404
28 | DTEND;VALUE=DATE:20260405
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_d8d8f45875c042dd880400b39ef19ed4ea5c8de2
33 | SUMMARY:Muttertag
34 | DTSTAMP:20250513T152647Z
35 | DTSTART;VALUE=DATE:20260510
36 | DTEND;VALUE=DATE:20260511
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/AT/regional.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_755bbc0c6739dfc12aea58e1592c43678c07e50e
9 | SUMMARY:Martinstag
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:19801111
12 | DTEND;VALUE=DATE:19801112
13 | DESCRIPTION:Burgenland
14 | STATUS:CONFIRMED
15 | RRULE:FREQ=YEARLY
16 | END:VEVENT
17 | BEGIN:VEVENT
18 | UID:fossify_6c9fa346262d3446750a19ec8e95a33dfd8bfeb2
19 | SUMMARY:Tag der Volksabstimmung
20 | DTSTAMP:20250513T152647Z
21 | DTSTART;VALUE=DATE:19801010
22 | DTEND;VALUE=DATE:19801011
23 | DESCRIPTION:Kärnten
24 | STATUS:CONFIRMED
25 | RRULE:FREQ=YEARLY
26 | END:VEVENT
27 | BEGIN:VEVENT
28 | UID:fossify_676ed535e94c561f4ee0acb7025c0ccf9df36112
29 | SUMMARY:Florian
30 | DTSTAMP:20250513T152647Z
31 | DTSTART;VALUE=DATE:19800504
32 | DTEND;VALUE=DATE:19800505
33 | DESCRIPTION:Oberösterreich
34 | STATUS:CONFIRMED
35 | RRULE:FREQ=YEARLY
36 | END:VEVENT
37 | BEGIN:VEVENT
38 | UID:fossify_386a3c756c766afd2fe1143ef9c1dea6794d08df
39 | SUMMARY:Rupert
40 | DTSTAMP:20250513T152647Z
41 | DTSTART;VALUE=DATE:19800924
42 | DTEND;VALUE=DATE:19800925
43 | DESCRIPTION:Land Salzburg
44 | STATUS:CONFIRMED
45 | RRULE:FREQ=YEARLY
46 | END:VEVENT
47 | END:VCALENDAR
48 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/AU/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_5003df99a7c56faf11a9eff335ca65e44f934b40
9 | SUMMARY:Mother's Day
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:20250511
12 | DTEND;VALUE=DATE:20250512
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_8513898005b16f6394e8f54f883a6c23bfeb32d5
17 | SUMMARY:Father's Day
18 | DTSTAMP:20250513T152647Z
19 | DTSTART;VALUE=DATE:20250907
20 | DTEND;VALUE=DATE:20250908
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_b77ca3cc868d24f7c4c4d17f38ab4db08fcd9103
25 | SUMMARY:Mother's Day
26 | DTSTAMP:20250513T152647Z
27 | DTSTART;VALUE=DATE:20260510
28 | DTEND;VALUE=DATE:20260511
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_4e526ec37f32daf02196e33539b32d99bff72601
33 | SUMMARY:Father's Day
34 | DTSTAMP:20250513T152647Z
35 | DTSTART;VALUE=DATE:20260906
36 | DTEND;VALUE=DATE:20260907
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/BD/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_73cdd01300974ae43694d5ade2f6d9db7deb33f6
9 | SUMMARY:Genocide Remembrance Day
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:19800325
12 | DTEND;VALUE=DATE:19800326
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_89334df910a1036507bb278952339a1f1914cfc9
18 | SUMMARY:Armed Forces Day
19 | DTSTAMP:20250513T152647Z
20 | DTSTART;VALUE=DATE:19801121
21 | DTEND;VALUE=DATE:19801122
22 | STATUS:CONFIRMED
23 | RRULE:FREQ=YEARLY
24 | END:VEVENT
25 | BEGIN:VEVENT
26 | UID:fossify_68af669f2183577c6db5053a18110f750c9751db
27 | SUMMARY:Martyred Intellectuals Day
28 | DTSTAMP:20250513T152647Z
29 | DTSTART;VALUE=DATE:19801214
30 | DTEND;VALUE=DATE:19801215
31 | STATUS:CONFIRMED
32 | RRULE:FREQ=YEARLY
33 | END:VEVENT
34 | END:VCALENDAR
35 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/BG/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_5c31d5ca2127fcab39542660f64cf4525facf4dc
9 | SUMMARY:Баба Марта
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:19800301
12 | DTEND;VALUE=DATE:19800302
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_65b00bca3296a4aada0aba8b2f952c1c6b0a7ff9
18 | SUMMARY:Ден на жената
19 | DTSTAMP:20250513T152647Z
20 | DTSTART;VALUE=DATE:19800308
21 | DTEND;VALUE=DATE:19800309
22 | STATUS:CONFIRMED
23 | RRULE:FREQ=YEARLY
24 | END:VEVENT
25 | BEGIN:VEVENT
26 | UID:fossify_c001ad7242f11f79db49544ad7559d5ac4633c30
27 | SUMMARY:Ден на радиото и телевизията
28 | DTSTAMP:20250513T152647Z
29 | DTSTART;VALUE=DATE:19800507
30 | DTEND;VALUE=DATE:19800508
31 | STATUS:CONFIRMED
32 | RRULE:FREQ=YEARLY
33 | END:VEVENT
34 | BEGIN:VEVENT
35 | UID:fossify_7234b7c5e9715a0f9aa04301d4ab092a5e339655
36 | SUMMARY:Ден на народните будители
37 | DTSTAMP:20250513T152647Z
38 | DTSTART;VALUE=DATE:19801101
39 | DTEND;VALUE=DATE:19801102
40 | STATUS:CONFIRMED
41 | RRULE:FREQ=YEARLY
42 | END:VEVENT
43 | BEGIN:VEVENT
44 | UID:fossify_9156019c7e06c22a5ecc36f6e0ea14bdfe4354c7
45 | SUMMARY:2-ри ден на Коледа
46 | DTSTAMP:20250513T152647Z
47 | DTSTART;VALUE=DATE:19801226
48 | DTEND;VALUE=DATE:19801227
49 | STATUS:CONFIRMED
50 | RRULE:FREQ=YEARLY
51 | END:VEVENT
52 | END:VCALENDAR
53 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/CH/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_450cbb92e46ecdbbe4ce03bc6e441bb24f841179
9 | SUMMARY:Gründonnerstag
10 | DTSTAMP:20250513T152647Z
11 | DTSTART;VALUE=DATE:20250417
12 | DTEND;VALUE=DATE:20250418
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_60d6c2096bc27e4216742a3a53bdf41aeb28b9ac
17 | SUMMARY:Muttertag
18 | DTSTAMP:20250513T152647Z
19 | DTSTART;VALUE=DATE:20250511
20 | DTEND;VALUE=DATE:20250512
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_65f5335b8862a84a43fed4966392423c1bbc6cfe
25 | SUMMARY:Vätertag
26 | DTSTAMP:20250513T152647Z
27 | DTSTART;VALUE=DATE:20250601
28 | DTEND;VALUE=DATE:20250602
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_429c28e2bccd0e5eab2db688d3f505338a802ade
33 | SUMMARY:Gründonnerstag
34 | DTSTAMP:20250513T152647Z
35 | DTSTART;VALUE=DATE:20260402
36 | DTEND;VALUE=DATE:20260403
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | BEGIN:VEVENT
40 | UID:fossify_d8d8f45875c042dd880400b39ef19ed4ea5c8de2
41 | SUMMARY:Muttertag
42 | DTSTAMP:20250513T152647Z
43 | DTSTART;VALUE=DATE:20260510
44 | DTEND;VALUE=DATE:20260511
45 | STATUS:CONFIRMED
46 | END:VEVENT
47 | BEGIN:VEVENT
48 | UID:fossify_29b68e918cc0bdba7bf891c713d34f2ecfa86d47
49 | SUMMARY:Vätertag
50 | DTSTAMP:20250513T152647Z
51 | DTSTART;VALUE=DATE:20260607
52 | DTEND;VALUE=DATE:20260608
53 | STATUS:CONFIRMED
54 | END:VEVENT
55 | END:VCALENDAR
56 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/CO/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_53628bdc2adcdf618c0112f205a825c3d12c232c
9 | SUMMARY:Domingo de Ramos
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250413
12 | DTEND;VALUE=DATE:20250414
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_31b33974657457e010caa4d05c0f0d5886173396
17 | SUMMARY:Domingo de Ramos
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20260329
20 | DTEND;VALUE=DATE:20260330
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | END:VCALENDAR
24 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/CR/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_0c7dada38494914897307fbb732ab75600dfdc27
9 | SUMMARY:Pascua
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250420
12 | DTEND;VALUE=DATE:20250421
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_56896ce630dfb91e95f56652a32700de821c51b0
17 | SUMMARY:Pascua
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20260405
20 | DTEND;VALUE=DATE:20260406
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | END:VCALENDAR
24 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/FI/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_9449bafb4bb70d0421f7443d488237b75e4a15a1
9 | SUMMARY:Äitienpäivä
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250511
12 | DTEND;VALUE=DATE:20250512
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_e4955bc66cc803ff34c974bb955de0ecfaacfe6b
17 | SUMMARY:Isänpäivä
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20251109
20 | DTEND;VALUE=DATE:20251110
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_b383367cd9183542a13a6b359b1ddf7f7241b031
25 | SUMMARY:Äitienpäivä
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20260510
28 | DTEND;VALUE=DATE:20260511
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_e2dc91c79d5a650f9e00c0fa81e79ba68b1387a8
33 | SUMMARY:Isänpäivä
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20261108
36 | DTEND;VALUE=DATE:20261109
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/FR/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_533a56edf2845a0e74a305b62a9dddbc3a7830f4
9 | SUMMARY:Fête des Mères
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250525
12 | DTEND;VALUE=DATE:20250526
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_b979fc2f5fc0a70478cb386b0fc9f42b7ff7b533
17 | SUMMARY:Pentecôte
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20250608
20 | DTEND;VALUE=DATE:20250609
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_f6b070d9182f87754c9ef738bdb5d3af46a25903
25 | SUMMARY:Pentecôte
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20260524
28 | DTEND;VALUE=DATE:20260525
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_5b24b936bceada2565770e5681cac216674037f1
33 | SUMMARY:Fête des Mères
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20260531
36 | DTEND;VALUE=DATE:20260601
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/GB/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_f3c11dac03b4639783febf8bacd2fb1ec14aa154
9 | SUMMARY:Mother's Day
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250330
12 | DTEND;VALUE=DATE:20250331
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_d201bd7e7a4507c49bab184c935f0d328675d08b
17 | SUMMARY:Easter Sunday
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20250420
20 | DTEND;VALUE=DATE:20250421
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_7153387661a20140f4f0cbd6434f149037b4f801
25 | SUMMARY:Father's Day
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20250615
28 | DTEND;VALUE=DATE:20250616
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_a3bd72f16034ad6fdcb5ae015a078132ed0bd26b
33 | SUMMARY:Mother's Day
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20260315
36 | DTEND;VALUE=DATE:20260316
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | BEGIN:VEVENT
40 | UID:fossify_9f877f178aebdb3c59156a67c532b32364bcfb13
41 | SUMMARY:Easter Sunday
42 | DTSTAMP:20250513T152648Z
43 | DTSTART;VALUE=DATE:20260405
44 | DTEND;VALUE=DATE:20260406
45 | STATUS:CONFIRMED
46 | END:VEVENT
47 | BEGIN:VEVENT
48 | UID:fossify_2ddf2a5ce5f1890a65a8dc533ffd19cb12d927e0
49 | SUMMARY:Father's Day
50 | DTSTAMP:20250513T152648Z
51 | DTSTART;VALUE=DATE:20260621
52 | DTEND;VALUE=DATE:20260622
53 | STATUS:CONFIRMED
54 | END:VEVENT
55 | END:VCALENDAR
56 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/GR/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_84971ac006ac5cf7311e32c1e20a677453c6d7e6
9 | SUMMARY:Γιορτή της μητέρας
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250511
12 | DTEND;VALUE=DATE:20250512
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_a2b035b6aec75dd26ec289e7962fc94e7b4a0541
17 | SUMMARY:Γιορτή της μητέρας
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20260510
20 | DTEND;VALUE=DATE:20260511
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | END:VCALENDAR
24 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/HT/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_b6a1c4f3ab3c9f5b5212b2683d89078fa5470847
9 | SUMMARY:Le Jour des Rois
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:19800106
12 | DTEND;VALUE=DATE:19800107
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_e0d56743a74aa1fe498965589ba0e74a621e49f6
18 | SUMMARY:Mercredi des Cendres
19 | DTSTAMP:20250513T152648Z
20 | DTSTART;VALUE=DATE:20250305
21 | DTEND;VALUE=DATE:20250306
22 | STATUS:CONFIRMED
23 | END:VEVENT
24 | BEGIN:VEVENT
25 | UID:fossify_30704f1a99c507fb4fbe86fcd9b19892afaece4c
26 | SUMMARY:Découverte d'Haïti
27 | DTSTAMP:20250513T152648Z
28 | DTSTART;VALUE=DATE:19801205
29 | DTEND;VALUE=DATE:19801206
30 | STATUS:CONFIRMED
31 | RRULE:FREQ=YEARLY
32 | END:VEVENT
33 | BEGIN:VEVENT
34 | UID:fossify_d31a61fb02a2dce43cbc9c2e8d68b1045c7b326f
35 | SUMMARY:Mercredi des Cendres
36 | DTSTAMP:20250513T152648Z
37 | DTSTART;VALUE=DATE:20260218
38 | DTEND;VALUE=DATE:20260219
39 | STATUS:CONFIRMED
40 | END:VEVENT
41 | END:VCALENDAR
42 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/IE/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_f3c11dac03b4639783febf8bacd2fb1ec14aa154
9 | SUMMARY:Mother's Day
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250330
12 | DTEND;VALUE=DATE:20250331
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_7153387661a20140f4f0cbd6434f149037b4f801
17 | SUMMARY:Father's Day
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20250615
20 | DTEND;VALUE=DATE:20250616
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_a3bd72f16034ad6fdcb5ae015a078132ed0bd26b
25 | SUMMARY:Mother's Day
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20260315
28 | DTEND;VALUE=DATE:20260316
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_2ddf2a5ce5f1890a65a8dc533ffd19cb12d927e0
33 | SUMMARY:Father's Day
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20260621
36 | DTEND;VALUE=DATE:20260622
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/IT/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_9d77d017c19c03ad6aa5725e7e36ea40f197717c
9 | SUMMARY:Festa della mamma
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250511
12 | DTEND;VALUE=DATE:20250512
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_13ec3158e090cb55a693ccc1b12b8a80349d01be
17 | SUMMARY:Festa della mamma
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20260510
20 | DTEND;VALUE=DATE:20260511
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | END:VCALENDAR
24 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/IT/regional.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_a4776fc875f436692cd23ce82bb85bbf993aef0f
9 | SUMMARY:Lunedì di Pentecoste
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250609
12 | DTEND;VALUE=DATE:20250610
13 | DESCRIPTION:Alto Adige
14 | STATUS:CONFIRMED
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_2919d46ec0e95408f1de04ae7ce0c5f9a5c1ecc5
18 | SUMMARY:Lunedì di Pentecoste
19 | DTSTAMP:20250513T152648Z
20 | DTSTART;VALUE=DATE:20260525
21 | DTEND;VALUE=DATE:20260526
22 | DESCRIPTION:Alto Adige
23 | STATUS:CONFIRMED
24 | END:VEVENT
25 | END:VCALENDAR
26 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/JP/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_c552eab0424a680611517a899a95eb02a8b46565
9 | SUMMARY:七五三
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:19801115
12 | DTEND;VALUE=DATE:19801116
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_201a3c775674d623a3c53140213bed4270961d39
18 | SUMMARY:ノエル
19 | DTSTAMP:20250513T152648Z
20 | DTSTART;VALUE=DATE:19801225
21 | DTEND;VALUE=DATE:19801226
22 | STATUS:CONFIRMED
23 | RRULE:FREQ=YEARLY
24 | END:VEVENT
25 | END:VCALENDAR
26 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/KR/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_80ec3d15f1c854938e60f3411e765993a9b86d96
9 | SUMMARY:제헌절
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:19800717
12 | DTEND;VALUE=DATE:19800718
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | END:VCALENDAR
17 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/LT/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_81d181976e405dbe5ff366384419cb96f57170b7
9 | SUMMARY:Motinos diena
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250504
12 | DTEND;VALUE=DATE:20250505
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_5116da2e3134a5074a6be926a0a79dbf9ea0b06f
17 | SUMMARY:Tėvo diena
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20250601
20 | DTEND;VALUE=DATE:20250602
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_640ccf8321399168bfdce6783368e1f9fe0d7227
25 | SUMMARY:Motinos diena
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20260503
28 | DTEND;VALUE=DATE:20260504
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_80b9af3b07e0c5bb895bc7c32814c3fd2acfaf65
33 | SUMMARY:Tėvo diena
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20260607
36 | DTEND;VALUE=DATE:20260608
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/LU/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_f13576904452a76e744284175a4884492185b336
9 | SUMMARY:Vendredi saint
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250418
12 | DTEND;VALUE=DATE:20250419
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_ada3b7781cdc883075c8562c4c13c2fb05829cbb
17 | SUMMARY:Pâques
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20250420
20 | DTEND;VALUE=DATE:20250421
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_a44d35f6e3be6f3dc2b5726916e983c43db67010
25 | SUMMARY:Vendredi saint
26 | DTSTAMP:20250513T152648Z
27 | DTSTART;VALUE=DATE:20260403
28 | DTEND;VALUE=DATE:20260404
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_f1c3b7337f88da8e90a33c4374db65b16db0c145
33 | SUMMARY:Pâques
34 | DTSTAMP:20250513T152648Z
35 | DTSTART;VALUE=DATE:20260405
36 | DTEND;VALUE=DATE:20260406
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | END:VCALENDAR
40 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/LV/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_5030af43a196584c454ced8abe88dba2c6743d4b
9 | SUMMARY:Mātes diena
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:20250511
12 | DTEND;VALUE=DATE:20250512
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_776eb0fa5c05f5ed7d8d4314a39865b15306eca3
17 | SUMMARY:Mātes diena
18 | DTSTAMP:20250513T152648Z
19 | DTSTART;VALUE=DATE:20260510
20 | DTEND;VALUE=DATE:20260511
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | END:VCALENDAR
24 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/MX/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_20d6432e6eec4075aa83b29779e3e9b77b143a4f
9 | SUMMARY:Día de la Madre
10 | DTSTAMP:20250513T152648Z
11 | DTSTART;VALUE=DATE:19800510
12 | DTEND;VALUE=DATE:19800511
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | END:VCALENDAR
17 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/NG/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_d201bd7e7a4507c49bab184c935f0d328675d08b
9 | SUMMARY:Easter Sunday
10 | DTSTAMP:20250513T152649Z
11 | DTSTART;VALUE=DATE:20250420
12 | DTEND;VALUE=DATE:20250421
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_ca36f5e2e8106f74b8a8332b5d284ad3b4df3a51
17 | SUMMARY:New Year's Eve
18 | DTSTAMP:20250513T152649Z
19 | DTSTART;VALUE=DATE:19801231
20 | DTEND;VALUE=DATE:19810101
21 | STATUS:CONFIRMED
22 | RRULE:FREQ=YEARLY
23 | END:VEVENT
24 | BEGIN:VEVENT
25 | UID:fossify_9f877f178aebdb3c59156a67c532b32364bcfb13
26 | SUMMARY:Easter Sunday
27 | DTSTAMP:20250513T152649Z
28 | DTSTART;VALUE=DATE:20260405
29 | DTEND;VALUE=DATE:20260406
30 | STATUS:CONFIRMED
31 | END:VEVENT
32 | END:VCALENDAR
33 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/NI/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_1d6331b52c4661efd38ceeb759122f8a0b7ad6f6
9 | SUMMARY:Natalicio de Rubén Darío
10 | DTSTAMP:20250513T152649Z
11 | DTSTART;VALUE=DATE:19800118
12 | DTEND;VALUE=DATE:19800119
13 | STATUS:CONFIRMED
14 | RRULE:FREQ=YEARLY
15 | END:VEVENT
16 | BEGIN:VEVENT
17 | UID:fossify_781f4cfcc8b2e2f2820b22d809f9b495d27c5b4c
18 | SUMMARY:Día de la madre nicaragüense
19 | DTSTAMP:20250513T152649Z
20 | DTSTART;VALUE=DATE:19800530
21 | DTEND;VALUE=DATE:19800531
22 | STATUS:CONFIRMED
23 | RRULE:FREQ=YEARLY
24 | END:VEVENT
25 | BEGIN:VEVENT
26 | UID:fossify_b89858c27e206c758c4f3a0671b5ab0cd1e98397
27 | SUMMARY:Día del padre nicaragüense
28 | DTSTAMP:20250513T152649Z
29 | DTSTART;VALUE=DATE:19800623
30 | DTEND;VALUE=DATE:19800624
31 | STATUS:CONFIRMED
32 | RRULE:FREQ=YEARLY
33 | END:VEVENT
34 | BEGIN:VEVENT
35 | UID:fossify_b5067907e3f99e90f5b5a1e4f9bf9a4726482503
36 | SUMMARY:Nochebuena
37 | DTSTAMP:20250513T152649Z
38 | DTSTART;VALUE=DATE:19801224
39 | DTEND;VALUE=DATE:19801225
40 | STATUS:CONFIRMED
41 | RRULE:FREQ=YEARLY
42 | END:VEVENT
43 | BEGIN:VEVENT
44 | UID:fossify_4007e95a4ca69ee8a9e7be71814da4df488aabd7
45 | SUMMARY:Fin del Año
46 | DTSTAMP:20250513T152649Z
47 | DTSTART;VALUE=DATE:19801231
48 | DTEND;VALUE=DATE:19810101
49 | STATUS:CONFIRMED
50 | RRULE:FREQ=YEARLY
51 | END:VEVENT
52 | END:VCALENDAR
53 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/PK/public.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | BEGIN:VEVENT
3 | STATUS:CONFIRMED
4 | UID:pak_1
5 | SUMMARY:یوم کاریگر
6 | RRULE:FREQ=YEARLY;INTERVAL=1
7 | DTSTART;VALUE=DATE:20080501
8 | DTEND;VALUE=DATE:20080502
9 | END:VEVENT
10 | BEGIN:VEVENT
11 | STATUS:CONFIRMED
12 | UID:pak_2
13 | SUMMARY:یوم آذادی
14 | RRULE:FREQ=YEARLY;INTERVAL=1
15 | DTSTART;VALUE=DATE:20080814
16 | DTEND;VALUE=DATE:20080815
17 | END:VEVENT
18 | BEGIN:VEVENT
19 | STATUS:CONFIRMED
20 | UID:pak_3
21 | SUMMARY:یوم دفاع
22 | RRULE:FREQ=YEARLY;INTERVAL=1
23 | DTSTART;VALUE=DATE:20080906
24 | DTEND;VALUE=DATE:20080907
25 | END:VEVENT
26 | BEGIN:VEVENT
27 | STATUS:CONFIRMED
28 | UID:pak_4
29 | SUMMARY:یوم وفات قائد اعظم
30 | RRULE:FREQ=YEARLY;INTERVAL=1
31 | DTSTART;VALUE=DATE:20080911
32 | DTEND;VALUE=DATE:20080912
33 | END:VEVENT
34 | BEGIN:VEVENT
35 | STATUS:CONFIRMED
36 | UID:pak_5
37 | SUMMARY:یوم ولادت محمد اقبال
38 | RRULE:FREQ=YEARLY;INTERVAL=1
39 | DTSTART;VALUE=DATE:20081109
40 | DTEND;VALUE=DATE:20081110
41 | END:VEVENT
42 | BEGIN:VEVENT
43 | STATUS:CONFIRMED
44 | UID:pak_6
45 | SUMMARY: یوم ولادت قائداعظم، عيد الميلاد
46 | RRULE:FREQ=YEARLY;INTERVAL=1
47 | DTSTART;VALUE=DATE:20081225
48 | DTEND;VALUE=DATE:20081226
49 | END:VEVENT
50 | BEGIN:VEVENT
51 | STATUS:CONFIRMED
52 | UID:pak_7
53 | SUMMARY:یوم پاکستان
54 | RRULE:FREQ=YEARLY;INTERVAL=1
55 | DTSTART;VALUE=DATE:20080323
56 | DTEND;VALUE=DATE:20080324
57 | END:VEVENT
58 | BEGIN:VEVENT
59 | STATUS:CONFIRMED
60 | UID:pak_8
61 | SUMMARY:یوم وفات محمد اقبال
62 | RRULE:FREQ=YEARLY;INTERVAL=1
63 | DTSTART;VALUE=DATE:20080421
64 | DTEND;VALUE=DATE:20080422
65 | END:VEVENT
66 | BEGIN:VEVENT
67 | STATUS:CONFIRMED
68 | UID:pak_9
69 | SUMMARY:یوم تکبیر
70 | RRULE:FREQ=YEARLY;INTERVAL=1
71 | DTSTART;VALUE=DATE:20080528
72 | DTEND;VALUE=DATE:20080529
73 | END:VEVENT
74 | END:VCALENDAR
75 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/PT/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_0f5b6ac097a128520028f6f44e92964ecc2a024e
9 | SUMMARY:Carnaval
10 | DTSTAMP:20250513T152649Z
11 | DTSTART;VALUE=DATE:20250304
12 | DTEND;VALUE=DATE:20250305
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_925d96b7a69bf5c92c233ef7e94d508fa77773be
17 | SUMMARY:Dia das Mães
18 | DTSTAMP:20250513T152649Z
19 | DTSTART;VALUE=DATE:20250504
20 | DTEND;VALUE=DATE:20250505
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_8af338b3e1e283b44a26feefe3f007aff5c97f4c
25 | SUMMARY:Noite de Natal
26 | DTSTAMP:20250513T152649Z
27 | DTSTART;VALUE=DATE:19801224
28 | DTEND;VALUE=DATE:19801225
29 | STATUS:CONFIRMED
30 | RRULE:FREQ=YEARLY
31 | END:VEVENT
32 | BEGIN:VEVENT
33 | UID:fossify_af8848775805662fb0a1d900f8f1f6abfc837224
34 | SUMMARY:Véspera de Ano Novo
35 | DTSTAMP:20250513T152649Z
36 | DTSTART;VALUE=DATE:19801231
37 | DTEND;VALUE=DATE:19810101
38 | STATUS:CONFIRMED
39 | RRULE:FREQ=YEARLY
40 | END:VEVENT
41 | BEGIN:VEVENT
42 | UID:fossify_da6c94096057ddb9da6b42894e9b4786318fb1b3
43 | SUMMARY:Carnaval
44 | DTSTAMP:20250513T152649Z
45 | DTSTART;VALUE=DATE:20260217
46 | DTEND;VALUE=DATE:20260218
47 | STATUS:CONFIRMED
48 | END:VEVENT
49 | BEGIN:VEVENT
50 | UID:fossify_220e462fcd52aedd4fe1aab02f9c55c4d5e1b91a
51 | SUMMARY:Dia das Mães
52 | DTSTAMP:20250513T152649Z
53 | DTSTART;VALUE=DATE:20260503
54 | DTEND;VALUE=DATE:20260504
55 | STATUS:CONFIRMED
56 | END:VEVENT
57 | END:VCALENDAR
58 |
--------------------------------------------------------------------------------
/app/src/main/assets/holidays/SK/other.ics:
--------------------------------------------------------------------------------
1 | BEGIN:VCALENDAR
2 | VERSION:2.0
3 | CALSCALE:GREGORIAN
4 | PRODID:Fossify Calendar Holiday Generator
5 | METHOD:PUBLISH
6 | X-PUBLISHED-TTL:PT1H
7 | BEGIN:VEVENT
8 | UID:fossify_29f1ba0136c113752573f8d4d2ebdb89a468e206
9 | SUMMARY:Veľká noc
10 | DTSTAMP:20250513T152649Z
11 | DTSTART;VALUE=DATE:20250420
12 | DTEND;VALUE=DATE:20250421
13 | STATUS:CONFIRMED
14 | END:VEVENT
15 | BEGIN:VEVENT
16 | UID:fossify_5003df99a7c56faf11a9eff335ca65e44f934b40
17 | SUMMARY:Mother's Day
18 | DTSTAMP:20250513T152649Z
19 | DTSTART;VALUE=DATE:20250511
20 | DTEND;VALUE=DATE:20250512
21 | STATUS:CONFIRMED
22 | END:VEVENT
23 | BEGIN:VEVENT
24 | UID:fossify_928f5655d50d136e143669c34a08f209dc1201cb
25 | SUMMARY:Deň Ústavy
26 | DTSTAMP:20250513T152649Z
27 | DTSTART;VALUE=DATE:20250901
28 | DTEND;VALUE=DATE:20250902
29 | STATUS:CONFIRMED
30 | END:VEVENT
31 | BEGIN:VEVENT
32 | UID:fossify_6c6113d1e0a8cefffb77fe3973296283ac2fc066
33 | SUMMARY:Veľká noc
34 | DTSTAMP:20250513T152649Z
35 | DTSTART;VALUE=DATE:20260405
36 | DTEND;VALUE=DATE:20260406
37 | STATUS:CONFIRMED
38 | END:VEVENT
39 | BEGIN:VEVENT
40 | UID:fossify_b77ca3cc868d24f7c4c4d17f38ab4db08fcd9103
41 | SUMMARY:Mother's Day
42 | DTSTAMP:20250513T152649Z
43 | DTSTART;VALUE=DATE:20260510
44 | DTEND;VALUE=DATE:20260511
45 | STATUS:CONFIRMED
46 | END:VEVENT
47 | BEGIN:VEVENT
48 | UID:fossify_c9343fc91b4fef367ae5ee788fe66289fbc8b54d
49 | SUMMARY:Deň Ústavy
50 | DTSTAMP:20250513T152649Z
51 | DTSTART;VALUE=DATE:20260901
52 | DTEND;VALUE=DATE:20260902
53 | STATUS:CONFIRMED
54 | END:VEVENT
55 | END:VCALENDAR
56 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/activities/EventTypePickerActivity.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.activities
2 |
3 | import android.os.Bundle
4 | import androidx.appcompat.app.AppCompatActivity
5 | import org.fossify.calendar.R
6 | import org.fossify.calendar.extensions.launchNewEventIntent
7 | import org.fossify.calendar.extensions.launchNewTaskIntent
8 | import org.fossify.commons.dialogs.RadioGroupDialog
9 | import org.fossify.commons.models.RadioItem
10 |
11 | class EventTypePickerActivity : AppCompatActivity() {
12 | private val TYPE_EVENT = 0
13 | private val TYPE_TASK = 1
14 |
15 | override fun onCreate(savedInstanceState: Bundle?) {
16 | super.onCreate(savedInstanceState)
17 | val items = arrayListOf(
18 | RadioItem(TYPE_EVENT, getString(R.string.event)),
19 | RadioItem(TYPE_TASK, getString(R.string.task))
20 | )
21 | RadioGroupDialog(this, items = items, cancelCallback = { dialogCancelled() }) {
22 | val checkedId = it as Int
23 | if (checkedId == TYPE_EVENT) {
24 | launchNewEventIntent()
25 | } else if (checkedId == TYPE_TASK) {
26 | launchNewTaskIntent()
27 | }
28 | finish()
29 | }
30 | }
31 |
32 | private fun dialogCancelled() {
33 | finish()
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/activities/SnoozeReminderActivity.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.activities
2 |
3 | import android.os.Bundle
4 | import androidx.appcompat.app.AppCompatActivity
5 | import org.fossify.calendar.extensions.config
6 | import org.fossify.calendar.extensions.eventsDB
7 | import org.fossify.calendar.extensions.rescheduleReminder
8 | import org.fossify.calendar.helpers.EVENT_ID
9 | import org.fossify.commons.extensions.showPickSecondsDialogHelper
10 | import org.fossify.commons.helpers.ensureBackgroundThread
11 |
12 | class SnoozeReminderActivity : AppCompatActivity() {
13 | override fun onCreate(savedInstanceState: Bundle?) {
14 | super.onCreate(savedInstanceState)
15 |
16 | showPickSecondsDialogHelper(config.snoozeTime, true, cancelCallback = { dialogCancelled() }) {
17 | ensureBackgroundThread {
18 | val eventId = intent.getLongExtra(EVENT_ID, 0L)
19 | val event = eventsDB.getEventOrTaskWithId(eventId)
20 | config.snoozeTime = it / 60
21 | rescheduleReminder(event, it / 60)
22 | runOnUiThread {
23 | finishActivity()
24 | }
25 | }
26 | }
27 | }
28 |
29 | private fun dialogCancelled() {
30 | finishActivity()
31 | }
32 |
33 | private fun finishActivity() {
34 | finish()
35 | overridePendingTransition(0, 0)
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/adapters/EventListWidgetAdapterEmpty.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.adapters
2 |
3 | import android.content.Context
4 | import android.widget.RemoteViews
5 | import android.widget.RemoteViewsService
6 | import org.fossify.calendar.R
7 |
8 | class EventListWidgetAdapterEmpty(val context: Context) : RemoteViewsService.RemoteViewsFactory {
9 | override fun getViewAt(position: Int) = RemoteViews(context.packageName, R.layout.event_list_section_day_widget)
10 |
11 | override fun getLoadingView() = null
12 |
13 | override fun getViewTypeCount() = 1
14 |
15 | override fun onCreate() {}
16 |
17 | override fun getItemId(position: Int) = 0L
18 |
19 | override fun onDataSetChanged() {}
20 |
21 | override fun hasStableIds() = true
22 |
23 | override fun getCount() = 0
24 |
25 | override fun onDestroy() {}
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/adapters/MyDayPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.adapters
2 |
3 | import android.os.Bundle
4 | import android.util.SparseArray
5 | import androidx.fragment.app.Fragment
6 | import androidx.fragment.app.FragmentManager
7 | import androidx.fragment.app.FragmentStatePagerAdapter
8 | import org.fossify.calendar.fragments.DayFragment
9 | import org.fossify.calendar.helpers.DAY_CODE
10 | import org.fossify.calendar.interfaces.NavigationListener
11 |
12 | class MyDayPagerAdapter(fm: FragmentManager, private val mCodes: List, private val mListener: NavigationListener) :
13 | FragmentStatePagerAdapter(fm) {
14 | private val mFragments = SparseArray()
15 |
16 | override fun getCount() = mCodes.size
17 |
18 | override fun getItem(position: Int): Fragment {
19 | val bundle = Bundle()
20 | val code = mCodes[position]
21 | bundle.putString(DAY_CODE, code)
22 |
23 | val fragment = DayFragment()
24 | fragment.arguments = bundle
25 | fragment.mListener = mListener
26 |
27 | mFragments.put(position, fragment)
28 | return fragment
29 | }
30 |
31 | fun updateCalendars(pos: Int) {
32 | for (i in -1..1) {
33 | mFragments[pos + i]?.updateCalendar()
34 | }
35 | }
36 |
37 | fun printCurrentView(pos: Int) {
38 | mFragments[pos].printCurrentView()
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/adapters/MyMonthDayPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.adapters
2 |
3 | import android.os.Bundle
4 | import android.util.SparseArray
5 | import androidx.fragment.app.Fragment
6 | import androidx.fragment.app.FragmentManager
7 | import androidx.fragment.app.FragmentStatePagerAdapter
8 | import org.fossify.calendar.fragments.MonthDayFragment
9 | import org.fossify.calendar.helpers.DAY_CODE
10 | import org.fossify.calendar.interfaces.NavigationListener
11 |
12 | class MyMonthDayPagerAdapter(fm: FragmentManager, private val mCodes: List, private val mListener: NavigationListener) : FragmentStatePagerAdapter(fm) {
13 | private val mFragments = SparseArray()
14 |
15 | override fun getCount() = mCodes.size
16 |
17 | override fun getItem(position: Int): Fragment {
18 | val bundle = Bundle()
19 | val code = mCodes[position]
20 | bundle.putString(DAY_CODE, code)
21 |
22 | val fragment = MonthDayFragment()
23 | fragment.arguments = bundle
24 | fragment.listener = mListener
25 |
26 | mFragments.put(position, fragment)
27 | return fragment
28 | }
29 |
30 | fun updateCalendars(pos: Int) {
31 | for (i in -1..1) {
32 | mFragments[pos + i]?.updateCalendar()
33 | }
34 | }
35 |
36 | fun printCurrentView(pos: Int) {
37 | mFragments[pos].printCurrentView()
38 | }
39 |
40 | fun getNewEventDayCode(pos: Int): String? = mFragments[pos].getNewEventDayCode()
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/adapters/MyMonthPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.adapters
2 |
3 | import android.os.Bundle
4 | import android.util.SparseArray
5 | import androidx.fragment.app.Fragment
6 | import androidx.fragment.app.FragmentManager
7 | import androidx.fragment.app.FragmentStatePagerAdapter
8 | import org.fossify.calendar.fragments.MonthFragment
9 | import org.fossify.calendar.helpers.DAY_CODE
10 | import org.fossify.calendar.interfaces.NavigationListener
11 |
12 | class MyMonthPagerAdapter(fm: FragmentManager, private val mCodes: List, private val mListener: NavigationListener) : FragmentStatePagerAdapter(fm) {
13 | private val mFragments = SparseArray()
14 |
15 | override fun getCount() = mCodes.size
16 |
17 | override fun getItem(position: Int): Fragment {
18 | val bundle = Bundle()
19 | val code = mCodes[position]
20 | bundle.putString(DAY_CODE, code)
21 |
22 | val fragment = MonthFragment()
23 | fragment.arguments = bundle
24 | fragment.listener = mListener
25 |
26 | mFragments.put(position, fragment)
27 | return fragment
28 | }
29 |
30 | fun updateCalendars(pos: Int) {
31 | for (i in -1..1) {
32 | mFragments[pos + i]?.updateCalendar()
33 | }
34 | }
35 |
36 | fun printCurrentView(pos: Int) {
37 | mFragments[pos].printCurrentView()
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/adapters/MyYearPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.adapters
2 |
3 | import android.os.Bundle
4 | import android.util.SparseArray
5 | import androidx.fragment.app.Fragment
6 | import androidx.fragment.app.FragmentManager
7 | import androidx.fragment.app.FragmentStatePagerAdapter
8 | import org.fossify.calendar.fragments.YearFragment
9 | import org.fossify.calendar.helpers.YEAR_LABEL
10 | import org.fossify.calendar.interfaces.NavigationListener
11 |
12 | class MyYearPagerAdapter(fm: FragmentManager, val mYears: List, private val mListener: NavigationListener) : FragmentStatePagerAdapter(fm) {
13 | private val mFragments = SparseArray()
14 |
15 | override fun getCount() = mYears.size
16 |
17 | override fun getItem(position: Int): Fragment {
18 | val bundle = Bundle()
19 | val year = mYears[position]
20 | bundle.putInt(YEAR_LABEL, year)
21 |
22 | val fragment = YearFragment()
23 | fragment.arguments = bundle
24 | fragment.listener = mListener
25 |
26 | mFragments.put(position, fragment)
27 | return fragment
28 | }
29 |
30 | fun updateCalendars(pos: Int) {
31 | for (i in -1..1) {
32 | mFragments[pos + i]?.updateCalendar()
33 | }
34 | }
35 |
36 | fun printCurrentView(pos: Int) {
37 | mFragments[pos].printCurrentView()
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/dialogs/DateTimePatternInfoDialog.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.dialogs
2 |
3 | import org.fossify.calendar.databinding.DatetimePatternInfoLayoutBinding
4 | import org.fossify.commons.activities.BaseSimpleActivity
5 | import org.fossify.commons.extensions.getAlertDialogBuilder
6 | import org.fossify.commons.extensions.setupDialogStuff
7 | import org.fossify.commons.extensions.viewBinding
8 |
9 | class DateTimePatternInfoDialog(activity: BaseSimpleActivity) {
10 | val binding by activity.viewBinding(DatetimePatternInfoLayoutBinding::inflate)
11 |
12 | init {
13 | activity.getAlertDialogBuilder()
14 | .setPositiveButton(org.fossify.commons.R.string.ok) { _, _ -> { } }
15 | .apply {
16 | activity.setupDialogStuff(binding.root, this)
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/DateTime.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import org.joda.time.DateTime
4 |
5 | fun DateTime.seconds() = millis / 1000L
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/Int.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import org.fossify.calendar.helpers.MONTH
4 | import org.fossify.calendar.helpers.WEEK
5 | import org.fossify.calendar.helpers.YEAR
6 |
7 | fun Int.isXWeeklyRepetition() = this != 0 && this % WEEK == 0
8 |
9 | fun Int.isXMonthlyRepetition() = this != 0 && this % MONTH == 0
10 |
11 | fun Int.isXYearlyRepetition() = this != 0 && this % YEAR == 0
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/ListEvent.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import org.fossify.calendar.models.ListEvent
4 |
5 | fun ListEvent.shouldStrikeThrough() = isTaskCompleted || isAttendeeInviteDeclined || isEventCanceled
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/Long.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import org.fossify.calendar.helpers.Formatter
4 | import org.fossify.calendar.models.Event
5 |
6 | fun Long.isTsOnProperDay(event: Event): Boolean {
7 | val dateTime = Formatter.getDateTimeFromTS(this)
8 | val power = 1 shl (dateTime.dayOfWeek - 1)
9 | return event.repeatRule and power != 0
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/MonthViewEvent.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import org.fossify.calendar.models.MonthViewEvent
4 |
5 | fun MonthViewEvent.shouldStrikeThrough() = isTaskCompleted || isAttendeeInviteDeclined || isEventCanceled
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/Range.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import android.util.Range
4 |
5 | fun Range.intersects(other: Range) = (upper >= other.lower && lower <= other.upper) || (other.upper >= lower && other.lower <= upper)
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/String.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | fun String.getMonthCode() = if (length == 8) substring(0, 6) else ""
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/TextView.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import android.content.res.Resources
4 | import android.graphics.Paint
5 | import android.graphics.drawable.BitmapDrawable
6 | import android.widget.TextView
7 | import androidx.core.graphics.drawable.toBitmap
8 | import org.fossify.commons.extensions.addBit
9 | import org.fossify.commons.extensions.applyColorFilter
10 | import org.fossify.commons.extensions.removeBit
11 |
12 | fun TextView.addResizedBackgroundDrawable(res: Resources, drawableHeight: Int, primaryColor: Int, drawableId: Int) {
13 | val baseDrawable = res.getDrawable(drawableId).toBitmap(drawableHeight, drawableHeight)
14 | val scaledDrawable = BitmapDrawable(res, baseDrawable)
15 | scaledDrawable.applyColorFilter(primaryColor)
16 | background = scaledDrawable
17 | }
18 |
19 | fun TextView.checkViewStrikeThrough(addFlag: Boolean) {
20 | paintFlags = if (addFlag) {
21 | paintFlags.addBit(Paint.STRIKE_THRU_TEXT_FLAG)
22 | } else {
23 | paintFlags.removeBit(Paint.STRIKE_THRU_TEXT_FLAG)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/extensions/View.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.extensions
2 |
3 | import android.graphics.Bitmap
4 | import android.graphics.Canvas
5 | import android.view.View
6 |
7 | fun View.getViewBitmap(): Bitmap {
8 | val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
9 | val canvas = Canvas(bitmap)
10 | layout(left, top, right, bottom)
11 | draw(canvas)
12 | return bitmap
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/fragments/MyFragmentHolder.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.fragments
2 |
3 | import android.graphics.Color
4 | import android.widget.DatePicker
5 | import androidx.fragment.app.Fragment
6 | import org.fossify.calendar.databinding.DatePickerDarkBinding
7 | import org.fossify.calendar.databinding.DatePickerLightBinding
8 | import org.fossify.commons.extensions.getContrastColor
9 | import org.fossify.commons.extensions.getProperBackgroundColor
10 | import org.joda.time.DateTime
11 |
12 | abstract class MyFragmentHolder : Fragment() {
13 | abstract val viewType: Int
14 |
15 | abstract fun goToToday()
16 |
17 | abstract fun showGoToDateDialog()
18 |
19 | abstract fun refreshEvents()
20 |
21 | abstract fun shouldGoToTodayBeVisible(): Boolean
22 |
23 | abstract fun getNewEventDayCode(): String
24 |
25 | abstract fun printView()
26 |
27 | abstract fun getCurrentDate(): DateTime?
28 |
29 | fun getDatePickerView(): DatePicker {
30 | return if (requireActivity().getProperBackgroundColor().getContrastColor() == Color.WHITE) {
31 | DatePickerDarkBinding.inflate(layoutInflater).datePicker
32 | } else {
33 | DatePickerLightBinding.inflate(layoutInflater).datePicker
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/helpers/Converters.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.helpers
2 |
3 | import androidx.room.TypeConverter
4 | import com.google.gson.Gson
5 | import com.google.gson.reflect.TypeToken
6 | import org.fossify.calendar.models.Attendee
7 |
8 | class Converters {
9 | private val gson = Gson()
10 | private val stringType = object : TypeToken>() {}.type
11 | private val attendeeType = object : TypeToken>() {}.type
12 |
13 | @TypeConverter
14 | fun jsonToStringList(value: String?): List {
15 | val newValue = if (!value.isNullOrEmpty() && !value.startsWith("[")) {
16 | "[$value]"
17 | } else {
18 | value
19 | }
20 |
21 | return try {
22 | gson.fromJson(newValue, stringType)
23 | } catch (e: Exception) {
24 | emptyList()
25 | }
26 | }
27 |
28 | @TypeConverter
29 | fun stringListToJson(list: List) = gson.toJson(list)
30 |
31 | @TypeConverter
32 | fun attendeeListToJson(list: List): String = gson.toJson(list)
33 |
34 | @TypeConverter
35 | fun jsonToAttendeeList(value: String): List {
36 | if (value.isEmpty()) {
37 | return emptyList()
38 | }
39 |
40 | return try {
41 | gson.fromJson>(value, attendeeType) ?: ArrayList()
42 | } catch (e: Exception) {
43 | emptyList()
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/helpers/HolidayHelper.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.helpers
2 |
3 | import android.content.Context
4 | import com.google.gson.Gson
5 | import org.fossify.calendar.models.HolidayInfo
6 |
7 | class HolidayHelper(private val context: Context) {
8 |
9 | companion object {
10 | private const val HOLIDAY_METADATA = "holidays/metadata.json"
11 | }
12 |
13 | fun load(): List {
14 | val metadata = context.assets.open(HOLIDAY_METADATA)
15 | .bufferedReader()
16 | .use { it.readText() }
17 | return Gson().fromJson(metadata, Array::class.java)
18 | .toList()
19 | .sortedBy { it.country }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/helpers/HsvColorComparator.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.helpers
2 |
3 | import android.graphics.Color
4 |
5 | /**
6 | * A color comparator which compares based on hue, saturation, and value.
7 | * Source: AOSP Color picker, https://cs.android.com/android/platform/superproject/+/master:frameworks/opt/colorpicker/src/com/android/colorpicker/HsvColorComparator.java
8 | */
9 | class HsvColorComparator : Comparator {
10 | override fun compare(lhs: Int?, rhs: Int?): Int {
11 | val hsv = FloatArray(3)
12 | Color.colorToHSV(lhs!!, hsv)
13 | val hue1 = hsv[0]
14 | val sat1 = hsv[1]
15 | val val1 = hsv[2]
16 | val hsv2 = FloatArray(3)
17 | Color.colorToHSV(rhs!!, hsv2)
18 | val hue2 = hsv2[0]
19 | val sat2 = hsv2[1]
20 | val val2 = hsv2[2]
21 | if (hue1 < hue2) {
22 | return 1
23 | } else if (hue1 > hue2) {
24 | return -1
25 | } else {
26 | if (sat1 < sat2) {
27 | return 1
28 | } else if (sat1 > sat2) {
29 | return -1
30 | } else {
31 | if (val1 < val2) {
32 | return 1
33 | } else if (val1 > val2) {
34 | return -1
35 | }
36 | }
37 | }
38 | return 0
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/helpers/SmartSwipeRefreshLayout.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.helpers
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import android.view.MotionEvent
6 | import android.view.ViewConfiguration
7 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
8 | import kotlin.math.abs
9 |
10 | class SmartSwipeRefreshLayout @JvmOverloads constructor(
11 | context: Context, attrs: AttributeSet? = null
12 | ) : SwipeRefreshLayout(context, attrs) {
13 |
14 | private var mInitialDownY = 0f
15 | private var mInitialDownX = 0f
16 |
17 | private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop
18 |
19 | override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
20 | val action = ev.actionMasked
21 |
22 | // Fail fast if swipe refresh is disabled, child can scroll up, or refresh is in progress
23 | if (!isEnabled || canChildScrollUp() || isRefreshing) {
24 | return false
25 | }
26 |
27 | when (action) {
28 | MotionEvent.ACTION_DOWN -> {
29 | mInitialDownY = ev.y
30 | mInitialDownX = ev.x
31 | }
32 |
33 | MotionEvent.ACTION_MOVE -> {
34 | val yDiff = abs(ev.y - mInitialDownY)
35 | val xDiff = abs(ev.x - mInitialDownX)
36 | // Only start dragging if the vertical difference is greater than the horizontal difference
37 | if (yDiff < touchSlop || yDiff < xDiff) {
38 | return false
39 | }
40 | }
41 | }
42 |
43 | return super.onInterceptTouchEvent(ev)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/helpers/WeeklyCalendarImpl.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.helpers
2 |
3 | import android.content.Context
4 | import org.fossify.calendar.extensions.eventsHelper
5 | import org.fossify.calendar.interfaces.WeeklyCalendar
6 | import org.fossify.calendar.models.Event
7 | import org.fossify.commons.helpers.DAY_SECONDS
8 | import org.fossify.commons.helpers.WEEK_SECONDS
9 |
10 | class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) {
11 | var mEvents = ArrayList()
12 |
13 | fun updateWeeklyCalendar(weekStartTS: Long) {
14 | val endTS = weekStartTS + 2 * WEEK_SECONDS
15 | context.eventsHelper.getEvents(weekStartTS - DAY_SECONDS, endTS) {
16 | mEvents = it
17 | callback.updateWeeklyCalendar(it)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/DeleteEventTypesListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import org.fossify.calendar.models.EventType
4 |
5 | interface DeleteEventTypesListener {
6 | fun deleteEventTypes(eventTypes: ArrayList, deleteEvents: Boolean): Boolean
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/EventTypesDao.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import androidx.room.*
4 | import org.fossify.calendar.models.EventType
5 |
6 | @Dao
7 | interface EventTypesDao {
8 | @Query("SELECT * FROM event_types ORDER BY title ASC")
9 | fun getEventTypes(): List
10 |
11 | @Query("SELECT * FROM event_types WHERE id = :id")
12 | fun getEventTypeWithId(id: Long): EventType?
13 |
14 | @Query("SELECT id FROM event_types WHERE title = :title COLLATE NOCASE")
15 | fun getEventTypeIdWithTitle(title: String): Long?
16 |
17 | @Query("SELECT id FROM event_types WHERE title = :title AND caldav_calendar_id = 0 COLLATE NOCASE")
18 | fun getLocalEventTypeIdWithTitle(title: String): Long?
19 |
20 | @Query("SELECT id FROM event_types WHERE type = :classId")
21 | fun getEventTypeIdWithClass(classId: Int): Long?
22 |
23 | @Query("SELECT id FROM event_types WHERE type = :classId AND caldav_calendar_id = 0")
24 | fun getLocalEventTypeIdWithClass(classId: Int): Long?
25 |
26 | @Query("SELECT * FROM event_types WHERE caldav_calendar_id = :calendarId")
27 | fun getEventTypeWithCalDAVCalendarId(calendarId: Int): EventType?
28 |
29 | @Query("DELETE FROM event_types WHERE caldav_calendar_id IN (:ids)")
30 | fun deleteEventTypesWithCalendarId(ids: List)
31 |
32 | @Insert(onConflict = OnConflictStrategy.REPLACE)
33 | fun insertOrUpdate(eventType: EventType): Long
34 |
35 | @Delete
36 | fun deleteEventTypes(eventTypes: List)
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/MonthlyCalendar.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import android.content.Context
4 | import org.fossify.calendar.models.DayMonthly
5 | import org.joda.time.DateTime
6 |
7 | interface MonthlyCalendar {
8 | fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList, checkedEvents: Boolean, currTargetDate: DateTime)
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/NavigationListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import org.joda.time.DateTime
4 |
5 | interface NavigationListener {
6 | fun goLeft()
7 |
8 | fun goRight()
9 |
10 | fun goToDateTime(dateTime: DateTime)
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/TasksDao.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Insert
5 | import androidx.room.OnConflictStrategy
6 | import androidx.room.Query
7 | import org.fossify.calendar.models.Task
8 |
9 | @Dao
10 | interface TasksDao {
11 | @Insert(onConflict = OnConflictStrategy.REPLACE)
12 | fun insertOrUpdate(task: Task): Long
13 |
14 | @Query("SELECT * FROM tasks WHERE task_id = :id AND start_ts = :startTs")
15 | fun getTaskWithIdAndTs(id: Long, startTs: Long): Task?
16 |
17 | @Query("DELETE FROM tasks WHERE task_id = :id AND start_ts = :startTs")
18 | fun deleteTaskWithIdAndTs(id: Long, startTs: Long)
19 |
20 | @Query("DELETE FROM tasks WHERE task_id = :id AND start_ts >= :startTs")
21 | fun deleteTaskFutureOccurrences(id: Long, startTs: Long)
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/WeekFragmentListener.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | interface WeekFragmentListener {
4 | fun scrollTo(y: Int)
5 |
6 | fun updateHoursTopMargin(margin: Int)
7 |
8 | fun getCurrScrollY(): Int
9 |
10 | fun updateRowHeight(rowHeight: Int)
11 |
12 | fun getFullFragmentHeight(): Int
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/WeeklyCalendar.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import org.fossify.calendar.models.Event
4 |
5 | interface WeeklyCalendar {
6 | fun updateWeeklyCalendar(events: ArrayList)
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/WidgetsDao.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Insert
5 | import androidx.room.OnConflictStrategy
6 | import androidx.room.Query
7 | import org.fossify.calendar.models.Widget
8 |
9 | @Dao
10 | interface WidgetsDao {
11 | @Query("SELECT * FROM widgets")
12 | fun getWidgets(): List
13 |
14 | @Query("SELECT * FROM widgets WHERE widget_id = :widgetId")
15 | fun getWidgetWithWidgetId(widgetId: Int): Widget?
16 |
17 | @Insert(onConflict = OnConflictStrategy.REPLACE)
18 | fun insertOrUpdate(widget: Widget): Long
19 |
20 | @Query("DELETE FROM widgets WHERE widget_id = :widgetId")
21 | fun deleteWidgetId(widgetId: Int)
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/interfaces/YearlyCalendar.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.interfaces
2 |
3 | import android.util.SparseArray
4 | import org.fossify.calendar.models.DayYearly
5 |
6 | interface YearlyCalendar {
7 | fun updateYearlyCalendar(events: SparseArray>, hashCode: Int)
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/Attendee.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import android.content.Context
4 | import android.graphics.drawable.Drawable
5 | import android.provider.CalendarContract
6 | import android.widget.ImageView
7 | import com.bumptech.glide.Glide
8 | import com.bumptech.glide.load.engine.DiskCacheStrategy
9 | import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
10 | import com.bumptech.glide.request.RequestOptions
11 |
12 | data class Attendee(
13 | val contactId: Int,
14 | var name: String,
15 | val email: String,
16 | var status: Int,
17 | var photoUri: String,
18 | var isMe: Boolean,
19 | var relationship: Int
20 | ) {
21 | fun getPublicName() = name.ifEmpty { email }
22 |
23 | fun updateImage(context: Context, imageView: ImageView, placeholder: Drawable) {
24 | if (photoUri.isEmpty()) {
25 | imageView.setImageDrawable(placeholder)
26 | } else {
27 | val options = RequestOptions()
28 | .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
29 | .error(placeholder)
30 | .centerCrop()
31 |
32 | Glide.with(context)
33 | .load(photoUri)
34 | .transition(DrawableTransitionOptions.withCrossFade())
35 | .placeholder(placeholder)
36 | .apply(options)
37 | .apply(RequestOptions.circleCropTransform())
38 | .into(imageView)
39 | }
40 | }
41 |
42 | fun showStatusImage() = status == CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED ||
43 | status == CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED ||
44 | status == CalendarContract.Attendees.ATTENDEE_STATUS_TENTATIVE
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/CalDAVCalendar.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class CalDAVCalendar(
4 | val id: Int, val displayName: String, val accountName: String, val accountType: String, val ownerName: String,
5 | var color: Int, val accessLevel: Int
6 | ) {
7 | fun canWrite() = accessLevel >= 500
8 |
9 | fun getFullTitle() = "$displayName ($accountName)"
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/DayMonthly.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class DayMonthly(
4 | val value: Int,
5 | val isThisMonth: Boolean,
6 | val isToday: Boolean,
7 | val code: String,
8 | val weekOfYear: Int,
9 | var dayEvents: ArrayList,
10 | var indexOnMonthView: Int,
11 | var isWeekend: Boolean
12 | )
13 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/DayYearly.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class DayYearly(var eventColors: HashSet = HashSet()) {
4 | fun addColor(color: Int) = eventColors.add(color)
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/EventRepetition.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class EventRepetition(val repeatInterval: Int, val repeatRule: Int, val repeatLimit: Long)
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/EventType.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.Index
6 | import androidx.room.PrimaryKey
7 | import org.fossify.calendar.helpers.OTHER_EVENT
8 |
9 | @Entity(tableName = "event_types", indices = [(Index(value = ["id"], unique = true))])
10 | data class EventType(
11 | @PrimaryKey(autoGenerate = true) var id: Long?,
12 | @ColumnInfo(name = "title") var title: String,
13 | @ColumnInfo(name = "color") var color: Int,
14 | @ColumnInfo(name = "caldav_calendar_id") var caldavCalendarId: Int = 0,
15 | @ColumnInfo(name = "caldav_display_name") var caldavDisplayName: String = "",
16 | @ColumnInfo(name = "caldav_email") var caldavEmail: String = "",
17 | @ColumnInfo(name = "type") var type: Int = OTHER_EVENT
18 | ) {
19 | fun getDisplayTitle() = if (caldavCalendarId == 0) title else "$caldavDisplayName ($caldavEmail)"
20 |
21 | fun isSyncedEventType() = caldavCalendarId != 0
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/EventWeeklyView.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import android.util.Range
4 |
5 | data class EventWeeklyView(val range: Range, var slot: Int = 0, var slotMax: Int = 0, var collisions: ArrayList = ArrayList())
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/HolidayInfo.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class HolidayInfo(
4 | val code: String,
5 | val country: String,
6 | val public: String,
7 | val regional: String? = null,
8 | val other: String? = null,
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/ListEvent.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class ListEvent(
4 | var id: Long,
5 | var startTS: Long,
6 | var endTS: Long,
7 | var title: String,
8 | var description: String,
9 | var isAllDay: Boolean,
10 | var color: Int,
11 | var location: String,
12 | var isPastEvent: Boolean,
13 | var isRepeatable: Boolean,
14 | var isTask: Boolean,
15 | var isTaskCompleted: Boolean,
16 | var isAttendeeInviteDeclined: Boolean,
17 | var isEventCanceled: Boolean
18 | ) : ListItem() {
19 |
20 | companion object {
21 | val empty = ListEvent(
22 | id = 0,
23 | startTS = 0,
24 | endTS = 0,
25 | title = "",
26 | description = "",
27 | isAllDay = false,
28 | color = 0,
29 | location = "",
30 | isPastEvent = false,
31 | isRepeatable = false,
32 | isTask = false,
33 | isTaskCompleted = false,
34 | isAttendeeInviteDeclined = false,
35 | isEventCanceled = false
36 | )
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/ListItem.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | open class ListItem
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/ListSectionDay.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class ListSectionDay(val title: String, val code: String, val isToday: Boolean, val isPastSection: Boolean) : ListItem()
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/ListSectionMonth.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class ListSectionMonth(val title: String) : ListItem()
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/MonthViewEvent.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class MonthViewEvent(
4 | val id: Long,
5 | val title: String,
6 | val startTS: Long,
7 | val endTS: Long,
8 | val color: Int,
9 | val startDayIndex: Int,
10 | val daysCnt: Int,
11 | val originalStartDayIndex: Int,
12 | val isAllDay: Boolean,
13 | val isPastEvent: Boolean,
14 | val isTask: Boolean,
15 | val isTaskCompleted: Boolean,
16 | val isAttendeeInviteDeclined: Boolean,
17 | val isEventCanceled: Boolean
18 | )
19 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/MyTimeZone.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import java.io.Serializable
4 |
5 | // sample MyTimeZone(title="GMT+1", zoneName="Europe/Bratislava")
6 | data class MyTimeZone(var title: String, val zoneName: String) : Serializable {
7 | companion object {
8 | private const val serialVersionUID = -32456354132688616L
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/Reminder.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | data class Reminder(val minutes: Int, val type: Int)
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/Task.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.Index
6 | import androidx.room.PrimaryKey
7 | import androidx.room.ForeignKey
8 | import org.fossify.calendar.helpers.FLAG_TASK_COMPLETED
9 |
10 | @Entity(
11 | tableName = "tasks",
12 | indices = [(Index(value = ["id", "task_id"], unique = true))],
13 | foreignKeys = [ForeignKey(
14 | entity = Event::class,
15 | parentColumns = arrayOf("id"),
16 | childColumns = arrayOf("task_id"),
17 | onDelete = ForeignKey.CASCADE
18 | )]
19 | )
20 | data class Task(
21 | @PrimaryKey(autoGenerate = true) var id: Long?,
22 | @ColumnInfo(name = "task_id") var task_id: Long,
23 | @ColumnInfo(name = "start_ts") var startTS: Long = 0L,
24 | @ColumnInfo(name = "flags") var flags: Int = 0,
25 | ) {
26 | fun isTaskCompleted() = flags and FLAG_TASK_COMPLETED != 0
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/models/Widget.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.models
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.Entity
5 | import androidx.room.Index
6 | import androidx.room.PrimaryKey
7 |
8 | @Entity(tableName = "widgets", indices = [(Index(value = ["widget_id"], unique = true))])
9 | data class Widget(
10 | @PrimaryKey(autoGenerate = true) var id: Long?,
11 | @ColumnInfo(name = "widget_id") var widgetId: Int,
12 | @ColumnInfo(name = "period") var period: Int,
13 | @ColumnInfo(name = "header") var header: Boolean
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/objects/States.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.objects
2 |
3 | object States {
4 | var isUpdatingCalDAV = false
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/receivers/AutomaticBackupReceiver.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import android.os.PowerManager
7 | import org.fossify.calendar.extensions.backupEventsAndTasks
8 |
9 | class AutomaticBackupReceiver : BroadcastReceiver() {
10 |
11 | override fun onReceive(context: Context, intent: Intent) {
12 | val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
13 | val wakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "simplecalendar:automaticbackupreceiver")
14 | wakelock.acquire(3000)
15 | context.backupEventsAndTasks()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/receivers/BootCompletedReceiver.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import org.fossify.calendar.extensions.*
7 | import org.fossify.commons.helpers.ensureBackgroundThread
8 |
9 | class BootCompletedReceiver : BroadcastReceiver() {
10 |
11 | override fun onReceive(context: Context, intent: Intent) {
12 | ensureBackgroundThread {
13 | context.apply {
14 | scheduleAllEvents()
15 | notifyRunningEvents()
16 | recheckCalDAVCalendars(true) {}
17 | scheduleNextAutomaticBackup()
18 | checkAndBackupEventsOnBoot()
19 | }
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/receivers/CalDAVSyncReceiver.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import org.fossify.calendar.extensions.config
7 | import org.fossify.calendar.extensions.recheckCalDAVCalendars
8 | import org.fossify.calendar.extensions.refreshCalDAVCalendars
9 | import org.fossify.calendar.extensions.updateWidgets
10 |
11 | class CalDAVSyncReceiver : BroadcastReceiver() {
12 | override fun onReceive(context: Context, intent: Intent) {
13 | if (context.config.caldavSync) {
14 | context.refreshCalDAVCalendars(context.config.caldavSyncedCalendarIds, false)
15 | }
16 |
17 | context.recheckCalDAVCalendars(true) {
18 | context.updateWidgets()
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/services/MarkCompletedService.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.services
2 |
3 | import android.app.IntentService
4 | import android.content.Intent
5 | import org.fossify.calendar.extensions.eventsDB
6 | import org.fossify.calendar.extensions.updateTaskCompletion
7 | import org.fossify.calendar.extensions.updateWidgets
8 | import org.fossify.calendar.helpers.ACTION_MARK_COMPLETED
9 | import org.fossify.calendar.helpers.EVENT_ID
10 | import org.fossify.calendar.helpers.EVENT_OCCURRENCE_TS
11 |
12 | class MarkCompletedService : IntentService("MarkCompleted") {
13 |
14 | @Deprecated("Deprecated in Java")
15 | override fun onHandleIntent(intent: Intent?) {
16 | if (intent != null && intent.action == ACTION_MARK_COMPLETED) {
17 | val taskId = intent.getLongExtra(EVENT_ID, 0L)
18 | val task = eventsDB.getTaskWithId(taskId)?.apply {
19 | val occurrenceTS = intent.getLongExtra(EVENT_OCCURRENCE_TS, 0L)
20 | if (occurrenceTS != 0L) {
21 | startTS = occurrenceTS
22 | endTS = occurrenceTS
23 | }
24 | }
25 |
26 | if (task != null) {
27 | updateTaskCompletion(task, completed = true)
28 | updateWidgets()
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/services/SnoozeService.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.services
2 |
3 | import android.app.IntentService
4 | import android.content.Intent
5 | import org.fossify.calendar.extensions.config
6 | import org.fossify.calendar.extensions.eventsDB
7 | import org.fossify.calendar.extensions.rescheduleReminder
8 | import org.fossify.calendar.helpers.EVENT_ID
9 |
10 | class SnoozeService : IntentService("Snooze") {
11 | override fun onHandleIntent(intent: Intent?) {
12 | if (intent != null) {
13 | val eventId = intent.getLongExtra(EVENT_ID, 0L)
14 | val event = eventsDB.getEventOrTaskWithId(eventId)
15 | rescheduleReminder(event, config.snoozeTime)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/services/WidgetService.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.services
2 |
3 | import android.content.Intent
4 | import android.widget.RemoteViewsService
5 | import org.fossify.calendar.adapters.EventListWidgetAdapter
6 |
7 | class WidgetService : RemoteViewsService() {
8 | override fun onGetViewFactory(intent: Intent) = EventListWidgetAdapter(applicationContext, intent)
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/services/WidgetServiceEmpty.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.services
2 |
3 | import android.content.Intent
4 | import android.widget.RemoteViewsService
5 | import org.fossify.calendar.adapters.EventListWidgetAdapterEmpty
6 |
7 | class WidgetServiceEmpty : RemoteViewsService() {
8 | override fun onGetViewFactory(intent: Intent) = EventListWidgetAdapterEmpty(applicationContext)
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/views/AutoGridLayoutManager.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.views
2 |
3 | import android.content.Context
4 | import androidx.recyclerview.widget.GridLayoutManager
5 | import androidx.recyclerview.widget.RecyclerView
6 | import kotlin.math.max
7 |
8 | /**
9 | * RecyclerView GridLayoutManager but with automatic spanCount calculation
10 | * @param itemWidth: Grid item width in pixels. Will be used to calculate span count.
11 | */
12 | class AutoGridLayoutManager(
13 | context: Context,
14 | private var itemWidth: Int
15 | ) : GridLayoutManager(context, 1) {
16 |
17 | init {
18 | require(itemWidth >= 0)
19 | }
20 |
21 | override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) {
22 | val width = width
23 | val height = height
24 | if (itemWidth > 0 && width > 0 && height > 0) {
25 | val totalSpace = if (orientation == VERTICAL) {
26 | width - paddingRight - paddingLeft
27 | } else {
28 | height - paddingTop - paddingBottom
29 | }
30 | spanCount = max(1, totalSpace / itemWidth)
31 | }
32 | super.onLayoutChildren(recycler, state)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/views/MyScrollView.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.views
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import android.view.MotionEvent
6 | import android.widget.ScrollView
7 |
8 | class MyScrollView : ScrollView {
9 | var isScrollable = true
10 |
11 | constructor(context: Context) : super(context)
12 |
13 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
14 |
15 | constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
16 |
17 | private var scrollViewListener: ScrollViewListener? = null
18 |
19 | fun setOnScrollviewListener(scrollViewListener: ScrollViewListener) {
20 | this.scrollViewListener = scrollViewListener
21 | }
22 |
23 | override fun onScrollChanged(x: Int, y: Int, oldx: Int, oldy: Int) {
24 | super.onScrollChanged(x, y, oldx, oldy)
25 | scrollViewListener?.onScrollChanged(this, x, y, oldx, oldy)
26 | }
27 |
28 | override fun onTouchEvent(event: MotionEvent): Boolean {
29 | return if (isScrollable) {
30 | super.onTouchEvent(event)
31 | } else {
32 | true
33 | }
34 | }
35 |
36 | override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
37 | return if (isScrollable) {
38 | super.onInterceptTouchEvent(event)
39 | } else {
40 | false
41 | }
42 | }
43 |
44 | interface ScrollViewListener {
45 | fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int)
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/org/fossify/calendar/views/WeeklyViewGrid.kt:
--------------------------------------------------------------------------------
1 | package org.fossify.calendar.views
2 |
3 | import android.content.Context
4 | import android.graphics.Canvas
5 | import android.graphics.Paint
6 | import android.util.AttributeSet
7 | import android.view.View
8 | import org.fossify.calendar.extensions.config
9 | import org.fossify.calendar.extensions.getWeeklyViewItemHeight
10 |
11 | class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
12 | private val ROWS_CNT = 24
13 | private var paint = Paint(Paint.ANTI_ALIAS_FLAG)
14 | private var daysCount = context.config.weeklyViewDays
15 |
16 | constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
17 |
18 | init {
19 | paint.color = context.resources.getColor(org.fossify.commons.R.color.divider_grey)
20 | }
21 |
22 | override fun onDraw(canvas: Canvas) {
23 | super.onDraw(canvas)
24 | val rowHeight = context.getWeeklyViewItemHeight()
25 | for (i in 0 until ROWS_CNT) {
26 | val y = rowHeight * i.toFloat() - i / 2
27 | canvas.drawLine(0f, y, width.toFloat(), y, paint)
28 | }
29 |
30 | val rowWidth = width / daysCount.toFloat()
31 | for (i in 0 until daysCount) {
32 | val x = rowWidth * i.toFloat()
33 | canvas.drawLine(x, 0f, x, height.toFloat(), paint)
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_check_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-hdpi/ic_check_green.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_cross_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-hdpi/ic_cross_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_question_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-hdpi/ic_question_yellow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/weekly_now.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-hdpi/weekly_now.9.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/img_widget_date_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-nodpi/img_widget_date_preview.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/img_widget_list_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-nodpi/img_widget_list_preview.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/img_widget_monthly_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-nodpi/img_widget_monthly_preview.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_check_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xhdpi/ic_check_green.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_cross_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xhdpi/ic_cross_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_question_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xhdpi/ic_question_yellow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/weekly_now.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xhdpi/weekly_now.9.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_check_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxhdpi/ic_check_green.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_cross_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxhdpi/ic_cross_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_question_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxhdpi/ic_question_yellow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/weekly_now.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxhdpi/weekly_now.9.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_check_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxxhdpi/ic_check_green.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_cross_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxxhdpi/ic_cross_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_question_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxxhdpi/ic_question_yellow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/weekly_now.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/app/src/main/res/drawable-xxxhdpi/weekly_now.9.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/activated_item_foreground_rounded.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/attendee_status_circular_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/day_monthly_event_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/day_monthly_event_background_widget.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/divider_width.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/event_list_color_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bell_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_calendar_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_category_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_change_view_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clock_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_color_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_event_available_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_event_busy_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_event_status_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_monochrome.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mail_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_people_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_repeat_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_task_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_today_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_work_outline_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_rounded.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
8 |
9 |
10 | -
11 |
12 |
-
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_event.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_task.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/stroke_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/stroke_bottom_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/stroke_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout-land/small_month_view_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_day.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_manage_event_types.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_select_time_zone.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
21 |
22 |
23 |
24 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/all_day_events_holder_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/calendar_item_account.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/calendar_item_calendar.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/checkable_color_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/date_picker_dark.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/date_picker_light.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/datetime_pattern_info_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/day_monthly_number_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_filter_event_types.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_reminder_warning.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_select_calendars.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
23 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_select_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_select_radio_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_vertical_linear_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/event_list_section_day.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/event_list_section_day_widget.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/event_list_section_month.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/event_list_section_month_widget.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/filter_event_type_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
21 |
22 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_day.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_days_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_month.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_months_days_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_months_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_years_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_select_time_zone.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
19 |
20 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/month_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/month_view_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/my_checkbox.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/quick_filter_event_type_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
22 |
23 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/radio_button_with_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
17 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/small_month_view_holder.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/week_grid_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/week_now_marker.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/weekly_view_day_column.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/weekly_view_day_letter.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/weekly_view_hour_textview.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/widget_config_event_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
21 |
22 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/cab_day.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/cab_event_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/cab_event_type.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_event.xml:
--------------------------------------------------------------------------------
1 |
2 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_event_types.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_select_time_zone.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_task.xml:
--------------------------------------------------------------------------------
1 |
2 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values-b+es+419/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bn-rBD/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ckb/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cr/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cy/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rGB/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-en-rIN/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-es-rUS/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | فهرست رویدادهای ساده
4 | رویداد
5 | تقویم
6 | ویرایش رویداد
7 | رویداد جدید
8 | ایجاد رویداد جدید
9 | رویداد تکراری
10 | عنوان نمیتواند خالی باشد
11 | رویداد نمیتواند زودتر از شروع به پایان برسد
12 | رویداد با موفقیت بهروز شد
13 | رنگ رویداد
14 | رنگ پیشفرض تقویم
15 | روزانه
16 | هفتگی
17 | ماهانه
18 | سالانه
19 | رویداد با موفقیت اضافه شد
20 |
--------------------------------------------------------------------------------
/app/src/main/res/values-fil/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ia/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-is/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-kn/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-kr/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 40dp
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ltg/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ml/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ms/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-my/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ne/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-or/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa-rPK/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | پہلا
4 | دوجا
5 | تیجا
6 | کیلینڈر
7 | دن دا
8 | ہفتے دا
9 | مہیناوار درش
10 | مہیناوار تے دنوار درش
11 | سالانہ درش
12 | سادے گھٹنے دی قسم
13 | ہفتاواری
14 | ہفتے
15 | مہینے
16 | سال
17 | ہمیشہ لئی
18 | سمیں
19 | دُہراؤ
20 | سارے
21 | پہلا
22 | سکنٹ
23 | تیجا
24 | چوتھا
25 | پنجواں
26 | پچھلے
27 | سارے
28 | چوتھا
29 | پنجواں
30 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sat/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-si/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 320dp
4 | 320dp
5 |
6 | 60dp
7 |
8 | 90dp
9 | 15dp
10 |
11 | 20sp
12 | 22sp
13 | 26sp
14 |
15 | 12sp
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ta/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-te/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-th/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | ปฏิทิน
4 | รายเดือน
5 | รายสัปดาห์
6 | วันอังคาร
7 | สีเหตุการณ์
8 | เปลี่ยนมุมมอง
9 | รายวัน
10 | รายเดือนและรายวัน
11 | รายปี
12 | รายการเหตุการณ์อย่างย่อ
13 | ไม่มีเหตุการณ์ที่กำลังมาถึง
14 | ไปที่วันนี้
15 | ไปวันที่ที่กำหนด
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values-zgh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | ⴰⵙⵎⵍⵓⵙⵙⴰⵏ
4 | ⵜⴰⵔⴱⴰⵢⵜ
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/array.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - @string/no_reminder
5 | - @string/at_start
6 | - @string/custom
7 |
8 |
9 |
10 | - @string/minutes_raw
11 | - @string/hours_raw
12 | - @string/days_raw
13 |
14 |
15 |
16 | - @string/no_repetition
17 | - @string/daily
18 | - @string/weekly
19 | - @string/monthly
20 | - @string/yearly
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/md_red_400_dark
4 | @color/md_blue_800
5 | @color/md_green_700
6 | @color/md_red_400_dark
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/donottranslate.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.fossify.calendar
4 | Fossify Calendar
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
16 |
17 |
24 |
25 |
28 |
29 |
32 |
33 |
36 |
37 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/searchable.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_date_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_list_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_monthly_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.android).apply(false)
3 | alias(libs.plugins.kotlinAndroid).apply(false)
4 | alias(libs.plugins.ksp).apply(false)
5 | alias(libs.plugins.detekt).apply(false)
6 | }
7 |
8 | tasks.register("clean") {
9 | delete {
10 | rootProject.buildDir
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | json_key_file("fastlane/fastlane.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
2 | package_name("org.fossify.calendar") # e.g. com.krausefx.app
3 |
--------------------------------------------------------------------------------
/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | default_platform(:android)
2 |
3 | platform :android do
4 | desc 'Run unit & instrumentation tests'
5 | lane(:test) { test_android }
6 |
7 | desc 'Build & deploy AAB to Google Play (includes metadata)'
8 | lane(:deploy) { deploy_android }
9 |
10 | desc 'Push Play Store metadata'
11 | lane(:metadata) { metadata_android }
12 | end
13 |
--------------------------------------------------------------------------------
/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ----
3 |
4 | # Installation
5 |
6 | Make sure you have the latest version of the Xcode command line tools installed:
7 |
8 | ```sh
9 | xcode-select --install
10 | ```
11 |
12 | For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
13 |
14 | # Available Actions
15 |
16 | ## Android
17 |
18 | ### android test
19 |
20 | ```sh
21 | [bundle exec] fastlane android test
22 | ```
23 |
24 | Run unit & instrumentation tests
25 |
26 | ### android deploy
27 |
28 | ```sh
29 | [bundle exec] fastlane android deploy
30 | ```
31 |
32 | Build & deploy AAB to Google Play (includes metadata)
33 |
34 | ### android metadata
35 |
36 | ```sh
37 | [bundle exec] fastlane android metadata
38 | ```
39 |
40 | Push Play Store metadata
41 |
42 | ----
43 |
44 | This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
45 |
46 | More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
47 |
48 | The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
49 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ca/short_description.txt:
--------------------------------------------------------------------------------
1 | Planifiqueu i establiu recordatoris de forma segura amb el calendari privat.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs-CZ/short_description.txt:
--------------------------------------------------------------------------------
1 | Bezpečně plánujte, rozvrhujte a nastavujte připomínky s naší aplikací kalendáře.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/da-DK/short_description.txt:
--------------------------------------------------------------------------------
1 | Planlæg og sæt påmindelser sikkert med vores private kalenderapp.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/short_description.txt:
--------------------------------------------------------------------------------
1 | Mit der privaten Kalender-App sicher planen, Termine und Erinnerungen festlegen.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/1.txt:
--------------------------------------------------------------------------------
1 | * Initial release.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/2.txt:
--------------------------------------------------------------------------------
1 | * Fixed import compatibility with Simple Calendar.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/3.txt:
--------------------------------------------------------------------------------
1 | * Fixed import compatibility with Simple Calendar.
2 | * Fixed foss flavor configuration.
3 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/4.txt:
--------------------------------------------------------------------------------
1 | * Fixed month view issue on Google Pixel 8 Pro.
2 | * Fixed event color dots on monthly and daily view.
3 | * Fixed incorrect timezone when import ICS files.
4 | * Highlight weekends in print mode.
5 | * Updated holidays for some countries.
6 | * Added some translations.
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | * Resolved issue with multi-day all-day events not displaying on the top bar
2 | * Fixed task opening functionality from widgets
3 | * Fixed resizing issue in date widget
4 | * Fixed opacity for incomplete tasks in widgets
5 | * Fixed spanish translation for saturday.
6 | * Added support for event status
7 | * Replaced checkboxes with switches
8 | * Removed support for Android 7 and older versions
9 | * Other minor bug fixes and improvements
10 | * Added more translations
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/6.txt:
--------------------------------------------------------------------------------
1 | * Fixed issue with "Mark completed" notification button
2 | * Fixed cut-off text in month view on some devices
3 | * Fixed broken weekly repetition in some timezones
4 | * Fixed 'Mark completed' button color in black & white theme
5 | * Fixed invisible attendee suggestions
6 | * Added ability to export event colors in ICS files
7 | * Added ability to quickly filter calendars on long press
8 | * Added state-specific and optional holidays
9 | * Other minor bug fixes and improvements
10 | * Added more translations
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | Added:
2 |
3 | • Support for setting event visibility
4 | • Option to hide date header in event list widget
5 | • Holidays for Bangladesh
6 |
7 | Changed:
8 |
9 | • Updated some in-app icons for consistency
10 | • Updated translations
11 | • Updated holiday data
12 |
13 | Fixed:
14 |
15 | • Addressed a glitch when long pressing in quick filter
16 | • Fixed age calculation for birthdays from private contacts
17 | • Fixed incorrect time in some events imported via ICS files
18 | • Fixed "Go to today" button in weekly view
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/6_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/7_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/phoneScreenshots/8_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/6_en-US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/fastlane/metadata/android/en-US/images/tenInchScreenshots/6_en-US.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Securely plan, schedule, and set reminders with our private calendar app.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Fossify Calendar
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/eo/short_description.txt:
--------------------------------------------------------------------------------
1 | Sekure plani kaj krei memorigilojn helpe de nia privata kalendaro.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es-ES/short_description.txt:
--------------------------------------------------------------------------------
1 | Planea, crea citas y recordatorios sin riesgo con la aplicación de calendario.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/et/short_description.txt:
--------------------------------------------------------------------------------
1 | Meie privaatse kalendriga saad turvaliselt ajakava ja meeldetuletusi hallata.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/eu-ES/short_description.txt:
--------------------------------------------------------------------------------
1 | Planifikatu eta ezarri abisuak modu seguruan gure egutegi aplikazioarekin.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/fr-FR/short_description.txt:
--------------------------------------------------------------------------------
1 | Planifiez et définissez des rappels en sécurité avec notre calendrier privé.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hi-IN/short_description.txt:
--------------------------------------------------------------------------------
1 | निजी कैलेंडर ऐप से सुरक्षित रूप से योजना बनाएं, शेड्यूल और रिमाइंडर सेट करें।
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hr/short_description.txt:
--------------------------------------------------------------------------------
1 | Planiraj, zakaži termine i postavi podsjetnike pomoću privatnog kalendara.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it-IT/short_description.txt:
--------------------------------------------------------------------------------
1 | Programma e imposta promemoria in sicurezza con il nostro calendario privato.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/iw-IL/full_description.txt:
--------------------------------------------------------------------------------
1 | נמאס לכם מיומנים עמוסים ודאגות פרטיות?
2 | Fossify Calendar כאן כדי לשנות זאת. הכלי הפתוח והעוצמתי שלכם לניהול החיים, שתוכנן עם פרטיות כערך עליון וארוז בתכונות עוצמתיות כדי לשמור עליכם מאורגנים.
3 | הנה מה שמבדיל את Fossify Calendar:
4 | 🚫 ללא פרסומות ופרטיות:
5 | האירועים שלכם נשארים שלכם. ללא פרסומות, ללא מעקב, ללא הרשאות פולשניות.
6 | ⏰ גמיש וניתן להתאמה אישית:
7 | צרו אירועים בדיוק עם זמנים, משכים, תזכורות, וכללי חזרה מתקדמים.
8 | 🔄 סנכרון חלק:
9 | סנכרנו ללא מאמץ עם יומן Google, Outlook, Nextcloud, Exchange ועוד.
10 | 🎨 התאימו אישית את המתכנן שלכם:
11 | הגדירו צלילים מותאמים אישית, זרמי שמע חוזרים, רעידות וערכות נושא כדי להתאים להעדפותיכם.
12 | 🌈 ווידג'טים תוססים:
13 | האירו את יומכם עם ווידג'טים יפים של לוח שנה וערכות נושא למסך הבית שלכם.
14 | 📅 ניהול יום ללא מאמץ:
15 | תכננו את יומכם בקלות, בין אם אתם מקצוענים עסוקים או מארגני משפחות.
16 | 🎉 ייבוא חגיגות:
17 | לעולם אל תחמיצו יום הולדת או יום נישואין! ייבאו בקלות חגים ותאריכים מיוחדים.
18 | 🔍 סינון תצוגות:
19 | מצאו במהירות את מה שאתם מחפשים עם מסנני אירועים.
20 | 📆 תצוגות מרובות:
21 | עברו בין תצוגות יומיות, שבועיות, חודשיות, שנתיות ותצוגות אירועים ללא מאמץ.
22 | ✨ אלגנטיות של עיצוב חומרי (Material Design):
23 | תיהנו מממשק אינטואיטיבי וידידותי למשתמש עם ערכות נושא דינמיות.
24 | בנוסף, Fossify Calendar היא קוד פתוח! הצטרפו לקהילה התוססת ב-GitHub, תרמו לפרויקט, והפכו אותו לייחודי משלכם.
25 | הורידו את Fossify Calendar עכשיו ותחוו את העוצמה של לוח זמנים פרטי וניתן להתאמה אישית.
26 | חקרו עוד אפליקציות Fossify: https://www.fossify.org
27 | קוד פתוח: https://www.github.com/FossifyOrg
28 | הצטרפו לקהילה ב-Reddit: https://www.reddit.com/r/Fossify
29 | התחברו בטלגרם: https://t.me/Fossify
30 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/iw-IL/short_description.txt:
--------------------------------------------------------------------------------
1 | תכנן, קבע וקבל תזכורות באופן מאובטח באמצעות אפליקציית לוח השנה הפרטית שלנו.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja-JP/short_description.txt:
--------------------------------------------------------------------------------
1 | 予定やスケジュールを安全に立てたり、リマインダーを設定したりできるプライベートなカレンダーアプリです。
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl-NL/short_description.txt:
--------------------------------------------------------------------------------
1 | Plan veilig en stel herinneringen in met deze privacyvriendelijke agenda.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/short_description.txt:
--------------------------------------------------------------------------------
1 | Bezpiecznie planuj i ustawiaj przypomnienia z naszą apką prywatnego kalendarza
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Planeje, agende, e configure lembretes com o nosso app de calendário privado.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/short_description.txt:
--------------------------------------------------------------------------------
1 | Создавайте планы, расписания и напоминания безопасно с нашим календарём.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sv-SE/short_description.txt:
--------------------------------------------------------------------------------
1 | Planera, schemalägg och skapa påminnelser på ett säkert sätt med vår kalenderapp
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr-TR/short_description.txt:
--------------------------------------------------------------------------------
1 | Gizlilikli takvim uygulamamızla güvenli plan yapın, programlayın ve hatırlatın.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Безпечно створюйте плани, графіки та нагадування з нашим особистим календарем.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 厌倦了杂乱的日历和隐私问题?
2 |
3 | Fossify 日历旨在改变这一现状。您管理生活的开源引擎,以隐私为核心设计,并具有强大的功能,让您保持井井有条。
4 |
5 | 以下是 Fossify 日历的不同之处:
6 |
7 | 🚫 无广告和私人:
8 | 您的活动仍属于您。没有广告,没有跟踪,没有侵入性权限。
9 |
10 | ⏰ 灵活且可自定义:
11 | 通过时间、持续时间、提醒和高级重复规则,精确处理活动。
12 |
13 | 🔄 无缝同步:
14 | 与 Google 日历、Outlook、Nextcloud、Exchange 等轻松同步。
15 |
16 | 🎨 个性化您的计划:
17 | 设置自定义声音、循环音频流、振动和主题以匹配您的偏好。
18 |
19 | 🌈 充满活力的小部件:
20 | 使用漂亮的日历小部件和主屏幕主题照亮您的一天。
21 |
22 | 📅 轻松的日常管理:
23 | 无论您是忙碌的专业人士还是家庭组织者都可以轻松计划您的一天。
24 |
25 | 🎉 导入庆祝活动:
26 | 永远不要错过生日或周年纪念日!轻松导入假期和特殊日期。
27 |
28 | 🔍 筛选视图:
29 | 使用活动筛选器快速找到您要查找的内容。
30 |
31 | 📆 多种视图:
32 | 轻松地在每日、每周、每月、每年和活动视图之间切换。
33 |
34 | ✨ Material 设计优雅:
35 | 享受直观且用户友好的界面和动态主题。
36 |
37 | 此外,Fossify 日历是开源的!加入 GitHub 上充满活力的社区,为项目做贡献,并使其独一无二。
38 |
39 | 立即下载 Fossify 日历,体验私人且可自定义的日程表的强大功能。
40 |
41 | 探索更多 Fossify 应用:https://www.fossify.org
42 | 开源代码:https://www.github.com/FossifyOrg
43 | 加入 Reddit 社区:https://www.reddit.com/r/Fossify
44 | 在 Telegram 上联系:https://t.me/Fossify
45 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 使用我们的私人日历应用安全地计划、安排和设置提醒。
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/full_description.txt:
--------------------------------------------------------------------------------
1 | 厭倦了雜亂的日曆與隱私問題?
2 |
3 | Fossify 行事曆的出現就是為了改變現狀。您管理生活的開源強大工具,其設計以隱私為核心,並具有強大的功能,讓您井井有條。
4 |
5 | Fossify 行事曆的與眾不同之處如下:
6 |
7 | 🚫 無廣告且私密:
8 | 您的活動仍屬於您。無廣告且無追蹤,沒有侵入性權限。
9 |
10 | ⏰ 靈活且可自訂:
11 | 根據次數、持續時間、提醒與進階重複規則精確地編寫活動。
12 |
13 | 🔄 無縫同步:
14 | 輕鬆與 Google 日曆、Outlook、Nextcloud、Exchange 等同步。
15 |
16 | 🎨 個人化您的計畫:
17 | 設定自訂音效、循環音訊串流、震動與主題以滿足您的喜好。
18 |
19 | 🌈 充滿活力的小工具:
20 | 用主畫面上漂亮的行事曆小工具與主題點亮您的一天。
21 |
22 | 📅 輕鬆的日常管理:
23 | 無論您是忙碌的專業人士還是家庭組織者,都可以輕鬆規劃您的一天。
24 |
25 | 🎉 匯入慶祝活動:
26 | 永遠不會錯過生日或週年紀念日!輕鬆匯入假期與特殊日期。
27 |
28 | 🔍 篩選檢視:
29 | 使用事件篩選器快速找到您要尋找的內容。
30 |
31 | 📆 多種檢視方式:
32 | 輕鬆在每日、每週、每月、每年與活動檢視之間切換。
33 |
34 | ✨ 優雅的質感設計:
35 | 享受直覺且使用者友善的介面與動態主題。
36 |
37 | 此外,Fossify 行事曆是開源的!加入 GitHub 上充滿活力的社群,為該專案做出貢獻,並使其獨一無二。
38 |
39 | 立即下載 Fossify 行事曆,體驗私人且可自訂的行程安排的強大功能。
40 |
41 | 探索更多 Fossify 應用程式:https://www.fossify.org
42 | 開源程式碼:https://www.github.com/FossifyOrg
43 | 加入 Reddit 社群:https://www.reddit.com/r/Fossify
44 | 在 Telegram 上找到我們:https://t.me/Fossify
45 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 使用我們的私人行事曆安全地規劃、安排與設定提醒。
2 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | android.enableJetifier=true
2 | android.useAndroidX=true
3 | org.gradle.jvmargs=-Xmx8192m
4 |
5 | # Versioning
6 | VERSION_NAME=1.3.0
7 | VERSION_CODE=7
8 | APP_ID=org.fossify.calendar
9 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/graphics/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/graphics/featureGraphic.png
--------------------------------------------------------------------------------
/graphics/icon.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/graphics/icon.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/FossifyOrg/Calendar/80b880885df8d18521171b9ef794192072c7e01e/graphics/icon.webp
--------------------------------------------------------------------------------
/keystore.properties_sample:
--------------------------------------------------------------------------------
1 | storePassword=123456
2 | keyPassword=abcdef
3 | keyAlias=myAlias
4 | storeFile=../keystore.jks
5 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | maven { setUrl("https://jitpack.io") }
14 | }
15 | }
16 | include(":app")
17 |
--------------------------------------------------------------------------------