├── .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 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/cab_event_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/cab_event_type.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_event.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_event_types.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_select_time_zone.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_task.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 24 | 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 | 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 | 2 | 4 | 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 | --------------------------------------------------------------------------------