Full Code of alexstyl/Memento-Calendar for AI

main d224f0af53ee cached
903 files
1.7 MB
487.1k tokens
1710 symbols
1 requests
Download .txt
Showing preview only (2,080K chars total). Download the full file or copy to clipboard to get everything.
Repository: alexstyl/Memento-Calendar
Branch: main
Commit: d224f0af53ee
Files: 903
Total size: 1.7 MB

Directory structure:
gitextract_87q2jt04/

├── .circleci/
│   ├── ci-scripts/
│   │   ├── accept-android-licenses.sh
│   │   ├── ensure-sdkmanager.sh
│   │   └── mock-google-services.json
│   └── config.yml
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── LICENSE
├── PEOPLE.md
├── README.md
├── android_common/
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           ├── android/
│           │           │   ├── AndroidLogger.kt
│           │           │   ├── Version.kt
│           │           │   ├── ViewVisibility.java
│           │           │   ├── preferences/
│           │           │   │   └── widget/
│           │           │   │       └── TimePreference.java
│           │           │   └── widget/
│           │           │       └── AppWidgetId.java
│           │           ├── resources/
│           │           │   ├── AndroidDimensionResources.java
│           │           │   └── DimensionResources.java
│           │           └── specialdates/
│           │               ├── AndroidStrings.kt
│           │               ├── TextViewLabelSetter.java
│           │               ├── date/
│           │               │   └── IntentDateExtensions.kt
│           │               ├── events/
│           │               │   └── database/
│           │               │       └── EventColumns.java
│           │               └── wear/
│           │                   └── SharedConstants.java
│           └── res/
│               ├── values/
│               │   ├── colors.xml
│               │   ├── strings-non-translatable.xml
│               │   └── strings.xml
│               ├── values-cs/
│               │   └── strings.xml
│               ├── values-de/
│               │   └── strings.xml
│               ├── values-el/
│               │   └── strings.xml
│               ├── values-fr/
│               │   └── strings.xml
│               ├── values-it/
│               │   └── strings.xml
│               ├── values-lv/
│               │   └── bools.xml
│               ├── values-lv-rLV/
│               │   └── strings.xml
│               ├── values-nl/
│               │   └── strings.xml
│               └── values-sk/
│                   └── bool.xml
├── android_mobile/
│   ├── .gitignore
│   ├── build.gradle
│   ├── google_services.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── debug/
│       │   ├── AndroidManifest.xml
│       │   ├── assets/
│       │   │   └── mock/
│       │   │       └── facebook-calendar.ics
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alexstyl/
│       │   │           └── specialdates/
│       │   │               ├── DebugAppComponent.java
│       │   │               ├── DebugApplication.java
│       │   │               ├── OptionalDependencies.java
│       │   │               ├── debug/
│       │   │               │   ├── DebugActivity.java
│       │   │               │   ├── DebugFragment.kt
│       │   │               │   ├── DebugModule.java
│       │   │               │   └── DebugPreferences.java
│       │   │               ├── donate/
│       │   │               │   └── DebugDonationPreferences.java
│       │   │               └── events/
│       │   │                   └── peopleevents/
│       │   │                       └── DebugPeopleEventsUpdater.java
│       │   └── res/
│       │       └── layout/
│       │           ├── activity_debug.xml
│       │           ├── debug_activity_animations.xml
│       │           └── debug_activity_mixing_colors.xml
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── aidl/
│       │   │   └── com/
│       │   │       └── android/
│       │   │           └── vending/
│       │   │               └── billing/
│       │   │                   └── IInAppBillingService.aidl
│       │   ├── java/
│       │   │   ├── android/
│       │   │   │   └── support/
│       │   │   │       └── v4/
│       │   │   │           └── preference/
│       │   │   │               ├── PreferenceFragment.java
│       │   │   │               └── PreferenceManagerCompat.java
│       │   │   └── com/
│       │   │       └── alexstyl/
│       │   │           ├── android/
│       │   │           │   ├── Bitmap.kt
│       │   │           │   ├── SimpleAnimatorListener.java
│       │   │           │   ├── Uri.kt
│       │   │           │   └── preferences/
│       │   │           │       └── PreferenceKeyId.java
│       │   │           ├── resources/
│       │   │           │   ├── AndroidColors.kt
│       │   │           │   └── ResourcesModule.java
│       │   │           └── specialdates/
│       │   │               ├── AndroidApplicationModule.java
│       │   │               ├── AppComponent.java
│       │   │               ├── DeviceConfigurationUpdatedReceiver.java
│       │   │               ├── EasyPreferences.java
│       │   │               ├── ExternalNavigator.java
│       │   │               ├── FabricTracker.java
│       │   │               ├── JobsCreator.kt
│       │   │               ├── MementoApplication.java
│       │   │               ├── MementoConstants.kt
│       │   │               ├── SQLArgumentBuilder.java
│       │   │               ├── ShareAppIntentCreator.java
│       │   │               ├── addevent/
│       │   │               │   ├── AccountData.java
│       │   │               │   ├── AddEventActivity.kt
│       │   │               │   ├── AddEventModule.kt
│       │   │               │   ├── AndroidAddEventView.kt
│       │   │               │   ├── AndroidContactOperationsExecutor.kt
│       │   │               │   ├── AndroidEventIcons.kt
│       │   │               │   ├── ContactDetailsListener.java
│       │   │               │   ├── ContactEventViewHolder.java
│       │   │               │   ├── ContactEventsAdapter.java
│       │   │               │   ├── ContactSuggestionViewHolder.java
│       │   │               │   ├── DiscardPromptDialog.java
│       │   │               │   ├── EventDatePickerDialogFragment.java
│       │   │               │   ├── ImageIntentFactory.java
│       │   │               │   ├── OnCameraClickedListener.java
│       │   │               │   ├── OperationsFactory.kt
│       │   │               │   ├── ToastDisplayer.kt
│       │   │               │   ├── ToolbarBackgroundAnimator.java
│       │   │               │   ├── ToolbarBackgroundFadingAnimator.java
│       │   │               │   ├── ToolbarBackgroundStubAnimator.java
│       │   │               │   ├── UriFilePathProvider.kt
│       │   │               │   ├── WriteableAccountsProvider.java
│       │   │               │   ├── bottomsheet/
│       │   │               │   │   ├── BottomSheetPicturesDialog.kt
│       │   │               │   │   ├── ClearImageViewHolder.java
│       │   │               │   │   ├── ImagePickerOptionViewHolder.kt
│       │   │               │   │   ├── ImagePickerOptionsAdapter.java
│       │   │               │   │   ├── IntentResolver.kt
│       │   │               │   │   ├── PhotoPickerViewModel.kt
│       │   │               │   │   └── PhotoPickerViewModelFactory.kt
│       │   │               │   └── ui/
│       │   │               │       ├── AvatarPickerView.java
│       │   │               │       ├── ContactSuggestionView.java
│       │   │               │       ├── ContactsAdapter.java
│       │   │               │       ├── DeviceContactsFilter.kt
│       │   │               │       └── EventDatePicker.java
│       │   │               ├── analytics/
│       │   │               │   ├── Action.java
│       │   │               │   ├── ActionWithParameters.java
│       │   │               │   ├── AnalyticsModule.kt
│       │   │               │   ├── CompositeAnalytics.kt
│       │   │               │   ├── FirebaseAnalyticsImpl.kt
│       │   │               │   └── MixPanel.kt
│       │   │               ├── contact/
│       │   │               │   ├── AndroidContactFactory.kt
│       │   │               │   ├── AndroidContactsProviderSource.kt
│       │   │               │   ├── AndroidContactsQuery.java
│       │   │               │   ├── ContactIntentExtractor.kt
│       │   │               │   ├── ContactsModule.kt
│       │   │               │   ├── EmptyContactSource.kt
│       │   │               │   └── FacebookContactsSource.kt
│       │   │               ├── dailyreminder/
│       │   │               │   ├── AlarmManagerCompat.java
│       │   │               │   ├── AndroidDailyReminderNotifier.kt
│       │   │               │   ├── AndroidDailyReminderScheduler.kt
│       │   │               │   ├── AndroidDailyReminderViewModelFactory.kt
│       │   │               │   ├── DailyReminderDebugPreferences.java
│       │   │               │   ├── DailyReminderJob.kt
│       │   │               │   ├── DailyReminderModule.java
│       │   │               │   ├── DailyReminderOreoChannelCreator.kt
│       │   │               │   ├── DailyReminderPreferences.kt
│       │   │               │   ├── NoActions.kt
│       │   │               │   ├── NotificationConstants.kt
│       │   │               │   ├── NotificationDailyReminderView.kt
│       │   │               │   └── actions/
│       │   │               │       ├── AndroidContactActionsView.kt
│       │   │               │       ├── ContactActionsModule.java
│       │   │               │       ├── ContactActionsPresenter.kt
│       │   │               │       ├── ContactActionsView.kt
│       │   │               │       └── PersonActionsActivity.kt
│       │   │               ├── date/
│       │   │               │   ├── AndroidDateLabelCreator.kt
│       │   │               │   └── DateModule.java
│       │   │               ├── donate/
│       │   │               │   ├── AndroidDonation.java
│       │   │               │   ├── AndroidDonationConstants.java
│       │   │               │   ├── AndroidDonationService.java
│       │   │               │   ├── DonateActivity.java
│       │   │               │   ├── DonateModule.java
│       │   │               │   ├── DonatePresenter.java
│       │   │               │   ├── DonationPreferences.java
│       │   │               │   ├── SimpleOnSeekBarChangeListener.java
│       │   │               │   └── util/
│       │   │               │       ├── IabBroadcastReceiver.java
│       │   │               │       ├── IabException.java
│       │   │               │       ├── IabHelper.java
│       │   │               │       ├── IabResult.java
│       │   │               │       ├── Inventory.java
│       │   │               │       ├── Purchase.java
│       │   │               │       ├── Security.java
│       │   │               │       └── SkuDetails.java
│       │   │               ├── events/
│       │   │               │   ├── ContactsObserver.java
│       │   │               │   ├── PreferenceChangedEventsUpdateTrigger.java
│       │   │               │   ├── bankholidays/
│       │   │               │   │   ├── BankHolidaysModule.java
│       │   │               │   │   └── BankHolidaysPreferences.java
│       │   │               │   ├── database/
│       │   │               │   │   ├── ContactColumns.java
│       │   │               │   │   ├── DatabaseContract.java
│       │   │               │   │   └── EventSQLiteOpenHelper.kt
│       │   │               │   ├── namedays/
│       │   │               │   │   ├── NamedayModule.java
│       │   │               │   │   ├── NamedayPreferences.java
│       │   │               │   │   ├── activity/
│       │   │               │   │   │   ├── AndroidNamedaysOnADayView.kt
│       │   │               │   │   │   ├── CelebratingContactViewHolder.kt
│       │   │               │   │   │   ├── NameViewHolder.kt
│       │   │               │   │   │   ├── NamedayScreenViewHolder.kt
│       │   │               │   │   │   ├── NamedaysInADayModule.java
│       │   │               │   │   │   ├── NamedaysOnADayActivity.kt
│       │   │               │   │   │   ├── NamedaysOnADayNavigator.kt
│       │   │               │   │   │   ├── NamedaysScreenAdapter.java
│       │   │               │   │   │   ├── NamedaysScreenViewHolderFactory.kt
│       │   │               │   │   │   └── NamedaysViewModelDiff.java
│       │   │               │   │   └── calendar/
│       │   │               │   │       └── resource/
│       │   │               │   │           └── AndroidJSONResourceLoader.kt
│       │   │               │   └── peopleevents/
│       │   │               │       ├── AndroidPeopleEventsPersister.kt
│       │   │               │       ├── AndroidPeopleEventsProvider.kt
│       │   │               │       ├── AndroidPeopleEventsRepository.kt
│       │   │               │       ├── AndroidUpcomingEventSettings.kt
│       │   │               │       ├── ContactEventsMarshaller.java
│       │   │               │       ├── CustomEventProvider.kt
│       │   │               │       └── PeopleEventsModule.kt
│       │   │               ├── facebook/
│       │   │               │   ├── AndroidFacebookPreferences.java
│       │   │               │   ├── FacebookLogoutService.java
│       │   │               │   ├── FacebookModule.java
│       │   │               │   ├── FacebookProfileActivity.java
│       │   │               │   ├── FacebookProfilePresenter.java
│       │   │               │   ├── FacebookProfileView.java
│       │   │               │   ├── OnFacebookLogOutCallback.java
│       │   │               │   ├── ScreenOrientationLock.java
│       │   │               │   ├── friendimport/
│       │   │               │   │   ├── CalendarURLCreator.java
│       │   │               │   │   ├── FacebookFriendsIntentService.java
│       │   │               │   │   ├── FacebookFriendsPersister.java
│       │   │               │   │   └── FacebookFriendsScheduler.java
│       │   │               │   └── login/
│       │   │               │       ├── CookieResetter.java
│       │   │               │       ├── CredentialsExtractor.java
│       │   │               │       ├── FBImportClient.java
│       │   │               │       ├── FacebookImportView.java
│       │   │               │       ├── FacebookLogInActivity.java
│       │   │               │       ├── FacebookLogInCallback.java
│       │   │               │       ├── FacebookLogInException.java
│       │   │               │       ├── FacebookWebView.java
│       │   │               │       └── UserCredentialsExtractorTask.java
│       │   │               ├── home/
│       │   │               │   ├── DonationBannerView.kt
│       │   │               │   ├── HomeActivity.java
│       │   │               │   ├── HomeNavigator.kt
│       │   │               │   ├── HomeViewPagerAdapter.java
│       │   │               │   ├── OnCloseBannerListener.kt
│       │   │               │   └── SearchTransitioner.java
│       │   │               ├── images/
│       │   │               │   ├── AndroidContactsImageDownloader.kt
│       │   │               │   ├── CrossFadeBitmapDisplayer.java
│       │   │               │   ├── CrossFadeCircleBitmapDisplayer.java
│       │   │               │   ├── DecodedImage.java
│       │   │               │   ├── ImageDecoder.kt
│       │   │               │   ├── ImageLoadedConsumer.java
│       │   │               │   ├── ImageLoader.kt
│       │   │               │   ├── ImageModule.java
│       │   │               │   ├── NutraBaseImageDecoder.java
│       │   │               │   ├── SimpleImageLoadedConsumer.java
│       │   │               │   └── UILImageLoader.java
│       │   │               ├── people/
│       │   │               │   ├── ImportFromFacebookViewHolder.kt
│       │   │               │   ├── NoContactViewHolder.kt
│       │   │               │   ├── PeopleAdapter.java
│       │   │               │   ├── PeopleDiffCallback.kt
│       │   │               │   ├── PeopleFragment.java
│       │   │               │   ├── PeopleItemDecorator.java
│       │   │               │   ├── PeopleModule.java
│       │   │               │   └── PeopleViewHolder.java
│       │   │               ├── permissions/
│       │   │               │   ├── AndroidPermissions.kt
│       │   │               │   └── ContactPermissionActivity.java
│       │   │               ├── person/
│       │   │               │   ├── AndroidContactActions.kt
│       │   │               │   ├── AndroidContactActionsProvider.kt
│       │   │               │   ├── AndroidPersonView.kt
│       │   │               │   ├── BottomSheetIntentAdapter.java
│       │   │               │   ├── BottomSheetIntentDialog.kt
│       │   │               │   ├── BottomSheetIntentListener.java
│       │   │               │   ├── CallMethod.kt
│       │   │               │   ├── CallViewHolder.java
│       │   │               │   ├── CompositeContactActionsProvider.kt
│       │   │               │   ├── ContactAction.kt
│       │   │               │   ├── ContactActionViewModel.kt
│       │   │               │   ├── ContactActionsAdapter.java
│       │   │               │   ├── ContactActionsPageViewHolder.kt
│       │   │               │   ├── ContactActionsProvider.kt
│       │   │               │   ├── ContactItemsAdapter.java
│       │   │               │   ├── EventAdapter.java
│       │   │               │   ├── EventPageViewHolder.kt
│       │   │               │   ├── EventPressedListener.java
│       │   │               │   ├── EventViewHolder.java
│       │   │               │   ├── FacebookContactActionsProvider.kt
│       │   │               │   ├── IntentOptionViewHolder.java
│       │   │               │   ├── IntentOptionViewModel.java
│       │   │               │   ├── PageViewHolder.kt
│       │   │               │   ├── PersonActivity.kt
│       │   │               │   ├── PersonAvailableActionsViewModel.kt
│       │   │               │   ├── PersonDetailsNavigator.kt
│       │   │               │   ├── PersonDetailsViewModelFactory.kt
│       │   │               │   ├── PersonInfoViewModel.kt
│       │   │               │   ├── PersonModule.kt
│       │   │               │   ├── PersonPresenter.kt
│       │   │               │   └── PersonView.kt
│       │   │               ├── receiver/
│       │   │               │   └── BootCompleteReceiver.java
│       │   │               ├── search/
│       │   │               │   ├── BackKeyEditText.java
│       │   │               │   ├── CaseInsensitiveComparator.java
│       │   │               │   ├── ContactEventViewModel.kt
│       │   │               │   ├── ContactEventViewModelFactory.kt
│       │   │               │   ├── DelayedTextWatcher.java
│       │   │               │   ├── MoreViewHolder.java
│       │   │               │   ├── NameSuggestionsAdapter.java
│       │   │               │   ├── NamedayCard.java
│       │   │               │   ├── NamedaysLoader.java
│       │   │               │   ├── NamesFilter.java
│       │   │               │   ├── NoResultsViewHolder.java
│       │   │               │   ├── OnBackKeyPressedListener.java
│       │   │               │   ├── SearchActivity.java
│       │   │               │   ├── SearchBar.java
│       │   │               │   ├── SearchHintCreator.java
│       │   │               │   ├── SearchLoader.java
│       │   │               │   ├── SearchModule.java
│       │   │               │   ├── SearchNavigator.kt
│       │   │               │   ├── SearchResultAdapter.java
│       │   │               │   ├── SearchResultContactViewHolder.java
│       │   │               │   ├── SearchResultNamedayViewHolder.java
│       │   │               │   ├── SearchResults.java
│       │   │               │   ├── SuggstedNameViewHolder.java
│       │   │               │   └── ToggleVisibilityOnFocus.java
│       │   │               ├── settings/
│       │   │               │   ├── ClickableRingtonePreference.java
│       │   │               │   ├── DailyReminderActivity.java
│       │   │               │   ├── DailyReminderFragment.kt
│       │   │               │   ├── DailyReminderNavigator.kt
│       │   │               │   ├── MementoThemeNameComparator.java
│       │   │               │   ├── NamedayListPreference.java
│       │   │               │   ├── OnlyGreekSupportedDialog.java
│       │   │               │   ├── PreferenceNotFoundException.kt
│       │   │               │   ├── ThemeSelectAdapter.java
│       │   │               │   ├── ThemeSelectDialog.java
│       │   │               │   ├── ThemeViewHolder.java
│       │   │               │   └── UserSettingsFragment.java
│       │   │               ├── support/
│       │   │               │   ├── AskForSupport.kt
│       │   │               │   ├── CallForRatingPreferences.java
│       │   │               │   ├── Emoticon.java
│       │   │               │   ├── OnSupportCardClickListener.java
│       │   │               │   └── RateDialog.java
│       │   │               ├── theming/
│       │   │               │   ├── AttributeExtractor.java
│       │   │               │   ├── DrawableTinter.java
│       │   │               │   ├── MementoTheme.kt
│       │   │               │   ├── ThemeMonitor.java
│       │   │               │   ├── Themer.kt
│       │   │               │   ├── ThemingModule.java
│       │   │               │   └── ThemingPreferences.kt
│       │   │               ├── transition/
│       │   │               │   ├── FadeInTransition.java
│       │   │               │   ├── FadeOutTransition.java
│       │   │               │   └── SimpleTransitionListener.java
│       │   │               ├── ui/
│       │   │               │   ├── DummyHideStatusBarListener.java
│       │   │               │   ├── HorizontalDivider.java
│       │   │               │   ├── LolipopHideStatusBarListener.java
│       │   │               │   ├── MementoCardView.java
│       │   │               │   ├── ViewFader.java
│       │   │               │   ├── base/
│       │   │               │   │   ├── MementoActivity.kt
│       │   │               │   │   ├── MementoDialog.java
│       │   │               │   │   ├── MementoFragment.java
│       │   │               │   │   ├── MementoPreferenceActivity.kt
│       │   │               │   │   ├── MementoPreferenceFragment.kt
│       │   │               │   │   └── ThemedMementoActivity.kt
│       │   │               │   ├── dialog/
│       │   │               │   │   └── ProgressFragmentDialog.java
│       │   │               │   ├── loader/
│       │   │               │   │   └── SimpleAsyncTaskLoader.java
│       │   │               │   └── widget/
│       │   │               │       ├── AndroidLetterPainter.java
│       │   │               │       ├── AvatarLayout.java
│       │   │               │       ├── ColorImageView.java
│       │   │               │       ├── ForegroundLinearLayout.java
│       │   │               │       ├── LogoView.java
│       │   │               │       ├── MementoToolbar.java
│       │   │               │       ├── SpacesItemDecoration.java
│       │   │               │       └── ViewModule.java
│       │   │               ├── upcoming/
│       │   │               │   ├── AndroidUpcomingDateStringCreator.kt
│       │   │               │   ├── AndroidUpcomingMVPView.kt
│       │   │               │   ├── BankholidayViewHolder.kt
│       │   │               │   ├── ContactEventViewHolder.kt
│       │   │               │   ├── DateHeaderViewHolder.kt
│       │   │               │   ├── DatePickerDialogFragment.java
│       │   │               │   ├── NamedaysViewHolder.kt
│       │   │               │   ├── PeopleEventsRefreshJob.kt
│       │   │               │   ├── UpcomingEventsAdapter.java
│       │   │               │   ├── UpcomingEventsDecorator.java
│       │   │               │   ├── UpcomingEventsDiffCallback.kt
│       │   │               │   ├── UpcomingEventsFragment.kt
│       │   │               │   ├── UpcomingEventsModule.kt
│       │   │               │   ├── UpcomingRowViewHolder.kt
│       │   │               │   ├── UpcomingViewHolderFactory.kt
│       │   │               │   ├── view/
│       │   │               │   │   ├── ExposedSearchToolbar.java
│       │   │               │   │   └── OnUpcomingEventClickedListener.java
│       │   │               │   └── widget/
│       │   │               │       ├── RecentUpcomingPeopleEventsModule.kt
│       │   │               │       ├── list/
│       │   │               │       │   ├── BankHolidayBinder.kt
│       │   │               │       │   ├── CircularAvatarFactory.java
│       │   │               │       │   ├── ContactEventBinder.kt
│       │   │               │       │   ├── DateHeaderBinder.kt
│       │   │               │       │   ├── NamedaysBinder.kt
│       │   │               │       │   ├── UpcomingEventViewBinder.java
│       │   │               │       │   ├── UpcomingEventsRemoteViewService.java
│       │   │               │       │   ├── UpcomingEventsScrollingAppWidgetProvider.java
│       │   │               │       │   ├── UpcomingEventsScrollingWidgetView.java
│       │   │               │       │   ├── UpcomingEventsViewsFactory.java
│       │   │               │       │   └── WidgetRouterActivity.kt
│       │   │               │       └── today/
│       │   │               │           ├── AndroidRecentPeopleEventsView.kt
│       │   │               │           ├── LuminanceAnalyzer.kt
│       │   │               │           ├── SimpleOnSeekBarChangeListener.java
│       │   │               │           ├── TodayAppWidgetProvider.kt
│       │   │               │           ├── TodayUpcomingEventsView.java
│       │   │               │           ├── TransparencyColorCalculator.java
│       │   │               │           ├── UpcomingWidgetConfigurationPanel.java
│       │   │               │           ├── UpcomingWidgetConfigureActivity.kt
│       │   │               │           ├── UpcomingWidgetPreferences.kt
│       │   │               │           ├── UpcomingWidgetPreviewLayout.java
│       │   │               │           ├── UserOptions.kt
│       │   │               │           ├── WidgetColorCalculator.java
│       │   │               │           ├── WidgetImageLoader.java
│       │   │               │           └── WidgetVariant.java
│       │   │               ├── util/
│       │   │               │   ├── GreekNameUtils.java
│       │   │               │   └── NaturalLanguageUtils.java
│       │   │               └── wear/
│       │   │                   ├── WearSyncService.java
│       │   │                   └── WearSyncUpcomingEventsView.java
│       │   └── res/
│       │       ├── anim/
│       │       │   ├── bounce.xml
│       │       │   ├── grow_from_bottom.xml
│       │       │   ├── grow_from_top.xml
│       │       │   ├── heartbeat.xml
│       │       │   ├── slide_in_below.xml
│       │       │   ├── slide_in_from_above.xml
│       │       │   ├── slide_in_from_below.xml
│       │       │   ├── slide_out_above.xml
│       │       │   ├── slide_out_from_above.xml
│       │       │   ├── slide_out_from_below.xml
│       │       │   ├── slide_up_left.xml
│       │       │   ├── slide_up_right.xml
│       │       │   └── stay.xml
│       │       ├── drawable/
│       │       │   ├── ab_background_textured_dayslight.xml
│       │       │   ├── background_daymarker.xml
│       │       │   ├── background_suggestions.xml
│       │       │   ├── black_to_transparent_gradient_facing_down.xml
│       │       │   ├── btn_cab_done_dayslight.xml
│       │       │   ├── card_noshadow.xml
│       │       │   ├── dayslight_progress_horizontal_holo_light.xml
│       │       │   ├── dayslight_progress_indeterminate_horizontal_holo_light.xml
│       │       │   ├── divider_top_horizontal.xml
│       │       │   ├── ic_add_contact_42px.xml
│       │       │   ├── ic_add_person_24px.xml
│       │       │   ├── ic_arrow_back_white_24dp.xml
│       │       │   ├── ic_bankholidays.xml
│       │       │   ├── ic_bankholidays_disabled.xml
│       │       │   ├── ic_call.xml
│       │       │   ├── ic_camera.xml
│       │       │   ├── ic_check_white.xml
│       │       │   ├── ic_clear.xml
│       │       │   ├── ic_close_black.xml
│       │       │   ├── ic_close_white.xml
│       │       │   ├── ic_contacts.xml
│       │       │   ├── ic_contacts_disabled.xml
│       │       │   ├── ic_donate.xml
│       │       │   ├── ic_events.xml
│       │       │   ├── ic_f_icon.xml
│       │       │   ├── ic_facebook_import_friends.xml
│       │       │   ├── ic_facebook_like.xml
│       │       │   ├── ic_facebook_logo_traced.xml
│       │       │   ├── ic_facebook_sad.xml
│       │       │   ├── ic_friend_invite.xml
│       │       │   ├── ic_gift.xml
│       │       │   ├── ic_github.xml
│       │       │   ├── ic_licenses.xml
│       │       │   ├── ic_menu.xml
│       │       │   ├── ic_message.xml
│       │       │   ├── ic_namedays.xml
│       │       │   ├── ic_namedays_disabled.xml
│       │       │   ├── ic_person_120.xml
│       │       │   ├── ic_person_24dp.xml
│       │       │   ├── ic_person_96dp.xml
│       │       │   ├── ic_person_light_24dp.xml
│       │       │   ├── ic_search_black_24dp.xml
│       │       │   ├── ic_settings.xml
│       │       │   ├── progress_horizontal_dayslight.xml
│       │       │   ├── selectable_background_dayslight.xml
│       │       │   ├── spinner_background_ab_dayslight.xml
│       │       │   └── tab_indicator_ab_dayslight.xml
│       │       ├── drawable-v21/
│       │       │   ├── blue_ripple.xml
│       │       │   ├── neutral_ripple.xml
│       │       │   ├── neutral_ripple_no_mask.xml
│       │       │   ├── red_ripple.xml
│       │       │   └── red_ripple_no_mask.xml
│       │       ├── layout/
│       │       │   ├── abc_dropdown_title.xml
│       │       │   ├── activity_add_event.xml
│       │       │   ├── activity_call.xml
│       │       │   ├── activity_contact_permission_request.xml
│       │       │   ├── activity_dailyreminder.xml
│       │       │   ├── activity_debug_facebook.xml
│       │       │   ├── activity_donate.xml
│       │       │   ├── activity_facebook_log_in.xml
│       │       │   ├── activity_facebook_profile.xml
│       │       │   ├── activity_home.xml
│       │       │   ├── activity_namedays.xml
│       │       │   ├── activity_person.xml
│       │       │   ├── activity_preferences.xml
│       │       │   ├── activity_rate_dialog.xml
│       │       │   ├── activity_search.xml
│       │       │   ├── activity_try.xml
│       │       │   ├── activity_upcoming_events_widget_configure__first_frame.xml
│       │       │   ├── activity_upcoming_events_widget_configure__start.xml
│       │       │   ├── card_bankholiday.xml
│       │       │   ├── card_compact_support_heart.xml
│       │       │   ├── card_contact_event_full.xml
│       │       │   ├── card_full_support_heart.xml
│       │       │   ├── card_load_more.xml
│       │       │   ├── card_nameday_single.xml
│       │       │   ├── card_namedays.xml
│       │       │   ├── dialog_birthday_picker.xml
│       │       │   ├── dialog_bottom_dialog.xml
│       │       │   ├── dialog_donate.xml
│       │       │   ├── dialog_pick_image.xml
│       │       │   ├── dialog_progress.xml
│       │       │   ├── dialog_rate_prompt.xml
│       │       │   ├── dialog_support.xml
│       │       │   ├── dialog_translate.xml
│       │       │   ├── fragment_first.xml
│       │       │   ├── fragment_people.xml
│       │       │   ├── fragment_upcoming_events.xml
│       │       │   ├── merge_avatar_picker_view.xml
│       │       │   ├── merge_birthday_picker.xml
│       │       │   ├── merge_birthdaypicker_label_view.xml
│       │       │   ├── merge_color_imageview.xml
│       │       │   ├── merge_compact_cardview.xml
│       │       │   ├── merge_contact_permission_required.xml
│       │       │   ├── merge_contact_suggestion_view.xml
│       │       │   ├── merge_daymarker.xml
│       │       │   ├── merge_donation_banner_view.xml
│       │       │   ├── merge_dummy_view.xml
│       │       │   ├── merge_logo_view.xml
│       │       │   ├── merge_memento_toolbar.xml
│       │       │   ├── merge_namedaycardview.xml
│       │       │   ├── merge_no_contact_events.xml
│       │       │   ├── merge_searchbar.xml
│       │       │   ├── merge_upcoming_widget_configure_panel.xml
│       │       │   ├── merge_upcoming_widget_preview.xml
│       │       │   ├── nameday_date.xml
│       │       │   ├── names_suggestions.xml
│       │       │   ├── navigation_header.xml
│       │       │   ├── navigation_new_feature.xml
│       │       │   ├── page_person_items.xml
│       │       │   ├── preference_list_fragment.xml
│       │       │   ├── preference_theme_select.xml
│       │       │   ├── row_account.xml
│       │       │   ├── row_add_event_contact_event.xml
│       │       │   ├── row_add_event_contact_suggestion.xml
│       │       │   ├── row_contact.xml
│       │       │   ├── row_datatype.xml
│       │       │   ├── row_image_option.xml
│       │       │   ├── row_nameday_checkbox.xml
│       │       │   ├── row_nameday_contact.xml
│       │       │   ├── row_nameday_name.xml
│       │       │   ├── row_no_search_results.xml
│       │       │   ├── row_people.xml
│       │       │   ├── row_people_import_from_facebook.xml
│       │       │   ├── row_people_no_contacts.xml
│       │       │   ├── row_person_action.xml
│       │       │   ├── row_person_event.xml
│       │       │   ├── row_search_result_contact_event.xml
│       │       │   ├── row_suggested_name.xml
│       │       │   ├── row_theme_select.xml
│       │       │   ├── row_upcoming_events_bankholiday.xml
│       │       │   ├── row_upcoming_events_contact_event.xml
│       │       │   ├── row_upcoming_events_date_header.xml
│       │       │   ├── row_upcoming_events_nameday.xml
│       │       │   ├── toolbar_search.xml
│       │       │   ├── widget_loading.xml
│       │       │   ├── widget_prompt_permissions.xml
│       │       │   ├── widget_today.xml
│       │       │   ├── widget_today_nocontacts.xml
│       │       │   ├── widget_upcoming_events.xml
│       │       │   ├── widget_upcoming_events_list_contact_event.xml
│       │       │   ├── widget_upcoming_events_list_date.xml
│       │       │   ├── widget_upcoming_events_list_nameday.xml
│       │       │   └── widget_upcomingevents_list_bankholiday.xml
│       │       ├── layout-land/
│       │       │   └── activity_add_event.xml
│       │       ├── menu/
│       │       │   ├── menu_date_details.xml
│       │       │   ├── menu_nameday_view.xml
│       │       │   ├── menu_nav_drawer.xml
│       │       │   ├── menu_person_details.xml
│       │       │   └── menu_search.xml
│       │       ├── raw/
│       │       │   ├── cs_namedays.json
│       │       │   ├── gr_namedays.json
│       │       │   ├── hu_namedays.json
│       │       │   ├── it_namedays.json
│       │       │   ├── lv_ext_namedays.json
│       │       │   ├── lv_namedays.json
│       │       │   ├── ro_namedays.json
│       │       │   ├── ru_namedays.json
│       │       │   └── sk_namedays.json
│       │       ├── transition/
│       │       │   ├── changebounds.xml
│       │       │   ├── explode.xml
│       │       │   └── fade_and_changebounds.xml
│       │       ├── values/
│       │       │   ├── add_event-resources.xml
│       │       │   ├── admob.xml
│       │       │   ├── animations_dimens.xml
│       │       │   ├── arrays.xml
│       │       │   ├── attrs.xml
│       │       │   ├── available_themes.xml
│       │       │   ├── bankholidays_preferences-resources.xml
│       │       │   ├── bithday_picker-styles.xml
│       │       │   ├── bools.xml
│       │       │   ├── bottom_sheet-resources.xml
│       │       │   ├── card-resources.xml
│       │       │   ├── colors.xml
│       │       │   ├── colors_dayslight.xml
│       │       │   ├── colors_support.xml
│       │       │   ├── contact_cards-resources.xml
│       │       │   ├── contact_permission-resources.xml
│       │       │   ├── date_details-resources.xml
│       │       │   ├── debug_keys.xml
│       │       │   ├── dimens-contact_details.xml
│       │       │   ├── dimens.xml
│       │       │   ├── divider-res.xml
│       │       │   ├── donate-resources.xml
│       │       │   ├── drawable.xml
│       │       │   ├── facebook-resources.xml
│       │       │   ├── ids.xml
│       │       │   ├── integers.xml
│       │       │   ├── main_preferences-resources.xml
│       │       │   ├── namedayscreen-resources.xml
│       │       │   ├── no_contacts.xml
│       │       │   ├── nocontacts_styles.xml
│       │       │   ├── people_resources.xml
│       │       │   ├── person-resources.xml
│       │       │   ├── pref_fragment_dimens.xml
│       │       │   ├── pref_fragment_strings.xml
│       │       │   ├── search-resources.xml
│       │       │   ├── string_keys.xml
│       │       │   ├── styles.xml
│       │       │   ├── support-resources.xml
│       │       │   ├── support-strings.xml
│       │       │   ├── themes-strings.xml
│       │       │   ├── themes.xml
│       │       │   ├── today_widget_strings.xml
│       │       │   ├── toolbar-resources.xml
│       │       │   ├── upcoming-resources.xml
│       │       │   ├── upcoming_widget_dimens.xml
│       │       │   ├── upcoming_widget_preview-resources.xml
│       │       │   └── widget_upcoming_events-resources.xml
│       │       ├── values-el/
│       │       │   ├── bool.xml
│       │       │   └── support-strings.xml
│       │       ├── values-it/
│       │       │   └── bool.xml
│       │       ├── values-land/
│       │       │   ├── bools.xml
│       │       │   ├── dimens.xml
│       │       │   ├── integers.xml
│       │       │   └── toolbar-resources.xml
│       │       ├── values-land-v23/
│       │       │   └── themes.xml
│       │       ├── values-large/
│       │       │   └── bool.xml
│       │       ├── values-sw600dp/
│       │       │   ├── bottom_sheet-resources.xml
│       │       │   ├── dimens.xml
│       │       │   ├── integers.xml
│       │       │   └── toolbar-resources.xml
│       │       ├── values-sw720dp/
│       │       │   └── bottom_sheet-resources.xml
│       │       ├── values-sw720dp-land/
│       │       │   └── dimens.xml
│       │       ├── values-v21/
│       │       │   ├── dimens.xml
│       │       │   ├── drawable.xml
│       │       │   └── styles.xml
│       │       ├── xml/
│       │       │   ├── file_paths.xml
│       │       │   ├── preference_dailyreminder.xml
│       │       │   ├── preference_debug.xml
│       │       │   ├── preference_main.xml
│       │       │   ├── widget_info_upcoming_events_list.xml
│       │       │   └── widget_info_upcoming_events_simple.xml
│       │       └── xml-v26/
│       │           └── preference_dailyreminder.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── alexstyl/
│                       ├── resources/
│                       │   └── JavaStrings.kt
│                       └── specialdates/
│                           └── person/
│                               ├── CompositeContactActionsProviderTest.kt
│                               └── PersonInfoViewModelFactoryTest.kt
├── android_wear/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           └── specialdates/
│           │               ├── ContactEventsActivity.java
│           │               ├── ContactEventsProviderService.java
│           │               ├── DataChangedListenerService.java
│           │               └── WearCommunicationService.java
│           └── res/
│               ├── layout/
│               │   └── activity_contact_events.xml
│               └── values/
│                   ├── contact_events-resource.xml
│                   └── strings.xml
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── memento/
│   ├── .gitignore
│   ├── build.gradle
│   ├── config.yml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── android/
│       │       │   └── LruCache.java
│       │       └── com/
│       │           └── alexstyl/
│       │               ├── Logger.kt
│       │               ├── gsc/
│       │               │   ├── Index.java
│       │               │   ├── Sound.kt
│       │               │   ├── SoundComparer.kt
│       │               │   └── SoundRules.kt
│       │               ├── resources/
│       │               │   └── Colors.kt
│       │               └── specialdates/
│       │                   ├── CrashAndErrorTracker.kt
│       │                   ├── EventsUpdateTrigger.java
│       │                   ├── LabelSetter.java
│       │                   ├── Optional.kt
│       │                   ├── SoundWordComparator.java
│       │                   ├── Strings.kt
│       │                   ├── TimeOfDay.kt
│       │                   ├── UpcomingEventsView.kt
│       │                   ├── WordComparator.java
│       │                   ├── addevent/
│       │                   │   ├── AddEventContactEventViewModel.kt
│       │                   │   ├── AddEventView.kt
│       │                   │   ├── AddEventViewModelFactory.kt
│       │                   │   ├── AddEventsPresenter.kt
│       │                   │   ├── ContactOperations.kt
│       │                   │   ├── ContactOperationsExecutor.kt
│       │                   │   ├── ContactsSearch.kt
│       │                   │   ├── EventIcons.kt
│       │                   │   ├── MessageDisplayer.kt
│       │                   │   └── operations/
│       │                   │       ├── ContactOperation.kt
│       │                   │       ├── InsertContact.kt
│       │                   │       ├── InsertEvent.kt
│       │                   │       ├── InsertImage.kt
│       │                   │       └── UpdateContact.kt
│       │                   ├── analytics/
│       │                   │   ├── Analytics.kt
│       │                   │   ├── Screen.kt
│       │                   │   └── Widget.kt
│       │                   ├── contact/
│       │                   │   ├── Contact.kt
│       │                   │   ├── ContactCache.kt
│       │                   │   ├── ContactNotFoundException.kt
│       │                   │   ├── ContactSource.java
│       │                   │   ├── Contacts.kt
│       │                   │   ├── ContactsProvider.kt
│       │                   │   ├── ContactsProviderSource.kt
│       │                   │   ├── DisplayName.kt
│       │                   │   └── Names.kt
│       │                   ├── dailyreminder/
│       │                   │   ├── BankHolidayNotificationViewModel.kt
│       │                   │   ├── ContactActionViewModel.kt
│       │                   │   ├── ContactEventNotificationViewModel.kt
│       │                   │   ├── DailyReminderNotifier.kt
│       │                   │   ├── DailyReminderPresenter.kt
│       │                   │   ├── DailyReminderScheduler.kt
│       │                   │   ├── DailyReminderUserSettings.kt
│       │                   │   ├── DailyReminderView.kt
│       │                   │   ├── DailyReminderViewModel.kt
│       │                   │   ├── DailyReminderViewModelFactory.kt
│       │                   │   ├── NamedaysNotificationViewModel.kt
│       │                   │   ├── NotificationViewModel.kt
│       │                   │   └── SummaryNotificationViewModel.kt
│       │                   ├── date/
│       │                   │   ├── ContactEvent.kt
│       │                   │   ├── Date.kt
│       │                   │   ├── DateAndTime.kt
│       │                   │   ├── DateComparator.java
│       │                   │   ├── DateLabelCreator.kt
│       │                   │   ├── DateParseException.kt
│       │                   │   ├── DateParser.kt
│       │                   │   ├── Dates.kt
│       │                   │   ├── MonthInt.java
│       │                   │   ├── Months.java
│       │                   │   └── TimePeriod.kt
│       │                   ├── donate/
│       │                   │   ├── DonateMonitor.kt
│       │                   │   ├── Donation.java
│       │                   │   ├── DonationCallbacks.java
│       │                   │   └── DonationService.java
│       │                   ├── events/
│       │                   │   ├── Event.kt
│       │                   │   ├── SettingsPresenter.kt
│       │                   │   ├── bankholidays/
│       │                   │   │   ├── BankHoliday.kt
│       │                   │   │   ├── BankHolidayProvider.kt
│       │                   │   │   ├── BankHolidaysUserSettings.kt
│       │                   │   │   └── GreekBankHolidaysCalculator.java
│       │                   │   ├── database/
│       │                   │   │   └── EventTypeId.java
│       │                   │   ├── namedays/
│       │                   │   │   ├── NameCelebrations.kt
│       │                   │   │   ├── NamedayBundle.java
│       │                   │   │   ├── NamedayDatabaseRefresher.kt
│       │                   │   │   ├── NamedayLocale.java
│       │                   │   │   ├── NamedayUserSettings.java
│       │                   │   │   ├── NamedaysList.java
│       │                   │   │   ├── NamesInADate.kt
│       │                   │   │   ├── activity/
│       │                   │   │   │   ├── CelebratingContactViewModel.kt
│       │                   │   │   │   ├── NamedayScreenViewModel.kt
│       │                   │   │   │   ├── NamedayScreenViewType.java
│       │                   │   │   │   ├── NamedaysInADayPresenter.kt
│       │                   │   │   │   ├── NamedaysOnADayView.kt
│       │                   │   │   │   ├── NamedaysViewModel.kt
│       │                   │   │   │   └── NamedaysViewModelFactory.kt
│       │                   │   │   └── calendar/
│       │                   │   │       ├── EasternNameday.java
│       │                   │   │       ├── EasternNamedaysExtractor.java
│       │                   │   │       ├── NamedayCalendar.java
│       │                   │   │       ├── OrthodoxEasterCalculator.java
│       │                   │   │       └── resource/
│       │                   │   │           ├── CharacterNode.java
│       │                   │   │           ├── GreekNamedays.java
│       │                   │   │           ├── GreekSpecialNamedays.java
│       │                   │   │           ├── NamedayCalendarProvider.java
│       │                   │   │           ├── NamedayJSON.java
│       │                   │   │           ├── NamedayJSONParser.java
│       │                   │   │           ├── NamedayJSONProvider.java
│       │                   │   │           ├── NamedayJSONResourceLoader.kt
│       │                   │   │           ├── Node.java
│       │                   │   │           ├── RomanianEasterSpecialCalculator.kt
│       │                   │   │           ├── RomanianNamedays.kt
│       │                   │   │           ├── RomanianSpecialNamedays.java
│       │                   │   │           ├── SoundNode.kt
│       │                   │   │           ├── SpecialGreekNamedaysCalculator.java
│       │                   │   │           ├── SpecialNamedays.java
│       │                   │   │           └── SpecialNamedaysHandlerFactory.java
│       │                   │   └── peopleevents/
│       │                   │       ├── ClosestEventsComparator.java
│       │                   │       ├── CompositePeopleEventsProvider.kt
│       │                   │       ├── ContactEventsOnADate.kt
│       │                   │       ├── CustomEventType.kt
│       │                   │       ├── EventType.kt
│       │                   │       ├── NoEventsFoundException.kt
│       │                   │       ├── PeopleDynamicNamedaysProvider.kt
│       │                   │       ├── PeopleEventsPersister.kt
│       │                   │       ├── PeopleEventsProvider.kt
│       │                   │       ├── PeopleEventsRepository.kt
│       │                   │       ├── PeopleEventsStaticEventsRefresher.kt
│       │                   │       ├── PeopleEventsUpdater.kt
│       │                   │       ├── ShortDateLabelCreator.java
│       │                   │       ├── StandardEventType.java
│       │                   │       ├── UpcomingEventsSettings.kt
│       │                   │       └── UpcomingEventsViewRefresher.kt
│       │                   ├── facebook/
│       │                   │   ├── FacebookImagePath.kt
│       │                   │   ├── FacebookUserSettings.kt
│       │                   │   ├── UserCredentials.java
│       │                   │   └── friendimport/
│       │                   │       ├── CalendarFetcherException.java
│       │                   │       ├── CalendarLoader.java
│       │                   │       ├── ContactEventSerialiser.java
│       │                   │       ├── FacebookBirthdaysProvider.java
│       │                   │       ├── FacebookCalendarLoader.java
│       │                   │       ├── FacebookContactFactory.java
│       │                   │       └── InvalidFacebookContactException.java
│       │                   ├── people/
│       │                   │   ├── FacebookImportViewModel.kt
│       │                   │   ├── NoContactsViewModel.kt
│       │                   │   ├── PeoplePresenter.kt
│       │                   │   ├── PeopleRowViewModel.kt
│       │                   │   ├── PeopleView.java
│       │                   │   ├── PeopleViewHolderListener.java
│       │                   │   ├── PeopleViewModelFactory.kt
│       │                   │   └── PersonViewModel.kt
│       │                   ├── permissions/
│       │                   │   └── MementoPermissions.kt
│       │                   ├── person/
│       │                   │   ├── AgeCalculator.kt
│       │                   │   ├── ContactActions.kt
│       │                   │   ├── ContactEventViewModel.kt
│       │                   │   ├── EventViewModelFactory.kt
│       │                   │   ├── PersonDetailItem.kt
│       │                   │   └── StarSign.kt
│       │                   ├── search/
│       │                   │   ├── ContactEventLabelCreator.kt
│       │                   │   ├── ContactWithEvents.java
│       │                   │   ├── NameFilter.java
│       │                   │   ├── NameMatcher.kt
│       │                   │   └── PeopleEventsSearch.java
│       │                   ├── ui/
│       │                   │   └── widget/
│       │                   │       └── LetterPainter.kt
│       │                   ├── upcoming/
│       │                   │   ├── AnnualDate.kt
│       │                   │   ├── BankHolidayViewModel.kt
│       │                   │   ├── CompositeUpcomingEventsProvider.kt
│       │                   │   ├── ContactViewModelFactory.kt
│       │                   │   ├── DateHeaderViewModel.kt
│       │                   │   ├── MonthLabels.java
│       │                   │   ├── UpcomingContactEventViewModel.kt
│       │                   │   ├── UpcomingDateStringCreator.kt
│       │                   │   ├── UpcomingEventRowViewModelFactory.kt
│       │                   │   ├── UpcomingEventsAdRules.kt
│       │                   │   ├── UpcomingEventsFreeUserAdRules.kt
│       │                   │   ├── UpcomingEventsPresenter.kt
│       │                   │   ├── UpcomingEventsProvider.kt
│       │                   │   ├── UpcomingListMVPView.kt
│       │                   │   ├── UpcomingNamedaysViewModel.kt
│       │                   │   ├── UpcomingRowViewModel.kt
│       │                   │   ├── UpcomingRowViewModelsBuilder.kt
│       │                   │   ├── UpcomingRowViewType.java
│       │                   │   └── widget/
│       │                   │       ├── list/
│       │                   │       │   └── NoAds.kt
│       │                   │       └── today/
│       │                   │           ├── PercentToValueConverter.java
│       │                   │           ├── RecentPeopleEventsPresenter.kt
│       │                   │           └── RecentPeopleEventsView.kt
│       │                   └── util/
│       │                       └── HashMapList.kt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           ├── TestColors.kt
│           │           ├── gsc/
│           │           │   ├── SoundComparerTest.kt
│           │           │   └── SoundTest.kt
│           │           └── specialdates/
│           │               ├── JavaStrings.kt
│           │               ├── NamesTest.kt
│           │               ├── OptionalTest.java
│           │               ├── TestContactEventsBuilder.kt
│           │               ├── TestDateLabelCreator.kt
│           │               ├── addevent/
│           │               │   ├── AddEventsPresenterTest.kt
│           │               │   ├── JavaEventIcons.kt
│           │               │   ├── JavaMessageDisplayer.kt
│           │               │   └── ui/
│           │               │       ├── ContactSourcesStubs.kt
│           │               │       └── ContactsSearchTest.kt
│           │               ├── contact/
│           │               │   ├── ContactCacheTest.java
│           │               │   ├── ContactFixture.java
│           │               │   ├── ContactTest.java
│           │               │   └── DisplayNameTest.java
│           │               ├── date/
│           │               │   └── ContactEventTest.java
│           │               ├── events/
│           │               │   ├── ContactActionTest.java
│           │               │   ├── DateTest.java
│           │               │   ├── ShortDateLabelCreatorTest.java
│           │               │   ├── StandardEventTypeTest.java
│           │               │   ├── bankholidays/
│           │               │   │   └── BankHolidayProviderTest.java
│           │               │   ├── namedays/
│           │               │   │   ├── NamedaysListTest.java
│           │               │   │   ├── OrthodoxEasterCalculatorTest.java
│           │               │   │   ├── RomanianNamedaysTest.java
│           │               │   │   ├── activity/
│           │               │   │   │   └── NamedaysInADayPresenterTest.kt
│           │               │   │   └── calendar/
│           │               │   │       └── resource/
│           │               │   │           ├── CharacterNodeTest.java
│           │               │   │           ├── GreeklishParserTest.java
│           │               │   │           ├── NamedayJSONParserTest.java
│           │               │   │           ├── RomanianEasterSpecialCalculatorTest.kt
│           │               │   │           ├── SoundNodeTest.kt
│           │               │   │           ├── TestJSONResourceLoader.kt
│           │               │   │           └── TestNamedayCalendarBuilder.java
│           │               │   └── peopleevents/
│           │               │       ├── ClosestEventsComparatorTest.java
│           │               │       ├── CompositePeopleEventsProviderTest.kt
│           │               │       ├── ContactEventsOnADateTest.kt
│           │               │       └── PeopleDynamicNamedaysProviderTest.kt
│           │               ├── facebook/
│           │               │   └── friendimport/
│           │               │       ├── FacebookBirthdaysProviderTest.java
│           │               │       ├── FacebookContactFactoryTest.java
│           │               │       ├── MockCalendarLoader.java
│           │               │       └── SystemLogTracker.kt
│           │               ├── person/
│           │               │   ├── AgeCalculatorTest.kt
│           │               │   └── StarSignTest.kt
│           │               ├── search/
│           │               │   ├── ContactEventTestBuilder.java
│           │               │   ├── EventLabelCreatorTest.java
│           │               │   ├── NameFilterTest.java
│           │               │   ├── NameMatcherTest.java
│           │               │   └── PeopleEventsSearchTest.kt
│           │               ├── timeofday/
│           │               │   └── TimeOfDayTest.java
│           │               ├── upcoming/
│           │               │   ├── MonthLabelsTest.java
│           │               │   ├── TimePeriodTest.java
│           │               │   ├── UpcomingEventsPresenterTest.kt
│           │               │   ├── UpcomingRowViewModelsBuilderTest.kt
│           │               │   └── widget/
│           │               │       └── today/
│           │               │           └── PercentToValueConverterTest.java
│           │               └── util/
│           │                   ├── DateParserTest.kt
│           │                   └── HashMapListTest.java
│           └── resources/
│               └── gr_namedays.json
├── secret.gradle
├── settings.gradle
├── team-props/
│   ├── android-code-quality.gradle
│   ├── static-analysis/
│   │   ├── checkstyle-modules.xml
│   │   ├── checkstyle-suppressions.xml
│   │   ├── detekt-config.yml
│   │   ├── findbugs-excludes.xml
│   │   ├── lint-config.xml
│   │   └── pmd-rules.xml
│   └── static-analysis.gradle
└── versions.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .circleci/ci-scripts/accept-android-licenses.sh
================================================
#!/usr/bin/env bash

export LICENSES_PATH="$ANDROID_HOME/licenses"
export ANDROID_SDK_LICENSE_PATH="$LICENSES_PATH/android-sdk-license"
export ANDROID_SDK_LICENSE_CONTENTS=$'\n8933bad161af4178b1185d1a37fbf41ea5269c55'

if [ ! -e ${ANDROID_SDK_LICENSE_PATH} ]; then
    echo "Android SDK license acceptance not found in '$LICENSES_PATH', creating it..."

    mkdir "$LICENSES_PATH" || true
    echo -e "$ANDROID_SDK_LICENSE_CONTENTS" > "$ANDROID_SDK_LICENSE_PATH"

    echo "Done."
else
    echo "No need to create license acceptance file, already found in: $LICENSES_PATH/"
fi


================================================
FILE: .circleci/ci-scripts/ensure-sdkmanager.sh
================================================
#!/usr/bin/env bash

export TOOLS_BIN_PATH="$ANDROID_HOME/tools/bin"
export SDKMANAGER_PATH="$TOOLS_BIN_PATH/sdkmanager"

if [ ! -e ${SDKMANAGER_PATH} ]; then
    echo "sdkmanager tool not found in '$SDKMANAGER_PATH', updating Android SDK tools..."

    android update sdk --no-ui --all --filter tools

    echo "Android SDK tools updated."
else
    echo "No need to update Android SDK tools, sdkmanager found in: $TOOLS_BIN_PATH/"
fi


================================================
FILE: .circleci/ci-scripts/mock-google-services.json
================================================
{
  "project_info": {
    "project_id": "mockproject-1234",
    "project_number": "123456789000",
    "name": "FirebaseQuickstarts",
    "firebase_url": "https://mockproject-1234.firebaseio.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:123456789000:android:f1bf012572b04063",
        "client_id": "android:com.google.samples.quickstart.admobexample",
        "client_type": 1,
        "android_client_info": {
          "package_name": "com.alexstyl.specialdates",
          "certificate_hash": []
        }
      },
      "oauth_client": [
        {
          "client_id": "123456789000-hjugbg6ud799v4c49dim8ce2usclthar.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "com.alexstyl.specialdates",
            "certificate_hash": "4C20644DE36B8F89D25650C7D1FF9FBAE650FDF7"
          }
        },
        {
          "client_id": "123456789000-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "cloud_messaging_service": {
          "status": 2,
          "apns_config": []
        },
        "appinvite_service": {
          "status": 2,
          "other_platform_oauth_client": [
            {
              "client_id": "123456789000-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        },
        "google_signin_service": {
          "status": 2
        },
        "ads_service": {
          "status": 2,
          "test_banner_ad_unit_id": "ca-app-pub-3940256099942544/6300978111",
          "test_interstitial_ad_unit_id": "ca-app-pub-3940256099942544/1033173712"
        }
      }
    },
    {
      "client_info": {
        "mobilesdk_app_id": "1:123456789000:android:f1bf012572b04063",
        "client_id": "android:com.google.samples.quickstart.admobexample",
        "client_type": 1,
        "android_client_info": {
          "package_name": "com.alexstyl.specialdates.pro",
          "certificate_hash": []
        }
      },
      "oauth_client": [
        {
          "client_id": "123456789000-hjugbg6ud799v4c49dim8ce2usclthar.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "com.alexstyl.specialdates.pro",
            "certificate_hash": "4C20644DE36B8F89D25650C7D1FF9FBAE650FDF7"
          }
        },
        {
          "client_id": "123456789000-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "cloud_messaging_service": {
          "status": 2,
          "apns_config": []
        },
        "appinvite_service": {
          "status": 2,
          "other_platform_oauth_client": [
            {
              "client_id": "123456789000-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        },
        "google_signin_service": {
          "status": 2
        },
        "ads_service": {
          "status": 2,
          "test_banner_ad_unit_id": "ca-app-pub-3940256099942544/6300978111",
          "test_interstitial_ad_unit_id": "ca-app-pub-3940256099942544/1033173712"
        }
      }
    }
  ],
  "client_info": [],
  "ARTIFACT_VERSION": "1"
}

================================================
FILE: .circleci/config.yml
================================================
version: 2

jobs:
  build:
    docker:
      - image: circleci/android:api-27-alpha

    environment:
      ANDROID_HOME: /opt/android/sdk
      APPLICATION_ID: com.alexstyl.specialdates

    steps:
      - checkout

      # Restore cached dependencies (if any)
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "android_mobile/build.gradle" }}

      # Prepare the container for the build
      - run:
          name: Accept Android SDK license
          command: .circleci/ci-scripts/accept-android-licenses.sh
      - run:
          name: Ensure Android SDK install is up-to-date
          command: .circleci/ci-scripts/ensure-sdkmanager.sh

      # Run the main job command, delegating to Gradle
      - run:
          name: Run Gradle :check command
          command: ./gradlew check --stacktrace --continue

      # Store all the downloaded dependencies in the CI cache
      - save_cache:
          paths:
            # Android SDK
            - /usr/local/android-sdk-linux/tools
            - /usr/local/android-sdk-linux/platform-tools
            - /usr/local/android-sdk-linux/build-tools
            - /usr/local/android-sdk-linux/licenses
            - /usr/local/android-sdk-linux/extras/google/m2repository

            # Gradle dependencies
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "android_mobile/build.gradle" }}

      # Collect static analysis reports as build artifacts
      - store_artifacts:
          path: android_mobile/build/reports
          destination: reports

      # Collect JUnit test results
      - store_test_results:
          path: android_mobile/build/test-results


================================================
FILE: .github/CONTRIBUTING.md
================================================
## Ways of contributing

There are a few ways of contributing into the project:

1. Bug fixes
2. Check the [Issues page](https://github.com/alexstyl/MementoNamedays/issues) and resolve any issues you can find
3. Code refactor. The project is fairly old, so there is huge room for improvement :)
4. Introduce any interesting functionality you might need. Please do let me know before doing this first. There might be a chance that a feature you might want to include be really specific to your needs and not fit the overall style of the app. For any questions on features PR, email me at alexstyl.dev@gmail.com
5. Translate the app [by visiting OneSky](https://memento.oneskyapp.com/admin/project/dashboard/project/85177)

## Creating Pull Requests (PR)
The repo contains two main branches:

* `master` which contains all changes currently available to the Play Store.
* `develop` which contains all changes to be uploaded in the next version of Memento.

1. Create a branch from `develop`.
2. Make any modifications required.
3. When done, open a PR of that branch against develop.

Make sure to consider testing the code you push.

Do not create huge PRs. If a PR grows big, make sure to create a new branch with those changes, and create a PR against your initial `feature` branch. The bigger the PR, the less chances of it getting merged on time.

## Reporting Issues
In case you found a bug in the app, or some bits in the code base that can cause issues, you can open an Issue so that someone can fix it. If it is a bug, make sure to write down all the steps it took to replicate it and (if possible) add a GIF showcasing the bug.

You can record your screen with the help of Android Studio ([see this video](https://youtu.be/uOvL4TXzOm4?t=39s)). Keep in mind that video recording does not work on Emulators, so you will need a real device for that. After you are done recording, convert the video into a GIF. I usually use this [website (video to gif)](http://image.online-convert.com/convert-to-gif). Make sure to attach the GIF into your Issue :)


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
#### Short Description

_Give a brief description of what the issue is_

##### Steps to reproduce
 _This is just an example of how to write the steps_
 1. Open app from home screen's icon
 2. Select any day on the list
 3. Tap on a contact's card

##### Resulted in
App crashes

##### Expected Results
Display the contact details of the selected contact

##### Video/Screenshots
(if no visual change, just delete)

{before image}


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
#### Description

_Give a brief explanation of what is the problem/feature you are working on and what this PR contains_

##### Test(s) added

 _yes|no_ and reasoning why

##### Screenshots
(if no visual change, just delete)

| Before | After |
| ------ | ----- |
| {before image} | {after image} |


================================================
FILE: .gitignore
================================================
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
.idea/
*.iml
*.iws

# Keystore files
*.jks

# Mac
.DS_Store

# secrets
google-services.json


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2016 Alex Styl

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: PEOPLE.md
================================================
Memento Calendar could not be in the amazing shape it is today if it wasn't for the following amazing people (alphabetically sorted):

* [auricgoldfinger](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Aauricgoldfinger) for the Big Text notification implementation
* [Andreas Sfakianakis](https://github.com/exaila) for the creation of the greeklish sound converter
* [Chrysa Papadopoulou](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Apchrysa) for the italian namedays
* [Daniele Bonaldo](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Adanybony) for the Android Wear implementation
* [Daniele Conti](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Afourlastor) for performance improvements and kotlin enhancements
* [Thanos Psaridis (Fisherman)](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3AThanosFisherman) for bug fixing
* [Qi Qu](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Aqqipp) for the updated Memento Calendar app icon
* [madlymad](https://github.com/alexstyl/Memento-Calendar/pulls?utf8=%E2%9C%93&q=author%3Amadlymad) for improvements in the CI and madfixes

You can find all contributors at https://github.com/alexstyl/Memento-Calendar/graphs/contributors

Big thanks to all the translators via [OneSky](https://memento.oneskyapp.com/collaboration/project/85177):

* Andrejs Kotovs for the 🇱🇻 Latvian translations
* Aggela Styl for the 🇫🇷 French translations
* Bert for the 🇳🇱 Dutch translations
* Denis Mone for the 🇬🇷 Greek translations (corrections and improvements)
* Giangi for the 🇮🇹 Italian translations
* janfelcman for the 🇨🇿 Czech translations


================================================
FILE: README.md
================================================
# Archived

The repo is now archived and no new commits will take place. Thank for your support and contributions. 


# Memento Calendar for Android  [![alt text](https://travis-ci.org/alexstyl/Memento-Calendar.svg?branch=master "Check the build status on Travis CI")](https://travis-ci.org/alexstyl/Memento-Calendar)

<img src="https://github.com/alexstyl/Memento-Calendar/blob/main/android_common/src/main/res/mipmap-xxxhdpi/ic_launcher.png?raw=true" width="200" align="right" hspace="20">

Memento Calendar is a modern namedays app for Android.
This repository contains the source code of Memento Calendar.

You can get started by having a look at the project's wiki. It contains some information about how to get Memento up and running on your machine and other useful info.

This repo is open for PRs and they are more than welcome! Have a look [at the wiki page to see how to contribute](https://github.com/alexstyl/Memento-Calendar/wiki/How-to-contribute).


[![alt text](http://developer.android.com/images/brand/en_app_rgb_wo_60.png "Download Memento Calendar from the Play Store")](https://play.google.com/store/apps/details?id=com.alexstyl.specialdates)

## Project Goal
Memento Calendar is my pet project/playground in which I experiment with various platform features development patterns and share my foundings with the community my foundings via blog posts and talks. Memento started off as a side project app back in 2014 and has been on development on and off. Current goal of the project is to split out the business logic of the app from the app logic so that it could potentially be ported into other platforms with the help of Kotlin.

## Modules
The app is split into multiple modules. 
The business logic of the app can be found in the **memento** module. There are three other Android Modules: 

### android_common
This is the shared resources across all Android specific modules. It depends on *memento*.

### android_wear
This is the Android Wear module. It depends on *android_common*.

### android_mobile
This is the Android mobile app module. It depends on *android_common*.

## Architecture
The Model-View-Presenter is used in order to architecture the app. 

**Presenters** are platform agnostic and live in the **memento** module, in order to be able to be used across all platforms. They contain the core logic of forwarding *Models* to the *Views*. It is up for the specific platform component to create a View

**Views** are responsible displaying information back to the user. For each view there is one interface that lives in the memento module. A view is not to be confused with Android's View classes, Activities or Fragments. 

**Models** contain the minimum amount of information needed to render the information on the screen.

I did a talk in the GDG Android Athens about the structure of Memento Calendar. The talk is in Greek, but the slides contain more information about the structure [(see the slides)](https://speakerdeck.com/alexstyl/the-journey-towards-a-platform-agnostic-codebase).



## License
```
MIT License

Copyright (c) 2016 Alex Styl

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```


================================================
FILE: android_common/build.gradle
================================================
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply from: '../versions.gradle'

android {

    compileSdkVersion androidCompileSdkVersion
    buildToolsVersion androidBuildToolsVersion

    // All these unused resources are actually used by other modules
    lintOptions {
        abortOnError false
    }

    defaultConfig {
        minSdkVersion 16
        buildConfigField 'String', 'MIXPANEL_TOKEN', '\"' + mixpanelToken + "\""
    }
}


dependencies {
    api project(path: ':memento')
    api 'com.mixpanel.android:mixpanel-android:4.9.2'
    api "com.android.support:support-annotations:$android_support_version"
    api 'net.danlew:android.joda:2.9.9'
    api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    api 'io.reactivex.rxjava2:rxandroid:2.0.1'
}


================================================
FILE: android_common/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.alexstyl.specialdates.common" />


================================================
FILE: android_common/src/main/java/com/alexstyl/android/AndroidLogger.kt
================================================
package com.alexstyl.android

import android.util.Log
import com.alexstyl.Logger

class AndroidLogger : Logger {
    override fun debug(message: String) {
        Log.d(this.javaClass.simpleName, message)
    }

    override fun warning(message: String) {
        Log.w(this.javaClass.simpleName, message)
    }
}


================================================
FILE: android_common/src/main/java/com/alexstyl/android/Version.kt
================================================
package com.alexstyl.android

import android.os.Build


object Version {

    fun hasJellyBean(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
    }

    fun hasKitKat(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
    }

    fun hasLollipop(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
    }

    fun hasMarshmallow(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    }

    fun hasOreo(): Boolean {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
    }
}


================================================
FILE: android_common/src/main/java/com/alexstyl/android/ViewVisibility.java
================================================
package com.alexstyl.android;

import android.support.annotation.IntDef;
import android.view.View;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.SOURCE)
@IntDef({
        View.VISIBLE,
        View.INVISIBLE,
        View.GONE
})
public @interface ViewVisibility {
}


================================================
FILE: android_common/src/main/java/com/alexstyl/android/preferences/widget/TimePreference.java
================================================

package com.alexstyl.android.preferences.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TimePicker;

import com.alexstyl.specialdates.common.R;

public class TimePreference extends DialogPreference {
    private int lastHour = 0;
    private int lastMinute = 0;

    private TimePicker picker;

    public TimePreference(Context ctx, AttributeSet attrs) {
        super(ctx, attrs);
        setDialogTitle(ctx.getString(R.string.set_time));
        setPositiveButtonText(ctx.getString(R.string.set));
        setNegativeButtonText(null);
    }

    @Override
    protected View onCreateDialogView() {
        picker = new TimePicker(getContext());
        picker.setIs24HourView(DateFormat.is24HourFormat(getContext()));
        return picker;
    }

    @Override
    protected void onBindDialogView(View v) {
        super.onBindDialogView(v);

        picker.setCurrentHour(lastHour);
        picker.setCurrentMinute(lastMinute);
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);

        if (positiveResult) {
            lastHour = picker.getCurrentHour();
            lastMinute = picker.getCurrentMinute();

            int[] time = new int[2];
            time[0] = lastHour;
            time[1] = lastMinute;

            if (callChangeListener(time)) {
                persistString(time[0] + ":" + time[1]);
            }
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        return (a.getString(index));
    }

    @Override
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
        String time;

        if (restoreValue) {
            if (defaultValue == null) {
                time = PreferenceManager.getDefaultSharedPreferences(getContext()).getString(
                        getKey(), "00:00");
            } else {
                time = getPersistedString(defaultValue.toString());
            }
        } else {
            time = defaultValue.toString();
        }

        lastHour = getHour(time);
        lastMinute = getMinute(time);
    }

    private static int getHour(String time) {
        String[] pieces = time.split(":");
        return Integer.parseInt(pieces[0]);
    }

    private static int getMinute(String time) {
        String[] pieces = time.split(":");

        return (Integer.parseInt(pieces[1]));
    }
}


================================================
FILE: android_common/src/main/java/com/alexstyl/android/widget/AppWidgetId.java
================================================
package com.alexstyl.android.widget;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * A id of a Widget
 */
@Retention(RetentionPolicy.SOURCE)
public @interface AppWidgetId {
}


================================================
FILE: android_common/src/main/java/com/alexstyl/resources/AndroidDimensionResources.java
================================================
package com.alexstyl.resources;

import android.content.res.Resources;
import android.support.annotation.DimenRes;

final class AndroidDimensionResources implements DimensionResources {

    private final Resources resources;

    AndroidDimensionResources(Resources resources) {
        this.resources = resources;
    }

    @Override
    public int getPixelSize(@DimenRes int id) {
        return resources.getDimensionPixelSize(id);
    }

}


================================================
FILE: android_common/src/main/java/com/alexstyl/resources/DimensionResources.java
================================================
package com.alexstyl.resources;

import android.support.annotation.DimenRes;
import android.support.annotation.Px;

public interface DimensionResources {
    @Px
    int getPixelSize(@DimenRes int id);
}


================================================
FILE: android_common/src/main/java/com/alexstyl/specialdates/AndroidStrings.kt
================================================
package com.alexstyl.specialdates

import android.content.res.Resources
import com.alexstyl.specialdates.common.R
import com.alexstyl.specialdates.events.namedays.NamedayLocale
import com.alexstyl.specialdates.events.peopleevents.EventType
import com.alexstyl.specialdates.events.peopleevents.StandardEventType
import com.alexstyl.specialdates.person.StarSign

class AndroidStrings(private val resources: Resources) : Strings {
    override fun contactAddedFailed(): String = resources.getString(R.string.failed_to_add_contact)

    override fun contactAdded(): String = resources.getString(R.string.contact_added)

    override fun contactUpdated(): String = resources.getString(R.string.contact_updated)

    override fun contactUpdateFailed(): String = resources.getString(R.string.failed_to_update_contact)

    override fun dontForgetToSendWishes(): String = resources.getString(R.string.Dont_forget_to_send_your_wishes)
    override fun call(): String = resources.getString(R.string.Call)
    override fun sendWishes(): String = resources.getString(R.string.Send_wishes)

    override fun bankholidaySubtitle(): String = resources.getString(R.string.Bank_holiday_subtitle)

    override fun contacts(): String = resources.getString(R.string.contacts)

    override fun namedays(): String = resources.getString(R.string.namedays)

    override fun bankholidays(): String = resources.getString(R.string.Bank_holidays)

    override fun dailyReminder(): String = resources.getString(R.string.daily_reminder)

    override fun postOnFacebook(): String = resources.getString(R.string.Post_on_Facebook)

    override fun facebook(): String = resources.getString(R.string.Facebook)

    override fun facebookMessenger(): String = resources.getString(R.string.facebook_messenger)

    override fun viewConversation(): String = resources.getString(R.string.View_conversation)

    override fun nameOf(starSign: StarSign): String = when (starSign) {
        StarSign.AQUARIUS -> resources.getString(R.string.starsigns_aquarius)
        StarSign.PISCES -> resources.getString(R.string.starsigns_pisces)
        StarSign.ARIES -> resources.getString(R.string.starsigns_aries)
        StarSign.TAURUS -> resources.getString(R.string.starsigns_taurus)
        StarSign.GEMINI -> resources.getString(R.string.starsigns_gemini)
        StarSign.CANCER -> resources.getString(R.string.starsigns_cancer)
        StarSign.LEO -> resources.getString(R.string.starsigns_leo)
        StarSign.VIRGO -> resources.getString(R.string.starsigns_virgo)
        StarSign.LIBRA -> resources.getString(R.string.starsigns_libra)
        StarSign.SCORPIO -> resources.getString(R.string.starsigns_scorpio)
        StarSign.SAGITTARIUS -> resources.getString(R.string.starsigns_sagittarius)
        StarSign.CAPRICORN -> resources.getString(R.string.starsigns_capricorn)
    }

    override fun turnsAge(age: Int): String = resources.getString(R.string.turns_age, age);

    override fun inviteFriend(): String = resources.getString(R.string.Invite_friend)

    override fun todaysNamedays(numberOfNamedays: Int): String = resources.getQuantityString(R.plurals.todays_nameday, numberOfNamedays)

    override fun donateAmount(amount: String): String = resources.getString(R.string.donation_donate_amount, amount)

    override fun eventOnDate(eventLabel: String, dateLabel: String): String = resources.getString(R.string.eventlabel_on_dateLabel, eventLabel, dateLabel)

    override fun appName(): String = resources.getString(R.string.app_name)

    override fun shareText(): String = resources.getString(R.string.share_text)

    override fun today(): String = resources.getString(R.string.today)

    override fun tomorrow(): String = resources.getString(R.string.tomorrow)

    override fun todayCelebrateTwo(nameOne: String, nameTwo: String): String = resources.getString(R.string.today_celebrates_two, nameOne, nameTwo)

    override fun todayCelebrateMany(name: String, numberLeft: Int): String = resources.getString(R.string.today_celebrates_many, name, numberLeft)

    override fun nameOfEvent(event: EventType): String = when (event) {
        StandardEventType.BIRTHDAY -> resources.getString(R.string.birthday)
        StandardEventType.NAMEDAY -> resources.getString(R.string.nameday)
        StandardEventType.ANNIVERSARY -> resources.getString(R.string.Anniversary)
        StandardEventType.OTHER -> resources.getString(R.string.Other)
        StandardEventType.CUSTOM -> resources.getString(R.string.Custom)
        else -> {
            throw IllegalStateException("$event has no name")
        }
    }

    override fun localeName(locale: NamedayLocale): String = when (locale) {
        NamedayLocale.GREEK -> resources.getString(R.string.Greek)
        NamedayLocale.ROMANIAN -> resources.getString(R.string.Romanian)
        NamedayLocale.RUSSIAN -> resources.getString(R.string.Russian)
        NamedayLocale.LATVIAN -> resources.getString(R.string.Latvian_Traditional)
        NamedayLocale.LATVIAN_EXTENDED -> resources.getString(R.string.Latvian_Extended)
        NamedayLocale.SLOVAK -> resources.getString(R.string.Slovak)
        NamedayLocale.ITALIAN -> resources.getString(R.string.Italian)
        NamedayLocale.CZECH -> resources.getString(R.string.Czech)
        NamedayLocale.HUNGARIAN -> resources.getString(R.string.Hungarian)
    }

    override fun viewFacebookProfile(): String = resources.getString(R.string.View_Facebook_Profile)

    override fun importFromFacebook(): String = resources.getString(R.string.Import_from_Facebook)
}


================================================
FILE: android_common/src/main/java/com/alexstyl/specialdates/TextViewLabelSetter.java
================================================
package com.alexstyl.specialdates;

import android.widget.TextView;

public class TextViewLabelSetter implements LabelSetter {
    private final TextView textView;

    public TextViewLabelSetter(TextView textView) {
        this.textView = textView;
    }

    @Override
    public void setLabel(String text) {
        textView.setText(text);
    }
}


================================================
FILE: android_common/src/main/java/com/alexstyl/specialdates/date/IntentDateExtensions.kt
================================================
package com.alexstyl.specialdates.date

import android.content.Intent

val EXTRA_DAY_OF_MONTH = "extra:day_of_month"
val EXTRA_MONTH = "extra:month"
val EXTRA_YEAR = "extra:year"

fun Intent.putExtraDate(date: Date): Intent {
    return putExtra(EXTRA_DAY_OF_MONTH, date.dayOfMonth)
            .putExtra(EXTRA_MONTH, date.month)
            .putExtra(EXTRA_YEAR, date.year)
}


fun Intent.getDateExtraOrThrow(): Date {
    val dayOfMonth = getExtraOrThrow(this, EXTRA_DAY_OF_MONTH)
    @MonthInt val month = getExtraOrThrow(this, EXTRA_MONTH)
    val year = getExtraOrThrow(this, EXTRA_YEAR)
    return Date.on(dayOfMonth, month, year)
}

private fun getExtraOrThrow(intent: Intent, extra: String): Int {
    val intExtra = intent.getIntExtra(extra, -1)
    if (intExtra == -1) {
        throw IllegalArgumentException("Passing Intent did not include extra [$extra]")
    }
    return intExtra
}



================================================
FILE: android_common/src/main/java/com/alexstyl/specialdates/events/database/EventColumns.java
================================================
package com.alexstyl.specialdates.events.database;

public interface EventColumns {
    /**
     * A value of {@link EventTypeId} that indicates the type of event
     */
    String EVENT_TYPE = "event_type";

    /**
     * The id of the same event stored in the device's default database
     * <p>Will be set to -1 if not available</p>
     */
    String DEVICE_EVENT_ID = "device_event_id";

    String DATE = "date";
    String SOURCE = "source";

    /**
     * A value to indicate whether the user is interested in seeing this event.
     * <p>1 for visible, 0 for not-visible</p>
     */
    String VISIBLE = "visible";
}


================================================
FILE: android_common/src/main/java/com/alexstyl/specialdates/wear/SharedConstants.java
================================================
package com.alexstyl.specialdates.wear;

public final class SharedConstants {

    public static final String NEXT_CONTACT_EVENTS_PATH = "/next-contact-events";
    public static final String KEY_DATE = "key_date";
    public static final String KEY_CONTACTS_NAMES = "key_contacts_names";

    private SharedConstants() {
        // not instantiable
    }

}


================================================
FILE: android_common/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>

  <color name="main_grey">#eeeeee</color>
  <color name="light_grey">#F6F6F6</color>
  <color name="main_white">@android:color/white</color>
  <color name="pressed_example">#CC33B5E5</color>
  <color name="avatar_number">#414141</color>
  <color name="card_text">#707070</color>
  <color name="teal">#55B2A5</color>

  <color name="main_red">#c61d30</color>
  <color name="main_cream">#ffeebb</color>


  <color name="primary_dark_red">#B71C1C</color>
  <color name="primary_red">#c61d30</color>

  <color name="main_red_semi_transparent">#99c61d30</color>

  <color name="avatar_variant_1">#aeb857</color>
  <color name="avatar_variant_2">#536173</color>
  <color name="avatar_variant_3">#df5948</color>
  <color name="avatar_variant_4">#547bca</color>
  <color name="avatar_variant_5">#e5ae4f</color>
  <color name="font_on_red">#ffffff</color>

  <color name="statusbar_color">#9e1726</color>

  <color name="birthday_red">#ffff4444</color>
  <color name="anniversary_yellow">@color/avatar_variant_1</color>
  <color name="nameday_blue">#ff33b5e5</color>

  <color name="past_date_grey">#595959</color>
  <color name="purple_custom_event">#6a1b9a</color>

  <color name="white_semi_transparents">#99ffffff</color>
  <color name="neutral_ripple">#46000000</color>

  <drawable name="dark_variant">#263238</drawable>
  <color name="bankholiday_green">#ff669900</color>
  <color name="facebook_blue">#3b5998</color>
  <color name="black_light">#151515</color>
</resources>


================================================
FILE: android_common/src/main/res/values/strings-non-translatable.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation">
  <string name="app_name">@string/localised_app_name</string>
  <string name="Memento_Calendar">Memento Calendar</string>
  <string name="email">email</string>
  <string name="email_start">Email</string>
  <string name="link_translate_short">goo.gl/GxZd6M</string>
    <string name="demo_contact_name">Mathilda Dawson</string>

    <plurals name="plural_birthday">
    <item quantity="one">@string/birthday</item>
    <item quantity="other">@string/birthdays</item>
  </plurals>
  <plurals name="plural_nameday">
    <item quantity="one">@string/nameday</item>
    <item quantity="other">@string/namedays</item>
  </plurals>

  <plurals name="todays_nameday">
    <item quantity="one">@string/celebrates_one_namedays</item>
    <item quantity="other">@string/todays_namedays</item>
  </plurals>

</resources>


================================================
FILE: android_common/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
  as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Calendar</string>
    <string name="today">Today</string>
    <string name="tomorrow">Tomorrow</string>
    <string name="birthday">Birthday</string>
    <string name="birthdays">Birthdays</string>
    <string name="namedays">Name Days</string>
    <string name="nameday">Name Day</string>
    <string name="contacts_birthday">"It's %s's birthday!"</string>
    <string name="contacts_nameday">"It's %s's nameday!"</string>
    <string name="namedays_no_names">No name days for this day</string>
    <string name="birthday_no_birthday">No contact has their birthday this day</string>
    <string name="action_settings">Settings</string>
    <string name="disable">Disable</string>
    <string name="enable">Enable</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s and %2$s</string>
    <string name="today_celebrates_many">%1$s and %2$d others</string>
    <string name="about">About</string>
    <string name="service_dailyreminder">Daily Reminder Service</string>
    <string name="display_namedays">Display Name Days</string>
    <string name="display_namedays_on">Name Days will be displayed for all of your contacts</string>
    <string name="display_namedays_off">Name Days will not be displayed</string>
    <string name="contact_dev">Contact the developer</string>
    <string name="contact_dev_summary">Found a bug? Have a suggestion? Let me know!</string>
    <string name="choose">Choose</string>
    <string name="number">number</string>
    <string name="Call">Call</string>
    <string name="action_text">Send SMS</string>
    <string name="action_send_mail">Send e-mail</string>
    <string name="no_app_found">No application found in order to perform this action</string>
    <string name="send_mail_via">Send e-mail via</string>
    <string name="daily_reminder">Daily Reminder</string>
    <string name="daily_reminder_summary">"Remind me for every day's events"</string>
    <string name="Sound">Sound</string>
    <string name="vibrate">Vibrate</string>
    <string name="daily_reminder_time_summary">Every day at %s</string>
    <string name="set_time">Set time</string>
    <string name="set">Set</string>
    <string name="Discard">Discard</string>
    <string name="contact_added">Contact added</string>
    <string name="failed_to_add_contact">Contact could not be added</string>
    <string name="contact_updated">Contact updated</string>
    <string name="failed_to_update_contact">Contact could not be updated</string>
    <string name="label_widget_textonly" translatable="false">@string/upcoming</string>
    <string name="ringtone_silent">Silent</string>
    <string name="contacts_today">Contacts celebrating this day</string>
    <string name="no_contacts_to_wish">There are no contacts celebrating this day</string>
    <string name="upcoming">Upcoming</string>
    <string name="turns_age">Turns %1$d</string>
    <string name="display_namedays_names">Today\'s Namedays</string>
    <string name="share_text">Check out %1$s - a sweet looking birthdays and namedays reminder app for Android! Get it at %2$s</string>
    <string name="share_via">Share via</string>
    <string name="licences">Licences</string>
    <string name="about_dev">Developed and designed by Alex Styl</string>
    <string name="about_special_thanks">"Special thanks to

        Andreas Sfakianakis for his work on the Greeklish library
        Kosta Stoupas for the German translation
        Aggela Stylianidou for the French translation
        Gian Maria Calzolari for the Italian translation
        Andrejs Kotovs for the Latvian translation"</string>
    <string name="about_thanks_special_someone">and *%s* for using and supporting the app! :)</string>
    <string name="about_contact">Something is wrong with the app? Got a suggestion? Send an email at %s</string>
    <string name="you">You</string>
    <string name="switch_on">On</string>
    <string name="switch_off">Off</string>
    <string name="thanks_for_support">Thank you for supporting the app</string>
    <string name="donate">Donate</string>
    <string name="loading">Loading…</string>
    <string name="action_search">Search</string>
    <string name="contacts">Contacts</string>
    <string name="search_namedays_on">Nameday on</string>
    <string name="show_more">Show more</string>
    <string name="create">Create</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(No name)</string>
    <string name="include_year">Include year?</string>
    <string name="Save">Save</string>
    <string name="add">Add</string>
    <string name="contact_no_birthday">No birthday set</string>
    <string name="contact_no_nameday">No nameday for the name %s</string>
    <string name="edit">Edit</string>
    <string name="Add_birthday">Add birthday</string>
    <string name="search">Search</string>
    <string name="and">and</string>
    <string name="Greek">Greek</string>
    <string name="Italian">Italian</string>
    <string name="Czech">Czech</string>
    <string name="Slovak">Slovak</string>
    <string name="Russian">Russian</string>
    <string name="Latvian_Traditional">Latvian (Traditional)</string>
    <string name="Latvian_Extended">Latvian (Extended)</string>
    <string name="Hungarian">Hungarian</string>
    <string name="nameday_language_title">Nameday Calendar</string>
    <string name="no_sound">Silent</string>
    <string name="label_widget_namedays">"Memento - Namedays"</string>
    <string name="share">Share</string>
    <string name="support_app">Support the app</string>
    <string name="fb_go_to_fanpage">Open Facebook Page</string>
    <string name="rate_rate_ask">How would you rate the app?</string>
    <string name="rate_1_stars">"It\'s pretty much horrible"</string>
    <string name="rate_2_stars">"I don't like it"</string>
    <string name="rate_3_stars">"It's okay"</string>
    <string name="rate_4_stars">"It's good"</string>
    <string name="rate_5_stars">"I LOVE it!"</string>
    <string name="rate">Rate</string>
    <string name="message">Message</string>
    <string name="contact_turns_age">%1$s turns %2$d</string>
    <string name="no_results_found">No results found</string>
    <string name="contact_celebration_count">%d contacts celebrate today</string>
    <string name="todays_namedays">Today\'s Namedays</string>
    <string name="celebrates_one_namedays">"Today's nameday"</string>
    <string name="celebrates_many_namedays">"Today's namedays"</string>
    <string name="action_via">%s via…</string>
    <string name="go_to_fb_short">Like Page</string>
    <string name="rate_app">Rate the app</string>
    <string name="like_page">Like Facebook Page</string>
    <string name="days_namedays">Namedays for %1$s</string>
    <string name="get_days">Get %1$s at %2$s</string>
    <string name="hide_names_hints">You can hide names you don\'t want to appear in the app, by long pressing on them.</string>
    <string name="got_it">OK, got it</string>
    <string name="namedays_contacts_only_on">Namedays will be displayed for stored contacts only</string>
    <string name="namedays_contacts_only_off">Namedays will be displays for the namedays of all year</string>
    <string name="namedays_contacts_only">Namedays for Contacts only</string>
    <string name="support_message">I hope you enjoy using the app, and it is useful for you. Here are some ways you can support the app:</string>
    <string name="translate">Translate the app</string>
    <string name="translate_the_app_title">Translating the app</string>
    <string name="translate_the_app_message">Visit the following url from your computer browser</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Copy Link</string>
    <string name="copied_to_clipboard">Link copied to clipboard</string>
    <string name="select_donation_amount">Select the amount you would like to donate</string>
    <string name="View_contact">View contact</string>
    <string name="no_birthday_set">No birthday set</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"No contacts with events found.\nTap the '+' to add some"</string>
    <string name="No_contacts_with_events_found">"No contacts with special events found"</string>
    <string name="add_birthday">Add birthday</string>
    <string name="Birthday_date">Birthday date</string>
    <string name="Contact_name">Contact name</string>
    <string name="Themes">Themes</string>
    <string name="Romanian">Romanian</string>
    <string name="Configure_widget">Configure Widget</string>
    <string name="Done">Done</string>
    <string name="Transparency">Transparency</string>
    <string name="Use_dark_theme">Use dark theme</string>
    <string name="Contact_names">Contact Names</string>
    <string name="Bank_holiday">Bank holiday</string>
    <string name="Bank_holidays">Bank holidays</string>
    <string name="GoogleP_community">Google+ community</string>
    <string name="Display_Bankholidays">Display Bank holidays</string>
    <string name="Bankholidays_Country">Country</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Bankholidays are currently supported only for Greek</string>
    <string name="Clear">Clear</string>
    <string name="Search_for_contacts">Search for contacts</string>
    <string name="Search_for_contacts_or_namedays">Search for contacts or namedays</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">Memento requires your permission to read your contacts in order to display when they celebrate.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">Fact: Some people give free cake to those who wish them Happy Birthday. Use Memento to keep track of potential cake givers.</string>
    <string name="Grant_permission">Grant permission</string>
    <string name="Use_all_parts_of_names">Use all parts of names</string>
    <string name="The_app_will_lookup_namedays_for_all_names_in_a_contact_including_surname">"The app will lookup namedays for all names in a contact (including surname)."</string>
    <string name="The_app_will_lookup_namedays_only_in_contacts_given_names_excluding_surname">"The app will lookup namedays only in contacts\' given names (excluding surname)."</string>
    <string name="eventlabel_on_dateLabel">%1$s on %2$s</string>
    <string name="Anniversary">Anniversary</string>
    <string name="Other">Other</string>
    <string name="Custom">Custom</string>
    <string name="Add_event">Add event</string>
    <string name="Change_photo">Change photo</string>
    <string name="Remove_photo">Remove photo</string>
    <string name="Take_new_photo">Take new photo</string>
    <string name="Pick_existing_photo">Pick existing photo</string>
    <string name="Discard_changes">Discard changes?</string>
    <string name="No_events_on_this_date">No events on this date</string>
    <string name="Invite_friend">Invite friend</string>
    <string name="Facebook_Log_In">Facebook Log In</string>
    <string name="Your_Friends_will_be_here_shortly_smiley">Your Friends will be here shortly :)</string>
    <string name="An_error_came_up">An error came up</string>
    <string name="Try_again_in_a_bit">Try again in a bit</string>
    <string name="Hi_X">Hi, %s!</string>
    <string name="Import_from_Facebook">Import from Facebook</string>
    <string name="View_Facebook_Profile">View Facebook Profile</string>
    <string name="Friends_update_daily">Friends update daily</string>
    <string name="Memento_on_Facebook">Memento on Facebook</string>
    <string name="log_out">Log out</string>
    <string name="Facebook_profile">Facebook Profile</string>
    <string name="has_nameday_on">Nameday on %s</string>
    <string name="has_birthday_on">Birthday on %s</string>
    <string name="has_birthday_on_age">Turns %1$d on %2$s</string>
    <string name="title_add_birthday">Add birthday</string>
    <string name="Post_on_Facebook">Post on Facebook</string>
    <string name="romanian">Romanian</string>
    <string name="Open_Source">Open Source</string>
    <string name="Licenses">Licences</string>
    <string name="Donate_Remove_ads">Donate - Remove ads</string>
    <string name="Memento_on_Github">Memento on Github</string>
    <string name="Import_Birthdays">Import Birthdays</string>
    <string name="New">New</string>
    <string name="starsigns_aquarius">Aquarius</string>
    <string name="starsigns_pisces">Pisces</string>
    <string name="starsigns_aries">Aries</string>
    <string name="starsigns_taurus">Taurus</string>
    <string name="starsigns_gemini">Gemini</string>
    <string name="starsigns_cancer">Cancer</string>
    <string name="starsigns_leo">Leo</string>
    <string name="starsigns_virgo">Virgo</string>
    <string name="starsigns_libra">Libra</string>
    <string name="starsigns_scorpio">Scorpio</string>
    <string name="starsigns_sagittarius">Sagittarius</string>
    <string name="starsigns_capricorn">Capricorn</string>
    <string name="facebook_messenger">Messenger</string>
    <string name="phone_type_home">Home</string>
    <string name="phone_type_mobile">Mobile</string>
    <string name="phone_type_work">Work</string>
    <string name="View_conversation">View conversation</string>
    <string name="donation_donate_amount">Donate %s</string>
    <string name="donate_thanks_for_donating">♥</string>
    <string name="donate_welcome">"Hi, I'm Alex Styl"</string>
    <string name="donate_text">"Memento Calendar was developed in Greece for all those who don't want to forget their loved ones.\n\nIt feels great to see how well received Memento is both by users and devs! All these Play Store reviews and donations give me the strength to keep maintaining Memento with new features and polishing!"\n\nMemento is a free application, supported by ads and donations. Donating any amount, removes all ads and grants you my infinite gratitude ♥.</string>
    <string name="donate_restore_title">Restore donation</string>
    <string name="donate_restore_summary">Placed a donation, but still see ads? Tap here</string>
    <string name="donate_checking_for_donations">Checking for donations</string>
    <string name="donate_no_donation_found">"No donation found. Have you donated?"</string>
    <string name="Select_date">Select date</string>
    <string name="Facebook">Facebook</string>
    <string name="person_show">Show</string>
    <string name="person_hide">Hide</string>
    <string name="Welcome">Welcome</string>
    <string name="donate_hint">"Want to support Memento's development?"</string>
    <string name="Bank_holiday_subtitle">Tap to see more events.</string>
    <string name="Advanced_notification_settings">Advanced notification settings</string>
    <string name="daily_reminder_advanced_settings_summary">Change sounds, vibration, lights and more.</string>
    <string name="Send_wishes">Send wishes</string>
    <string name="Dont_forget_to_send_your_wishes">"Don't forget to send your wishes."</string>
    <string name="dailyreminder_title_bankholiday">"Today's bank holiday"</string>
    <string name="Load_my_wallpaper">Load my wallpaper</string>
    <string name="Close">Close</string>
    <string name="Opacity">Opacity</string>
    <string name="Apply">Apply</string>
</resources>


================================================
FILE: android_common/src/main/res/values-cs/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Calendar</string>
    <string name="today">Dnes</string>
    <string name="tomorrow">Zítra</string>
    <string name="birthday">Datum narození</string>
    <string name="birthdays">Narozeniny</string>
    <string name="namedays">Svátky</string>
    <string name="nameday">Svátek</string>
    <string name="contacts_birthday">"%s má narozeniny"</string>
    <string name="contacts_nameday">"%s má svátek"</string>
    <string name="namedays_no_names">Žádný svátek pro tento den</string>
    <string name="birthday_no_birthday">Žádný kontakt nemá narozeniny</string>
    <string name="action_settings">Nastavení</string>
    <string name="disable">Zakázat</string>
    <string name="enable">Povolit</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s a %2$s</string>
    <string name="today_celebrates_many">%1$s a %2$d ostatní</string>
    <string name="about">O aplikaci</string>
    <string name="service_dailyreminder">Služba denního připomínání</string>
    <string name="display_namedays">Zobrazit svátky</string>
    <string name="display_namedays_on">Budou zobrazeny svátky pro všechny Vaše kontakty</string>
    <string name="display_namedays_off">Svátky nebudou zobrazeny</string>
    <string name="contact_dev">Kontakt na vývojáře</string>
    <string name="contact_dev_summary">Nalezl/a jste chybu? Máte námět? Dejte mi vědět!</string>
    <string name="choose">Vybrat</string>
    <string name="number">číslo</string>
    <string name="Call">Zavolat</string>
    <string name="action_text">Poslat SMS</string>
    <string name="action_send_mail">Poslat e-mail</string>
    <string name="no_app_found">Pro provedení této akce nebyla nalezena zádná aplikace</string>
    <string name="send_mail_via">Poslat emailem</string>
    <string name="daily_reminder">Denní připomínání</string>
    <string name="daily_reminder_summary">"Připomínat každodenní události"</string>
    <string name="Sound">Vyzváněcí tón</string>
    <string name="vibrate">Vibrace</string>
    <string name="daily_reminder_time_summary">Každý den v %s</string>
    <string name="set_time">Čas připomínky</string>
    <string name="set">Nastavit</string>
    <string name="Discard">Zrušit</string>
    <string name="contact_added">Kontakt přidán</string>
    <string name="failed_to_add_contact">Kontakt nemohl být přidán</string>
    <string name="contact_updated">Kontakt aktualizován</string>
    <string name="failed_to_update_contact">Kontakt nemohl být aktualizován</string>
    <string name="ringtone_silent">Tichý</string>
    <string name="contacts_today">Kontakty slavící dnes</string>
    <string name="no_contacts_to_wish">Žádné kontakty slavící tento den</string>
    <string name="upcoming">Nadcházející</string>
    <string name="turns_age">Slaví %1$d</string>
    <string name="display_namedays_names">Dnešní svátky</string>
    <string name="share_text">Ozkoušejte %1$s - pěknou aplikaci pro připomínání narozenin a svátků pro Android! Získejte ji zde %2$s</string>
    <string name="share_via">Sdílet přes</string>
    <string name="licences">Licence</string>
    <string name="about_dev">Vývoj a design Alex Styl</string>
    <string name="about_special_thanks">"O překlad se zasloužili:

Andreas Sfakianakis - řecký překlad
Kosta Stoupas - německý překlad
Aggele Stylianidou - francouzský překlad
Gian Maria Calzolari - italský překlad
Andrejs Kotovs - lotyšský překlad"</string>
    <string name="about_thanks_special_someone">a *%s* za používání a podporu aplikace</string>
    <string name="about_contact">Chyba v aplikaci? Máte nějaký podnět? Pošlete email na %s</string>
    <string name="you">Vy</string>
    <string name="switch_on">Zapnout</string>
    <string name="switch_off">Vypnout</string>
    <string name="thanks_for_support">Děkuji za podporu aplikace</string>
    <string name="donate">Darovat</string>
    <string name="loading">Nahrávání...</string>
    <string name="action_search">Hledat</string>
    <string name="contacts">Kontakty</string>
    <string name="search_namedays_on">Svátek dne</string>
    <string name="show_more">Více</string>
    <string name="create">Vytvořit</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(Beze jména)</string>
    <string name="include_year">Zahrnout rok?</string>
    <string name="Save">Uložit</string>
    <string name="add">Přidat</string>
    <string name="contact_no_birthday">Narozeniny nenastaveny</string>
    <string name="contact_no_nameday">Žádné narozeniny pro %s</string>
    <string name="edit">Upravit</string>
    <string name="search">Hledat</string>
    <string name="and">a</string>
    <string name="Greek">řecký</string>
    <string name="Czech">český</string>
    <string name="Slovak">slovenský</string>
    <string name="Russian">ruský</string>
    <string name="Latvian_Traditional">lotyšský</string>
    <string name="Hungarian">maďarský</string>
    <string name="nameday_language_title">Kalendář svátků</string>
    <string name="no_sound">Tichý</string>
    <string name="label_widget_namedays">"Připomínač svátků"</string>
    <string name="share">Sdílet</string>
    <string name="support_app">Aplikační podpora</string>
    <string name="fb_go_to_fanpage">Otevřít stránku Facebooku</string>
    <string name="rate_rate_ask">Jak aplikaci hodnotíte?</string>
    <string name="rate_1_stars">"Je hrozná"</string>
    <string name="rate_2_stars">"Nemám ji moc rád"</string>
    <string name="rate_3_stars">"Je ok"</string>
    <string name="rate_4_stars">"Je dobrá"</string>
    <string name="rate_5_stars">"MILUJI ji!"</string>
    <string name="rate">Hodnotit</string>
    <string name="message">Zpráva</string>
    <string name="contact_turns_age">%1$s slaví %2$d</string>
    <string name="no_results_found">Žádné výsledky nenalezeny</string>
    <string name="contact_celebration_count">Dnes slaví %d konkakty</string>
    <string name="todays_namedays">Dnešní svátky</string>
    <string name="celebrates_one_namedays">"Dnešní svátek"</string>
    <string name="celebrates_many_namedays">"Dnešní svátky"</string>
    <string name="action_via">%s přes…</string>
    <string name="go_to_fb_short">Jako strana</string>
    <string name="rate_app">Ohodnotit aplikaci</string>
    <string name="like_page">Pochválit stránku Facebooku</string>
    <string name="days_namedays">Narozeniny pro %1$s</string>
    <string name="get_days">Dostat %1$s v %2$s</string>
    <string name="hide_names_hints">Dlouhým stiskem můžete skrýt jména, která nechcete v aplikaci zobrazit</string>
    <string name="got_it">Ok, rozumím</string>
    <string name="namedays_contacts_only_on">Svátky budou zobrazeny pouze pro uložené kontakty</string>
    <string name="namedays_contacts_only_off">Svátky budou zobrazeny pro celý rok</string>
    <string name="namedays_contacts_only">Svátky pouze pro kontakty</string>
    <string name="support_message">Doufám, že se Vám aplikace líbí a je Vám užitečná. Tady jsou nějaké možnosti jak ji můžete podpořit:</string>
    <string name="translate">Přeložit aplikaci</string>
    <string name="translate_the_app_title">Překládání aplikace</string>
    <string name="translate_the_app_message">Navštívit následující odkaz ze svého počítače</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Zkopírovat odkaz</string>
    <string name="copied_to_clipboard">Odkaz zkopírován do schránky</string>
    <string name="select_donation_amount">Vyber částku, kterou chcete darovat</string>
    <string name="View_contact">Zobrazit kontakt</string>
    <string name="no_birthday_set">Žádné narozeniny nastaveny</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"Nenalezeny žádné kontakty se zvláštními událostmi\nPoklepejte na '+' pro přidání"</string>
    <string name="No_contacts_with_events_found">"Nenalezeny žádné kontakty se zvláštními událostmi"</string>
    <string name="add_birthday">Přidat narozeniny</string>
    <string name="Birthday_date">Datum narození</string>
    <string name="Contact_name">Jméno</string>
    <string name="Themes">Motiv</string>
    <string name="Configure_widget">Konfigurace widgetu</string>
    <string name="Done">Hotovo</string>
    <string name="Transparency">Průhlednost</string>
    <string name="Use_dark_theme">Tmavý motiv</string>
    <string name="Contact_names">Kontaktní jména</string>
    <string name="Bank_holiday">Státní svátek</string>
    <string name="Bank_holidays">Státní svátky</string>
    <string name="GoogleP_community">Google+ komunita</string>
    <string name="Display_Bankholidays">Zobrazit státní svátky</string>
    <string name="Bankholidays_Country">Státní svátky pro zemi</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Státní svátky jsou v současnosti podporovány pouze pro Řecko</string>
    <string name="Clear">Vymazat</string>
    <string name="Search_for_contacts">Hledat kontakty</string>
    <string name="Search_for_contacts_or_namedays">Hledat kontakty nebo svátky</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">Memento požaduje Vaše svolení číst Vaše kontakty, aby zobrazilo datum oslavy.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">Fakt: Někteří lidé darují dort těm, kteří jim přejí vše nejlepší. Využijte Memento k dokumentování potencionálních dárců dortu.</string>
    <string name="Grant_permission">Povolit přístup.</string>
    <string name="has_nameday_on">Svátek %s</string>
    <string name="has_birthday_on">Narozeniny %s</string>
    <string name="has_birthday_on_age">%1$s slaví %2$d</string>
    <string name="title_add_birthday">Přidat narozeniny</string>
    <string name="Post_on_Facebook">Otevřít tabuli</string>
    <string name="romanian">Rumunsko</string>
</resources>


================================================
FILE: android_common/src/main/res/values-de/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Geburtstage</string>
    <string name="today">Heute</string>
    <string name="tomorrow">Morgen</string>
    <string name="birthday">Geburtstag</string>
    <string name="birthdays">Geburtstage</string>
    <string name="namedays">Namenstage</string>
    <string name="nameday">Namenstag</string>
    <string name="contacts_birthday">"%s hat Geburtstag!"</string>
    <string name="contacts_nameday">"Es ist %s's Namenstag!"</string>
    <string name="namedays_no_names">Keine Namenstage für heute</string>
    <string name="birthday_no_birthday">Keiner Ihrer Konatkte hat heute Geburtstag</string>
    <string name="action_settings">Einstellungen</string>
    <string name="disable">Deaktivieren</string>
    <string name="enable">Aktivieren</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s und %2$s</string>
    <string name="today_celebrates_many">%1$s und %2$d weitere</string>
    <string name="about">Über</string>
    <string name="service_dailyreminder">Tägliche Erinnerung</string>
    <string name="display_namedays">Namenstage anzeigen</string>
    <string name="display_namedays_on">Namenstage werden für alle Ihre Kontakte angezeigt</string>
    <string name="display_namedays_off">Namenstage werden nicht angezeigt</string>
    <string name="contact_dev">Den Entwickler kontaktieren</string>
    <string name="contact_dev_summary">Haben Sie einen Bug gefunden? Oder Sie haben einen Vorschlag? Lassen Sie es uns wissen!</string>
    <string name="choose">Wähle</string>
    <string name="number">Nummer</string>
    <string name="Call">Anrufen</string>
    <string name="action_text">SMS schreiben</string>
    <string name="action_send_mail">Email schreiben</string>
    <string name="no_app_found">Es wurde keine Anwendung zum Durchführen dieser Aktion gefunden</string>
    <string name="send_mail_via">Email schreiben via</string>
    <string name="daily_reminder">Tägliche Erinnerung</string>
    <string name="daily_reminder_summary">"Tägliche Erinnerung für jedes Ereignis"</string>
    <string name="Sound">Klingelton</string>
    <string name="vibrate">Vibration</string>
    <string name="daily_reminder_time_summary">Jeden Tag um %s</string>
    <string name="set_time">Zeit festlegen</string>
    <string name="set">Fertig</string>
    <string name="ringtone_silent">Lautlos</string>
    <string name="turns_age">Wird %1$d</string>
    <!-- The name for contacts with empty Display name-->
    <string name="message">Nachricht</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="has_nameday_on">Namenstag am %s</string>
    <string name="has_birthday_on">Geburtstag am %s</string>
    <string name="has_birthday_on_age">Wird %1$d am %2$s</string>
</resources>


================================================
FILE: android_common/src/main/res/values-el/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
  as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Γιορτές Memento</string>
    <string name="today">Σήμερα</string>
    <string name="tomorrow">Αύριο</string>
    <string name="birthday">Γενέθλια</string>
    <string name="birthdays">Γενέθλια</string>
    <string name="namedays">Γιορτές</string>
    <string name="nameday">Γιορτή</string>
    <string name="contacts_birthday">"Είναι τα γενέθλια του/της %s!"</string>
    <string name="contacts_nameday">"Γιορτάζει ο/η %s!"</string>
    <string name="namedays_no_names">Καμία ονομαστική εορτή για αυτήν την ημέρα</string>
    <string name="birthday_no_birthday">Καμία επαφή δεν έχει γενέθλια αυτήν την ημέρα</string>
    <string name="action_settings">Ρυθμίσεις</string>
    <string name="disable">Απενεργοποίηση</string>
    <string name="enable">Ενεργό</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s και %2$s</string>
    <string name="today_celebrates_many">%1$s και %2$d άλλοι</string>
    <string name="about">Σχετικά</string>
    <string name="service_dailyreminder">Υπηρεσία Καθημερινής Υπενθύμισης</string>
    <string name="display_namedays">Εμφάνιση Ονομαστικών Εορτών</string>
    <string name="display_namedays_on">Οι Ονομαστικές Εορτές εμφανίζονται για όλες τις επαφές</string>
    <string name="display_namedays_off">Οι Ονομαστικές Εορτές δεν θα εμφανίζονται</string>
    <string name="contact_dev">Επικοινωνία</string>
    <string name="contact_dev_summary">Παρουσιάστηκε κάποιο πρόβλημα; Έχετε κάποια πρόταση για την εφαρμογή; Πατήστε εδώ</string>
    <string name="choose">Επιλογή</string>
    <string name="number">αριθμού</string>
    <string name="Call">Κλήση</string>
    <string name="action_text">Αποστολή SMS</string>
    <string name="action_send_mail">Αποστολή e-mail</string>
    <string name="no_app_found">Δεν βρέθηκε κάποια εγκατεστημένη εφαρμογή για να ολοκληρωθεί αυτή η ενέργεια</string>
    <string name="send_mail_via">Αποστολή e-mail μέσω</string>
    <string name="daily_reminder">Καθημερινή Υπενθύμιση</string>
    <string name="daily_reminder_summary">"Θύμιζέ μου τις γιορτές και τα γενέθλια της κάθε ημέρας"</string>
    <string name="Sound">Ήχος</string>
    <string name="vibrate">Δόνηση</string>
    <string name="daily_reminder_time_summary">Κάθε μέρα στις %s</string>
    <string name="set_time">Ρύθμιση Ώρας</string>
    <string name="set">Τέλος</string>
    <string name="Discard">Ακύρωση</string>
    <string name="contact_added">Η επαφή δημιουργήθηκε</string>
    <string name="failed_to_add_contact">Η επαφή δεν προστέθηκε</string>
    <string name="contact_updated">Η επαφή ανανεώθηκε</string>
    <string name="failed_to_update_contact">Η επαφή δεν ενημερώθηκε</string>
    <string name="ringtone_silent">Αθόρυβο</string>
    <string name="contacts_today">Επαφές που γιορτάζουν αυτή την ημέρα</string>
    <string name="no_contacts_to_wish">Δεν γιορτάζει καμία επαφή αυτή την ημέρα</string>
    <string name="upcoming">Επερχόμενες</string>
    <string name="turns_age">Γίνεται %1$d</string>
    <string name="display_namedays_names">Σημερινές Εορτές</string>
    <string name="share_text">Δείτε το %1$s - μια μοντέρνα εφαρμογή για γενέθλια και ονομαστικές γιορτες επαφών για Android! Κατεβαστε το στο %2$s</string>
    <string name="share_via">Μοιραστείτε μέσω</string>
    <string name="licences">Άδειες</string>
    <string name="about_dev">Υλοποιήθηκε και σχεδιάστηκε από τον Alex Styl</string>
    <string name="about_special_thanks">"Πολλά ευχαριστώ στους\n
        \nAndreas Sfakianakis για την βιβλιοθήκη για τους Greeklish χαρακτήρες
        \nKosta Stoupas για την Γερμανική μετάφραση
        \nAggela Stylianidou για την Γαλλική μετάφραση"</string>
    <string name="about_thanks_special_someone">και *%s* που χρησιμοποιείται και υποστηρίζεται την εφαρμογή! :)</string>
    <string name="about_contact">Κάτι πάει στραβά με την εφαρμογή; Θέλετε κάτι νέο να προστεθεί; Στείλτε e-mail στο %s</string>
    <string name="you">Εσάς</string>
    <string name="switch_on">Ενεργό</string>
    <string name="switch_off">Ανενεργό</string>
    <string name="thanks_for_support">Σας ευχαριστώ για την υποστήριξη</string>
    <string name="donate">Δωρεά</string>
    <string name="loading">Άνοιγμα…</string>
    <string name="action_search">Αναζητήστε</string>
    <string name="contacts">Επαφές</string>
    <string name="search_namedays_on">Γιορτάζει στις</string>
    <string name="show_more">Εμφάνισε περισσότερα</string>
    <string name="create">Δημιούργησε</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(Ακατανόμαστος)</string>
    <string name="include_year">με έτος γέννησης;</string>
    <string name="Save">Αποθήκευση</string>
    <string name="add">Προσθήκη</string>
    <string name="contact_no_birthday">Χωρίς γενέθλια</string>
    <string name="contact_no_nameday">Δεν υπάρχει ονομαστική εορτή για το όνομα %s</string>
    <string name="edit">Επεξεργασία</string>
    <string name="Add_birthday">Προσθήκη γενεθλίων</string>
    <string name="search">Αναζήτηση</string>
    <string name="and">και</string>
    <string name="Greek">Ελληνικά</string>
    <string name="Italian">Ιταλικά</string>
    <string name="Czech">Τσέχικα</string>
    <string name="Slovak">Σλοβάκικα</string>
    <string name="Russian">Ρώσικα</string>
    <string name="Latvian_Traditional">Λατβικά</string>
    <string name="Hungarian">Ουγγρικά</string>
    <string name="nameday_language_title">Γλώσσα Εορτολογίου</string>
    <string name="no_sound">Αθόρυβο</string>
    <string name="label_widget_namedays">"Γιορτές - Ονομαστικές Εορτές"</string>
    <string name="share">Μοιραστείτε</string>
    <string name="support_app">Υποστηρίξτε την εφαρμογή</string>
    <string name="fb_go_to_fanpage">Άνοιγα της Facebook σελίδας</string>
    <string name="rate_rate_ask">Πως θα βαθμολογούσατε την εφαρμογή;</string>
    <string name="rate_1_stars">"Είναι απαίσια"</string>
    <string name="rate_2_stars">"Δεν μου αρέσει"</string>
    <string name="rate_3_stars">"Είναι εντάξει"</string>
    <string name="rate_4_stars">"Πολύ καλή"</string>
    <string name="rate_5_stars">"Την ΛΑΤΡΕΥΩ!"</string>
    <string name="rate">Βαθμολογείστε</string>
    <string name="message">Μήνυμα</string>
    <string name="contact_turns_age">Ο/η %1$s γίνεται %2$d</string>
    <string name="no_results_found">Δεν βρέθηκαν αποτελέσματα</string>
    <string name="contact_celebration_count">%d επαφές γιορτάζουν σήμερα</string>
    <string name="todays_namedays">Σημερινές Εορτές</string>
    <string name="celebrates_one_namedays">"Η γιορτή της ημέρας"</string>
    <string name="celebrates_many_namedays">"Οι γιορτές της ημέρας"</string>
    <string name="action_via">%s μέσω…</string>
    <string name="go_to_fb_short">Κάντε Like στην σελίδα</string>
    <string name="rate_app">Βαθμολογίστε την εφαρμογή</string>
    <string name="like_page">Κάντε Like στην σελίδα</string>
    <string name="days_namedays">Ονομαστικές εορτές για %1$s</string>
    <string name="get_days">Κατεβάστε το %1$s στο %2$s</string>
    <string name="hide_names_hints">Μπορείτε να κρύψετε ονομαστικές εορτές, πατώντας παρατεταμένα πάντως τους.</string>
    <string name="got_it">ΟΚ, το \'πιασα.</string>
    <string name="namedays_contacts_only_on">Οι Ονομαστικές εορτές θα εμφανίζονται μόνο για τις αποθηκευμένες επαφές</string>
    <string name="namedays_contacts_only_off">Οι Ονομαστικές εορτές θα εμφανίζονται για όλες τις ημέρες του χρόνου</string>
    <string name="namedays_contacts_only">Μόνο για επαφές</string>
    <string name="support_message">Ελπίζω να σας αρέσει η εφαρμογή και να σας είναι χρήσιμη. Αν θέλετε να υποστηρίξετε την εφαρμογή, μπορείτε να επιλέξετε κάτι από τα παρακάτω</string>
    <string name="translate">Μεταφράστε την εφαρμογή</string>
    <string name="translate_the_app_title">Μετάφραση την εφαρμογή</string>
    <string name="translate_the_app_message">Επισκεφθείτε το url απο τον browser του υπολογιστή σας</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Αντιγραφή</string>
    <string name="copied_to_clipboard">Το URL αντιγράφθηκε στο πρόχειρο</string>
    <string name="select_donation_amount">Επιλέξτε το ποσό που θα θέλατε να προσφέρετε</string>
    <string name="View_contact">Προβολή επαφής</string>
    <string name="no_birthday_set">Δεν έχει οριστεί ημερομηνία γενεθλίων</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"Δεν βρέθηκαν επαφές με εορτές. Πατήστε το '+' για προσθήκη"</string>
    <string name="No_contacts_with_events_found">"Δεν βρέθηκαν επαφές με εορτές"</string>
    <string name="add_birthday">Προσθήκη γενεθλίων</string>
    <string name="Birthday_date">Ημερομηνία γενεθλίων</string>
    <string name="Contact_name">Όνομα επαφής</string>
    <string name="Themes">Θέματα</string>
    <string name="Romanian">Ρωμανικά</string>
    <string name="Configure_widget">Ρύθμιση Γρ. Στοιχείου</string>
    <string name="Done">Αποθήκευση</string>
    <string name="Transparency">Διαφάνεια</string>
    <string name="Use_dark_theme">Σκοτεινό θέμα;</string>
    <string name="Contact_names">Ονόματα επαφών</string>
    <string name="Bank_holiday">Αργία</string>
    <string name="Bank_holidays">Αργίες</string>
    <string name="GoogleP_community">Κοινότητα Google+</string>
    <string name="Display_Bankholidays">Προβολή αργίων</string>
    <string name="Bankholidays_Country">Χώρα αργίων</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Οι αργίες υποστηρίζονται μόνο για την Ελλάδα αυτή τη στιγμή</string>
    <string name="Clear">Καθάρισμα</string>
    <string name="Search_for_contacts">Αναζήτηση επαφών</string>
    <string name="Search_for_contacts_or_namedays">Αναζήτηση επαφών ή εορτών</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">Το Memento χρειάζεται την άδειά σας για να διαβάσει τις επαφές σας προκειμένου να μπορεί να σας πει πότε γιορτάζουν.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">Μερικοί άνθρωποι δίνουν δωρεάν γλυκό σε όποιον τους πει Χρόνια Πολλά. Χρησιμοποιήστε το Memento για να είσαστε ενήμεροι για το ποιοι γιορτάζουν.</string>
    <string name="Grant_permission">Δώστε άδεια</string>
    <string name="Use_all_parts_of_names">Χρήση όλων των ονομάτων επαφών</string>
    <string name="The_app_will_lookup_namedays_for_all_names_in_a_contact_including_surname">"Η εφαρμογή θα προσπαθήσει να βρει ονομαστικές εορτές από όλα τα ονόματα κάθε επαφής (συμπεριλαμβανομένου του επωνύμου)"</string>
    <string name="The_app_will_lookup_namedays_only_in_contacts_given_names_excluding_surname">"Η εφαρμογή θα προσπαθήσει να βρει ονομαστικές εορτές μόνο από τα μικρά ονόματα κάθε επαφές (χωρίς το επώνυμο)"</string>
    <string name="eventlabel_on_dateLabel">%1$s στις %2$s</string>
    <string name="Anniversary">Επέτειοι</string>
    <string name="Other">Άλλο</string>
    <string name="Add_event">Προσθήκη γεγονότος</string>
    <string name="Change_photo">Αλλαγή φωτογραφίας</string>
    <string name="Remove_photo">Αφαίρεση φωτογραφίας</string>
    <string name="Take_new_photo">Λήψη νέας φωτογραφίας</string>
    <string name="Pick_existing_photo">Επιλογή υπάρχουσας φωτογραφίας</string>
    <string name="Discard_changes">Ακύρωση αλλαγών;</string>
    <string name="No_events_on_this_date">Δεν υπάρχει γεγονότα για αυτή την ημερομηνία</string>
    <string name="Invite_friend">Πρόσκληση φίλου</string>
    <string name="Facebook_Log_In">Σύνδεση στο Facebook</string>
    <string name="Your_Friends_will_be_here_shortly_smiley">Οι Φίλοι σας είναι καθοδόν :)</string>
    <string name="An_error_came_up">Παρουσιάσθηκε κάποιο σφάλμα</string>
    <string name="Try_again_in_a_bit">Δοκιμάστε ξανά σε λιγάκι</string>
    <string name="Hi_X">Γεια σου, %s!</string>
    <string name="Import_from_Facebook">Εισαγωγή από το Facebook</string>
    <string name="Friends_update_daily">Οι φίλοι ανανεώνονται καθημερινά</string>
    <string name="Memento_on_Facebook">Το Memento στο Facebook</string>
    <string name="log_out">Αποσύνδεση</string>
    <string name="Facebook_profile">Facebook προφίλ</string>
    <string name="has_nameday_on">Γιορτάζει την %s</string>
    <string name="has_birthday_on">Γενέθλια την %s</string>
    <string name="has_birthday_on_age">Γίνεται %1$d την %2$s</string>
    <string name="title_add_birthday">Προσθήκη γενεθλίων</string>
    <string name="Post_on_Facebook">Άνοιγμα Τοίχου</string>
    <string name="romanian">Ρωμάνικα</string>
    <string name="Advanced_notification_settings">Περισσότερες ρυθμίσεις</string>
    <string name="daily_reminder_advanced_settings_summary">Αλλάξτε τον ήχο, την δόνηση, το χρώμα του LED και άλλα.</string>
    <string name="Dont_forget_to_send_your_wishes">"Μην ξεχάσετε να τους ευχηθείτε."</string>
</resources>


================================================
FILE: android_common/src/main/res/values-fr/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Fêtes</string>
    <string name="today">Aujourd\'hui</string>
    <string name="tomorrow">Demain</string>
    <string name="birthday">Anniversaire</string>
    <string name="birthdays">Anniversaires</string>
    <string name="namedays">Fêtes</string>
    <string name="nameday">Fête</string>
    <string name="contacts_birthday">"C'est l'anniversaire de %s!"</string>
    <string name="contacts_nameday">"C'est la fête de %s!"</string>
    <string name="namedays_no_names">Pas de fête aujourd\'hui</string>
    <string name="birthday_no_birthday">Pas de contact ayant son anniversaire aujourd\'hui</string>
    <string name="action_settings">Paramètres</string>
    <string name="disable">Désactivation</string>
    <string name="enable">Activation</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s et %2$s</string>
    <string name="today_celebrates_many">%1$s et %2$d encore</string>
    <string name="about">À propos</string>
    <string name="service_dailyreminder">Service de rappel quotidien</string>
    <string name="display_namedays">Apparition des fêtes</string>
    <string name="display_namedays_on">Les fêtes se montreront pour tous les contacts</string>
    <string name="display_namedays_off">Les fêtes ne se montreront pas</string>
    <string name="contact_dev">Communiquez avec le programmateur</string>
    <string name="contact_dev_summary">Est-ce qu\'il y a des problèmes? Est-ce que vous avez des suggestions concernant l\' application? Touchez ici</string>
    <string name="choose">Choisissez</string>
    <string name="number">un numéro de téléphone</string>
    <string name="Call">Appel</string>
    <string name="action_text">Envoi un message</string>
    <string name="action_send_mail">Envoi un courriel</string>
    <string name="no_app_found">Pas d\' application existante afin que cette action se termine</string>
    <string name="send_mail_via">Envoi un courriel via</string>
    <string name="daily_reminder">Rappel quotidien</string>
    <string name="daily_reminder_summary">"Rappelle-moi les fêtes et les anniversaires de chaque jour"</string>
    <string name="Sound">Son</string>
    <string name="vibrate">Vibrer au rappel</string>
    <string name="daily_reminder_time_summary">Chaque jour à %s</string>
    <string name="set_time">Réglage de l\'heure</string>
    <string name="set">Fin</string>
    <string name="ringtone_silent">Silencieux</string>
    <string name="contacts_today">Contacts qui fêtent aujourd\'hui</string>
    <string name="no_contacts_to_wish">Pas de contacts ayant sα fête ou son anniversaire aujourd\'hui</string>
    <string name="turns_age">Aura %1$d</string>
    <string name="share_text">Voyez %1$s - Une application moderne pour les anniversaires et les fêtes des contacts pour Android!Téléchargez-la à %2$s</string>
    <string name="share_via">Partagez via</string>
    <string name="licences">Licences</string>
    <string name="about_dev">Développée et dessinée par Alex Styl</string>
    <string name="about_special_thanks">"Remerciements spéciaux\n
        \nAndreas Sfakianakis pour son travail à la librairie de Greeklish
        \nKosta Stoupas pour la traduction en allemand
        \nAggela Stylianidou pour la traduction en français"</string>
    <string name="about_thanks_special_someone">et *%s* qui utilisez et supportez l\'application! :)</string>
    <string name="about_contact">Est-se qu\' il y a des problèmes concernant l\' application? Est-ce que vous avez des suggestions concernant l\' application? Envoyez un courriel à %s</string>
    <string name="you">Vous</string>
    <string name="thanks_for_support">Merci de supporter l\'application</string>
    <!-- The name for contacts with empty Display name-->
    <string name="search">Rechercher</string>
    <string name="and">et</string>
    <string name="no_sound">Silencieux</string>
    <string name="share">Partager</string>
    <string name="support_app">Supporter l\'application</string>
    <string name="fb_go_to_fanpage">Ouvrir Facebook</string>
    <string name="rate_rate_ask">Comment évalueriez-vous l\'application?</string>
    <string name="rate_1_stars">"C\'est un peu horrible"</string>
    <string name="rate_2_stars">"Je ne l'aime pas"</string>
    <string name="rate_3_stars">"C'est ok"</string>
    <string name="rate_4_stars">"C'est bien"</string>
    <string name="rate_5_stars">"Je l'adore!"</string>
    <string name="rate">Evaluer</string>
    <string name="message">Message</string>
    <string name="no_results_found">Aucun résultat trouvé</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="has_nameday_on">Sa fête est %s</string>
    <string name="has_birthday_on">Son anniversaire est %s</string>
    <string name="has_birthday_on_age">Aura %1$d ans %2$s</string>
    <string name="title_add_birthday">Ajouter anniversaire</string>
</resources>


================================================
FILE: android_common/src/main/res/values-it/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Calendar</string>
    <string name="today">Oggi</string>
    <string name="tomorrow">Domani</string>
    <string name="birthday">Compleanno</string>
    <string name="birthdays">Compleanni</string>
    <string name="namedays">Onomastici</string>
    <string name="nameday">Onomastico</string>
    <string name="contacts_birthday">"E' il compleanno di %s!"</string>
    <string name="contacts_nameday">"E' l'onomastico di %s!"</string>
    <string name="namedays_no_names">Nessun onomastico in questo giorno</string>
    <string name="birthday_no_birthday">Nessun compleanno in questo giorno</string>
    <string name="action_settings">Impostazioni</string>
    <string name="disable">Disattiva</string>
    <string name="enable">Attiva</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s e %2$s</string>
    <string name="today_celebrates_many">%1$s e altri %2$d</string>
    <string name="about">Informazioni</string>
    <string name="service_dailyreminder">Servizio di notifica giornaliera</string>
    <string name="display_namedays">Visualizza onomastici</string>
    <string name="display_namedays_on">Verranno visualizzati gli onomastici per tutti i tuoi contatti</string>
    <string name="display_namedays_off">Gli onomastici non verranno visualizzati</string>
    <string name="contact_dev">Contatta lo sviluppatore</string>
    <string name="contact_dev_summary">Hai trovato un bug? Hai un suggerimento? Fammelo sapere!</string>
    <string name="choose">Scegli</string>
    <string name="number">numero</string>
    <string name="Call">Chiama</string>
    <string name="action_text">Invia SMS</string>
    <string name="action_send_mail">Invia e-mail</string>
    <string name="no_app_found">Nessuna applicazione trovata per questa azione</string>
    <string name="send_mail_via">Invia e-mail con</string>
    <string name="daily_reminder">Notifica giornaliera</string>
    <string name="daily_reminder_summary">"Notificami per ogni evento del giorno"</string>
    <string name="Sound">Suoneria</string>
    <string name="vibrate">Vibrazione</string>
    <string name="daily_reminder_time_summary">Ogni giorno alle %s</string>
    <string name="set_time">Imposta ora</string>
    <string name="set">Imposta</string>
    <string name="Discard">Ignora</string>
    <string name="contact_added">Contatto aggiunto</string>
    <string name="failed_to_add_contact">Il contatto non può essere aggiunto</string>
    <string name="contact_updated">Contatto aggiornato</string>
    <string name="failed_to_update_contact">Il contatto non può essere aggiornato</string>
    <string name="ringtone_silent">Silenzioso</string>
    <string name="contacts_today">Contatti che celebrano oggi</string>
    <string name="no_contacts_to_wish">Nessun contatto celebra oggi</string>
    <string name="upcoming">Prossimamente</string>
    <string name="turns_age">Compie %1$d anni</string>
    <string name="display_namedays_names">Onomastici di oggi</string>
    <string name="share_text">Prova %1$s - una bella app di promemoria per compleanni e onomastici per Android! Installala da %2$s</string>
    <string name="share_via">Condividi con</string>
    <string name="licences">Licenze</string>
    <string name="about_dev">Sviluppato e progettato da Alex Styl</string>
    <string name="about_special_thanks">"Ringraziamenti speciali a

Andreas Sfakianakis per il suo lavoro alla libreria di translitterazione dal Greco ("Greeklish")
Kosta Stoupas per la traduzione in Tedesco
Aggela Stylianidou per la traduzione in Francese
Gian Maria Calzolari per la traduzione in Italiano
Andrejs Kotovs per la traduzione in Lituano"</string>
    <string name="about_thanks_special_someone">e *%s* perché usi e supporti l\'app! :)</string>
    <string name="about_contact">C\'è qualche cosa di errato nella app? Hai un suggerimento? Invia una e-mail a %s</string>
    <string name="you">Tu</string>
    <string name="switch_on">Attivo</string>
    <string name="switch_off">Spento</string>
    <string name="thanks_for_support">Grazie per supportare l\'app</string>
    <string name="donate">Dona</string>
    <string name="loading">Sto caricando...</string>
    <string name="action_search">Cerca</string>
    <string name="contacts">Contatti</string>
    <string name="search_namedays_on">Onomastico il</string>
    <string name="show_more">Mostra altri</string>
    <string name="create">Crea</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(Nessun nome)</string>
    <string name="include_year">Includi l\'anno?</string>
    <string name="Save">Salva</string>
    <string name="add">Aggiungi</string>
    <string name="contact_no_birthday">Compleanno non impostato</string>
    <string name="contact_no_nameday">Nessun onomastico per il nome %s</string>
    <string name="edit">Modifica</string>
    <string name="Add_birthday">Aggiungi compleanno</string>
    <string name="search">Cerca</string>
    <string name="and">e</string>
    <string name="Greek">Greco</string>
    <string name="Italian">Italiano</string>
    <string name="Czech">Ceco</string>
    <string name="Slovak">Slovacco</string>
    <string name="Russian">Russo</string>
    <string name="Latvian_Traditional">Lituano</string>
    <string name="Hungarian">Ungherese</string>
    <string name="nameday_language_title">Calendario onomastico</string>
    <string name="no_sound">Silenzioso</string>
    <string name="label_widget_namedays">"Memento - Onomastici"</string>
    <string name="share">Condividi</string>
    <string name="support_app">Supporta l\'app</string>
    <string name="fb_go_to_fanpage">Vai alla pagina Facebook</string>
    <string name="rate_rate_ask">Quanto valuteresti l\'app?</string>
    <string name="rate_1_stars">"Pessima"</string>
    <string name="rate_2_stars">"Non mi piace"</string>
    <string name="rate_3_stars">"Va bene"</string>
    <string name="rate_4_stars">"Mi è piaciuta"</string>
    <string name="rate_5_stars">"L'adoro!"</string>
    <string name="rate">Valutazione</string>
    <string name="message">Messaggio</string>
    <string name="contact_turns_age">%1$s compie %2$d anni</string>
    <string name="no_results_found">Nessun risultato trovato</string>
    <string name="contact_celebration_count">%d contatti celebrano oggi</string>
    <string name="todays_namedays">Onomastici di oggi</string>
    <string name="celebrates_one_namedays">"Onomastico di oggi"</string>
    <string name="celebrates_many_namedays">"Onomastici di oggi"</string>
    <string name="action_via">%s con…</string>
    <string name="go_to_fb_short">Mi piace</string>
    <string name="rate_app">Valuta l\'app</string>
    <string name="like_page">Mi piace su Facebook</string>
    <string name="days_namedays">Onomastici del %1$s</string>
    <string name="get_days">Installa %1$s da %2$s</string>
    <string name="hide_names_hints">Puoi nascondere I nomi che non vuoi visualizzare nella app premendoli a lungo.</string>
    <string name="got_it">OK, ho capito</string>
    <string name="namedays_contacts_only_on">Verranno visualizzati gli onomastici solo per i contatti memorizzati</string>
    <string name="namedays_contacts_only_off">Verranno visualizzati tutti gli onomastici dell\'anno</string>
    <string name="namedays_contacts_only">Onomastici solo per i contatti</string>
    <string name="support_message">Mi auguro che tu sia soddisfatto della app e che ti sia utile. Ecco alcuni modi per supportarmi:</string>
    <string name="translate">Tradurre l\'applicazione</string>
    <string name="translate_the_app_title">Per tradurre l\'applicazione</string>
    <string name="translate_the_app_message">Visita l\'url seguente dal browser del tuo computer</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Copia il link</string>
    <string name="copied_to_clipboard">Link copiato negli appunti</string>
    <string name="select_donation_amount">Scegli l\'importo che vuoi donare</string>
    <string name="View_contact">Visualizza il contatto</string>
    <string name="no_birthday_set">Compleanno non impostato</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"Non ho trovato contatti con eventi speciali.\nTocca il '+' per aggiungerne"</string>
    <string name="No_contacts_with_events_found">"Non ho trovato contatti con eventi speciali"</string>
    <string name="add_birthday">Aggiungi compleanno</string>
    <string name="Birthday_date">Compleanno</string>
    <string name="Contact_name">Nome contatto</string>
    <string name="Themes">Temi</string>
    <string name="Romanian">Romeno</string>
    <string name="Configure_widget">Configura il widget</string>
    <string name="Done">Fatto</string>
    <string name="Transparency">Trasparenza</string>
    <string name="Use_dark_theme">Tema scuro?</string>
    <string name="Contact_names">Nomi dei contatti</string>
    <string name="Bank_holiday">Festività</string>
    <string name="Bank_holidays">Festività</string>
    <string name="GoogleP_community">Comunità Google+</string>
    <string name="Display_Bankholidays">Visualizza Festività</string>
    <string name="Bankholidays_Country">Nazione</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Al momento sono supportate solo le Festività greche</string>
    <string name="Clear">Pulisci</string>
    <string name="Search_for_contacts">Ricerca dei contatti</string>
    <string name="Search_for_contacts_or_namedays">Ricerca dei contatti o onomastici</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">L\'app necessita il tuo permesso di leggere i contatti per poter visualizzare le date.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">Alcune persone offrono una torta a chi gli augura Buon Compleanno. Usa questa app per tenere traccia dei potenziali donatori di torta.</string>
    <string name="Grant_permission">Concedi il permesso</string>
    <string name="Use_all_parts_of_names">Usa sia il nome che il cognome</string>
    <string name="The_app_will_lookup_namedays_for_all_names_in_a_contact_including_surname">"L'app cercherà gli onomastici per il nome completo dei contatti (cognome incluso)"</string>
    <string name="The_app_will_lookup_namedays_only_in_contacts_given_names_excluding_surname">"L\'app cercherà gli onomastici per il solo nome dei contatti (cognome escluso)"</string>
    <string name="eventlabel_on_dateLabel">%1$s il %2$s</string>
    <string name="Anniversary">Anniversario</string>
    <string name="Other">Altro</string>
    <string name="Custom">Personalizzato</string>
    <string name="Add_event">Aggiungi evento</string>
    <string name="Change_photo">Cambia la foto</string>
    <string name="Remove_photo">Rimuovi la foto</string>
    <string name="Take_new_photo">Scatta una nuova foto</string>
    <string name="Pick_existing_photo">Scegli una foto esistente</string>
    <string name="Discard_changes">Annulli le modifiche?</string>
    <string name="No_events_on_this_date">Nessun evento in questa data</string>
    <string name="Invite_friend">Invita un amico</string>
    <string name="Facebook_Log_In">Accedi a Facebook</string>
    <string name="Your_Friends_will_be_here_shortly_smiley">I tuoi Amici saranno qui a breve :)</string>
    <string name="An_error_came_up">Si è verificato un errore</string>
    <string name="Try_again_in_a_bit">Riprova tra poco</string>
    <string name="Hi_X">Ciao, %s!</string>
    <string name="Import_from_Facebook">Importa da Facebook</string>
    <string name="Friends_update_daily">Aggiornamento Amici giornalmente</string>
    <string name="Memento_on_Facebook">Memento su Facebook</string>
    <string name="log_out">Esci</string>
    <string name="Facebook_profile">Profilo Facebook</string>
    <string name="has_nameday_on">Onomastico il %s</string>
    <string name="has_birthday_on">Compleanno il %s</string>
    <string name="has_birthday_on_age">Compie %1$d anni il %2$s</string>
    <string name="title_add_birthday">Aggiungi compleanno</string>
    <string name="Post_on_Facebook">Apri il diario</string>
    <string name="romanian">Rumeno</string>
</resources>


================================================
FILE: android_common/src/main/res/values-lv/bools.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<bool name="isNamedaySupported">true</bool>
</resources>

================================================
FILE: android_common/src/main/res/values-lv-rLV/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Calendar</string>
    <string name="today">Šodiena</string>
    <string name="tomorrow">Rītdien</string>
    <string name="birthday">Dzimšanas diena</string>
    <string name="birthdays">Dzimšanas dienas</string>
    <string name="namedays">Vārda dienas</string>
    <string name="nameday">Vārda diena</string>
    <string name="contacts_birthday">"%s dzimšanas diena!"</string>
    <string name="contacts_nameday">"%s vārda diena!"</string>
    <string name="namedays_no_names">Šajā dienā nevienam nav vārda dienas</string>
    <string name="birthday_no_birthday">Šajā dienā nevienai kontaktpersonai nav dzimšanas dienas</string>
    <string name="action_settings">Iestatījumi</string>
    <string name="disable">Izslēgt</string>
    <string name="enable">Ieslēgt</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s un %2$s</string>
    <string name="today_celebrates_many">%1$s un %2$d citi</string>
    <string name="about">Par</string>
    <string name="service_dailyreminder">Ikdienas atgādinājumi</string>
    <string name="display_namedays">Rādīt vārda dienas</string>
    <string name="display_namedays_on">Tiks rādītas vārda dienas atbilstoši uzstādījumiem zemāk</string>
    <string name="display_namedays_off">Vārda dienas netiks rādītas</string>
    <string name="contact_dev">Sazināties ar izstrādātāju</string>
    <string name="contact_dev_summary">Atradi kļūdu? Ir ieteikumi? Padod man ziņu!</string>
    <string name="choose">Izvēlēties</string>
    <string name="number">numurs</string>
    <string name="Call">Zvanīt</string>
    <string name="action_text">Sūtīt SMS</string>
    <string name="action_send_mail">Sūtīt e-pastu</string>
    <string name="no_app_found">Nav nevienas piemērotas lietotnes, lai paveiktu darbību</string>
    <string name="send_mail_via">Sūtīt e-pastu ar</string>
    <string name="daily_reminder">Ikdienas atgādinājums</string>
    <string name="daily_reminder_summary">"Atgādināt par katras dienas notikumiem"</string>
    <string name="Sound">Skaņas tonis</string>
    <string name="vibrate">Vibrācija</string>
    <string name="daily_reminder_time_summary">Katru dienu plkst. %s</string>
    <string name="set_time">Uzstādīt laiku</string>
    <string name="set">Uzstādīt</string>
    <string name="Discard">Atmest</string>
    <string name="contact_added">Kontaktpersona pievienota</string>
    <string name="failed_to_add_contact">Kontaktpersona netika pievienota</string>
    <string name="contact_updated">Kontaktpersona atjaunota</string>
    <string name="failed_to_update_contact">Kontaktpersona netika atjaunota</string>
    <string name="ringtone_silent">Klusums</string>
    <string name="contacts_today">Kontaktpersonas, kas svin šajā dienā</string>
    <string name="no_contacts_to_wish">Kontaktos nav neviena, kas svin šajā dienā</string>
    <string name="upcoming">Svētku dienas drīzumā</string>
    <string name="turns_age">Paliek %1$d</string>
    <string name="display_namedays_names">Šodienas vārda dienas</string>
    <string name="share_text">Izmēģini %1$s - glīta dzimšanas dienu un vārda dienu atgādinājumu Android lietotne! Iegūsti to %2$s</string>
    <string name="share_via">Dalies ar</string>
    <string name="licences">Licences</string>
    <string name="about_dev">Alex Styl izstrāde un dizains</string>
    <string name="about_special_thanks">"Īpaša pateicība\n
        \nAndreas Sfakianakis par darbu ar grieķu resursiem
        \nKosta Stoupas par vācu valodas tulkojumu
        \nAggela Stylianidou par franču valodas tulkojumu
        \nGian Maria Calzolari par itāļu valodas tulkojumu
        \nAndrejs Kotovs par latviešu valodas tulkojumu"</string>
    <string name="about_thanks_special_someone">un *%s* par lietošanu un atbalstu! :)</string>
    <string name="about_contact">Kaut kas ir nepareizi lietotnē? Ir ieteikumi? Sūti e-pastu uz %s</string>
    <string name="you">tev</string>
    <string name="switch_on">Iesl.</string>
    <string name="switch_off">Izsl.</string>
    <string name="thanks_for_support">Pateicos par atbalstu lietotnei</string>
    <string name="donate">Ziedot</string>
    <string name="loading">Ielāde...</string>
    <string name="action_search">Meklēt</string>
    <string name="contacts">Kontaktpersonas</string>
    <string name="search_namedays_on">Vārda diena</string>
    <string name="show_more">Rādīt vairāk</string>
    <string name="create">Izveidot</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(Nav vārda)</string>
    <string name="include_year">Iekļaut gadskaitli?</string>
    <string name="Save">Saglabāt</string>
    <string name="add">Pievienot</string>
    <string name="contact_no_birthday">Dzimšanas diena nav norādīta</string>
    <string name="contact_no_nameday">%s vārda diena nav zināma</string>
    <string name="edit">Rediģēt</string>
    <string name="Add_birthday">Pievienot dzimšanas dienu</string>
    <string name="search">Meklēt</string>
    <string name="and">un</string>
    <string name="Greek">Grieķu</string>
    <string name="Italian">Itāļu</string>
    <string name="Czech">Čehu</string>
    <string name="Slovak">Slovāku</string>
    <string name="Russian">Krievu</string>
    <string name="Latvian_Traditional">Latviešu</string>
    <string name="Hungarian">Ungāru</string>
    <string name="nameday_language_title">Vārda dienu kalendārs</string>
    <string name="no_sound">Klusums</string>
    <string name="label_widget_namedays">"Memento - Vārda dienas"</string>
    <string name="share">Dalīties</string>
    <string name="support_app">Atbalsti lietotni</string>
    <string name="fb_go_to_fanpage">Atvērt Facebook</string>
    <string name="rate_rate_ask">Vēlies novērtēt lietotni?</string>
    <string name="rate_1_stars">"Diezgan briesmīgi"</string>
    <string name="rate_2_stars">"Man nepatīk"</string>
    <string name="rate_3_stars">"Ir OK"</string>
    <string name="rate_4_stars">"Labi"</string>
    <string name="rate_5_stars">"Man ļoti patīk!"</string>
    <string name="rate">Novērtēt</string>
    <string name="message">Īsziņa</string>
    <string name="contact_turns_age">%1$s paliek %2$d</string>
    <string name="no_results_found">Nekas nav atrasts</string>
    <string name="contact_celebration_count">%d kontaktpersonas šodien svin</string>
    <string name="todays_namedays">Šodienas vārda dienas</string>
    <string name="celebrates_one_namedays">"Šodienas vārda diena"</string>
    <string name="celebrates_many_namedays">"Šodienas vārda dienas"</string>
    <string name="action_via">%s ar…</string>
    <string name="go_to_fb_short">Like Page</string>
    <string name="rate_app">Novērtē lietotni</string>
    <string name="like_page">Like Facebook Page</string>
    <string name="days_namedays">Vārda dienas %1$s</string>
    <string name="get_days">Iegūsti %1$s no %2$s</string>
    <string name="hide_names_hints">Ilgāk paturot, vari paslēpt vārdus, kurus nevēlies redzēt lietotnē</string>
    <string name="got_it">Labi, sapratu</string>
    <string name="namedays_contacts_only_on">Tiks rādītas tikai kontaktpersonu vārda dienas</string>
    <string name="namedays_contacts_only_off">Tiks rādītas vārda dienas visām gada dienām</string>
    <string name="namedays_contacts_only">Vārda dienas tikai kontaktpersonām</string>
    <string name="support_message">Es ceru, ka tev patīk šī lietotne. Tu vari atbalstīt lietotnes izstrādi šādos veidos:</string>
    <string name="translate">Tulkot lietotni</string>
    <string name="translate_the_app_title">Lietotnes tulkošana</string>
    <string name="translate_the_app_message">Atvērt šo saiti no datora pārlūkprogrammas</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Kopēt saiti</string>
    <string name="copied_to_clipboard">Saite ir nokopēta</string>
    <string name="select_donation_amount">Izvēlies ziedojuma summu</string>
    <string name="View_contact">Apskatīt kontaktpersonu</string>
    <string name="no_birthday_set">Dzimšanas datums nav uzstādīts</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"Kontaktpersonas ar svētku dienām nav atrastas.\n\nSpied '+', lai pievienotu"</string>
    <string name="No_contacts_with_events_found">"Kontaktpersonas ar svētku dienām nav atrastas"</string>
    <string name="add_birthday">Pievienot dzimšanas dienu</string>
    <string name="Birthday_date">Dzimšanas datums</string>
    <string name="Contact_name">Kontaktpersonas vārds</string>
    <string name="Themes">Tēmas</string>
    <string name="Romanian">Rumāņu</string>
    <string name="Configure_widget">Konfigurēt logrīku</string>
    <string name="Done">Darīts</string>
    <string name="Transparency">Caurspīdīgums</string>
    <string name="Use_dark_theme">Tumšā tēma?</string>
    <string name="Contact_names">Kontaktpersonu vārdi</string>
    <string name="Bank_holiday">Valsts svētku diena</string>
    <string name="Bank_holidays">Valsts svētku dienas</string>
    <string name="GoogleP_community">Google+ kopiena</string>
    <string name="Display_Bankholidays">Rādīt valsts svētku dienas</string>
    <string name="Bankholidays_Country">Valsts</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Pašlaik tiek atbalstītas tikai Grieķijas valsts svētku dienas</string>
    <string name="Clear">Dzēst</string>
    <string name="Search_for_contacts">Meklēt kontaktpersonas</string>
    <string name="Search_for_contacts_or_namedays">Meklēt kontaktpersonas vai vārda dienas</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">Memento lietotnei nepieciešama piekļuve taviem kontaktiem, lai parādītu kontaktpersonu svētku dienas.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">Fakts: Daudzi cilvēki mēdz cienāt ar kūkām sveicējus dzimšanas dienā. Izmanto Memento, lai laicīgi uzzinātu par potenciālajiem cienastiem.</string>
    <string name="Grant_permission">Atļaut piekļuvi</string>
    <string name="Use_all_parts_of_names">Izmantot visas vārdu daļas</string>
    <string name="The_app_will_lookup_namedays_for_all_names_in_a_contact_including_surname">"Vārda dienu piemeklēšanai lietotne izmantos visas kontaktpersonu vārda daļas, t.sk. uzvārdus"</string>
    <string name="The_app_will_lookup_namedays_only_in_contacts_given_names_excluding_surname">"Lietotne neiekļaus kontaktpersonu uzvārdus meklējot vārda dienas"</string>
    <string name="eventlabel_on_dateLabel">%1$s - %2$s</string>
    <string name="Anniversary">Jubileja</string>
    <string name="Other">Citi</string>
    <string name="Custom">Pielāgoti</string>
    <string name="Add_event">Pievienot notikumu</string>
    <string name="Change_photo">Mainīt fotoattēlu</string>
    <string name="Remove_photo">Noņemt fotoattēlu</string>
    <string name="Take_new_photo">Uzņemt jaunu fotoattēlu</string>
    <string name="Pick_existing_photo">Atlasīt jaunu fotoattēlu</string>
    <string name="Discard_changes">Atcelt izmaiņas?</string>
    <string name="No_events_on_this_date">Nav pasākumu šajā datumā</string>
    <string name="Invite_friend">Aicināt draugus</string>
    <string name="Facebook_Log_In">Ieiet Facebook</string>
    <string name="Your_Friends_will_be_here_shortly_smiley">Tavi draugi drīz būs te :)</string>
    <string name="An_error_came_up">Radusies kļūda!</string>
    <string name="Try_again_in_a_bit">Pēc brīža mēģini atkārtoti!</string>
    <string name="Hi_X">Sveiki, %s!</string>
    <string name="Import_from_Facebook">Importēt no Facebook</string>
    <string name="Friends_update_daily">Draugu atjaunājumi ik dienu</string>
    <string name="Memento_on_Facebook">Memento lietotne Facebook</string>
    <string name="log_out">Iziet</string>
    <string name="Facebook_profile">Facebook profils</string>
    <string name="has_nameday_on">Vārda diena %s</string>
    <string name="has_birthday_on">Dzimšanas diena %s</string>
    <string name="has_birthday_on_age">Paliek %1$d vecs %2$s</string>
    <string name="title_add_birthday">Pievienot dzimšanas dienu</string>
    <string name="Post_on_Facebook">Apskatīt sienu</string>
    <string name="romanian">Rumāņu</string>
</resources>


================================================
FILE: android_common/src/main/res/values-nl/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- The original name of the app is Memento Calendar. In Greek though the name is Εορτολόγιο Memento (Nameday Almanac Memento)
as the name makes more sense. If there is a local specific name, make sure to write it here. If not, leave it as is-->
    <string name="localised_app_name">Memento Calendar</string>
    <string name="today">Vandaag</string>
    <string name="tomorrow">Morgen</string>
    <string name="birthday">Verjaardag</string>
    <string name="birthdays">Verjaardagen</string>
    <string name="namedays">Naamdagen</string>
    <string name="nameday">Naamdag</string>
    <string name="contacts_birthday">"Het is de verjaardag van %s!"</string>
    <string name="contacts_nameday">"Het is de naamdag van %s!"</string>
    <string name="namedays_no_names">Geen naamdagen op deze dag</string>
    <string name="birthday_no_birthday">Niemand van je contacten heeft vandaag zijn verjaardag.</string>
    <string name="action_settings">Instellingen</string>
    <string name="disable">Uitschakelen</string>
    <string name="enable">Inschakelen</string>
    <string name="today_celebrates_one">%1$s</string>
    <string name="today_celebrates_two">%1$s en %2$s</string>
    <string name="today_celebrates_many">%1$s en %2$d anderen</string>
    <string name="about">Over</string>
    <string name="service_dailyreminder">Service voor dagelijkse herinneringen</string>
    <string name="display_namedays">Toon naamdagen</string>
    <string name="display_namedays_on">Naamdagen zullen worden getoond voor al je contactpersonen</string>
    <string name="display_namedays_off">Naamdagen zullen niet getoond worden</string>
    <string name="contact_dev">Contacteer de ontwikkelaar</string>
    <string name="contact_dev_summary">Een bug gevonden? Een suggestie? Laat het me weten!</string>
    <string name="choose">Kies</string>
    <string name="number">nummer</string>
    <string name="Call">Bel</string>
    <string name="action_text">Stuur SMS</string>
    <string name="action_send_mail">Stuur e-mail</string>
    <string name="no_app_found">Geen app gevonden om deze actie uit te voeren</string>
    <string name="send_mail_via">Stuur e-mail via</string>
    <string name="daily_reminder">Dagelijkse herinnering</string>
    <string name="daily_reminder_summary">"Toon me dagelijks een herinnering voor de verjaardagen of naamdagen van de dag"</string>
    <string name="Sound">Beltoon</string>
    <string name="vibrate">Trillen</string>
    <string name="daily_reminder_time_summary">Every day om %s</string>
    <string name="set_time">Tijd van herinnering</string>
    <string name="set">opslaan</string>
    <string name="Discard">Annuleer</string>
    <string name="contact_added">Contact toegevoegd</string>
    <string name="failed_to_add_contact">Contact kon niet toegevoegd worden</string>
    <string name="contact_updated">Contact bijgewerkt</string>
    <string name="failed_to_update_contact">Contact kon niet bijgewerkt worden</string>
    <string name="ringtone_silent">Stil</string>
    <string name="contacts_today">Contactpersonen die deze dag vieren</string>
    <string name="no_contacts_to_wish">Er zijn geen contactpersonen die deze dag vieren</string>
    <string name="upcoming">Eerstvolgende</string>
    <string name="turns_age">Wordt %1$d</string>
    <string name="display_namedays_names">Naamdagen van vandaag</string>
    <string name="share_text">Je moet %1$s eens bekijken - een knappe app voor Android die herinneringen toont voor verjaardagen en naamdagen! Download van %2$s</string>
    <string name="share_via">Delen via</string>
    <string name="licences">Licenties</string>
    <string name="about_dev">Ontwikkeld en ontworpen door Alex Styl</string>
    <string name="about_special_thanks">"Speciaal bedankt aan

Andreas Sfakianakis voor zijn werk aan de Greeklish bibliotheek
Kosta Stoupas voor de Duitse vertaling
Aggela Stylianidou voor de Franse vertaling
Gian Maria Calzolari voor de Italiaanse vertaling
Andrejs Kotovs voor de Letse vertaling
Bert Van Dooren voor de Nederlandse vertaling"</string>
    <string name="about_thanks_special_someone">en *%s* om deze app te gebruiken en te ondersteunen! :)</string>
    <string name="about_contact">Is er iets mis met de app? Heb je een suggestie? Stuur een e-mail naar %s</string>
    <string name="you">JIJ</string>
    <string name="switch_on">Aan</string>
    <string name="switch_off">Uit</string>
    <string name="thanks_for_support">Bedankt om deze app te ondersteunen</string>
    <string name="donate">Doneer</string>
    <string name="loading">Bezig met laden...</string>
    <string name="action_search">Zoeken</string>
    <string name="contacts">Contactpersonen</string>
    <string name="search_namedays_on">Naamdag op</string>
    <string name="show_more">Toon meer</string>
    <string name="create">Aanmaken</string>
    <!-- The name for contacts with empty Display name-->
    <string name="no_name">(Geen naam)</string>
    <string name="include_year">Jaar toevoegen?</string>
    <string name="Save">Opslaan</string>
    <string name="add">Toevoegen</string>
    <string name="contact_no_birthday">Geen verjaardag gezet</string>
    <string name="contact_no_nameday">Geen naamdag voor de naam %s</string>
    <string name="edit">Bewerken</string>
    <string name="Add_birthday">Verjaardag toevoegen</string>
    <string name="search">Zoeken</string>
    <string name="and">en</string>
    <string name="Greek">Grieks</string>
    <string name="Italian">Italiaans</string>
    <string name="Czech">Tsjechisch</string>
    <string name="Slovak">Slovaaks</string>
    <string name="Russian">Russisch</string>
    <string name="Latvian_Traditional">Lets</string>
    <string name="Hungarian">Hongaars</string>
    <string name="nameday_language_title">Naamdag kalender</string>
    <string name="no_sound">Stil</string>
    <string name="label_widget_namedays">"Memento - Naamdagen"</string>
    <string name="share">Delen</string>
    <string name="support_app">Ondersteun de app</string>
    <string name="fb_go_to_fanpage">Open de Facebook Pagina</string>
    <string name="rate_rate_ask">Welke waardering zou je de app geven?</string>
    <string name="rate_1_stars">"Het is echt afgrijselijk"</string>
    <string name="rate_2_stars">"Ik hou er niet van"</string>
    <string name="rate_3_stars">"'t Is wel ok"</string>
    <string name="rate_4_stars">"Het is goed"</string>
    <string name="rate_5_stars">"Ik kan niet meer zonder!"</string>
    <string name="rate">Waardering geven</string>
    <string name="message">Bericht</string>
    <string name="contact_turns_age">%1$s wordt %2$d</string>
    <string name="no_results_found">Geen resultaten gevonden</string>
    <string name="contact_celebration_count">%d contactpersonen vieren vandaag</string>
    <string name="todays_namedays">Naamdagen van vandaag</string>
    <string name="celebrates_one_namedays">"Naamdag van vandaag"</string>
    <string name="celebrates_many_namedays">"Naamdagen van vandaag"</string>
    <string name="action_via">%s via...</string>
    <string name="go_to_fb_short">Like de pagina</string>
    <string name="rate_app">Geef de app een waardering</string>
    <string name="like_page">Like de Facebook pagina</string>
    <string name="days_namedays">Naamdagen voor %1$s</string>
    <string name="get_days">Download %1$s op %2$s</string>
    <string name="hide_names_hints">Je kan de namen verbergen die je niet wil zien in de app door er lang op te duwen.</string>
    <string name="got_it">Ok, verstaan.</string>
    <string name="namedays_contacts_only_on">Enkel de naamdagen van je contactpersonen zullen worden getoond</string>
    <string name="namedays_contacts_only_off">Alle naamdagen van het jaar zullen getoond worden</string>
    <string name="namedays_contacts_only">Enkel naamdagen voor contactpersonen</string>
    <string name="support_message">Ik hoop dat je de app leuk en bruikbaar vindt. Hier zijn enkele manieren om de app de ondersteunen:</string>
    <string name="translate">Vertaal de app</string>
    <string name="translate_the_app_title">De app vertalen</string>
    <string name="translate_the_app_message">Open de volgende link op je computer</string>
    <!-- Neutral button on a dialog, saying that pressing the button will copy to clipboard the url to translate the app -->
    <string name="copy_link">Kopiëer de link</string>
    <string name="copied_to_clipboard">Link gekopiëerd naar het klembord</string>
    <string name="select_donation_amount">Selecteer hoeveel je wil doneren</string>
    <string name="View_contact">Toon contactpersoon</string>
    <string name="no_birthday_set">Geen verjaardag gevonden</string>
    <string name="No_contacts_with_events_found_Tap_the_plus_to_add_some">"Geen contactpersonen met speciale gebeurtenissen gevonden. \nDuw op de '+' om er toe te voegen"</string>
    <string name="No_contacts_with_events_found">"Geen contacten met speciale gebeurtenissen gevonden"</string>
    <string name="add_birthday">Verjaardag toevoegen</string>
    <string name="Birthday_date">Geboortedatum</string>
    <string name="Contact_name">Naam contactpersoon</string>
    <string name="Themes">Thema\'s</string>
    <string name="Romanian">Roemeens</string>
    <string name="Configure_widget">Stel widget in</string>
    <string name="Done">Klaar</string>
    <string name="Transparency">Transparantie</string>
    <string name="Use_dark_theme">Donker thema?</string>
    <string name="Contact_names">Namen contactpersonen</string>
    <string name="Bank_holiday">Verlofdag</string>
    <string name="Bank_holidays">Verlofdagen</string>
    <string name="GoogleP_community">Google+ gemeenschap</string>
    <string name="Display_Bankholidays">Toon verlofdagen</string>
    <string name="Bankholidays_Country">Land</string>
    <string name="Bankholidays_are_currently_supported_only_for_Greek">Momenteel zijn enkel Griekse verlofdagen ondersteund</string>
    <string name="Clear">Leegmaken</string>
    <string name="Search_for_contacts">Contacten zoeken</string>
    <string name="Search_for_contacts_or_namedays">Contacten of naamdagen zoeken</string>
    <string name="Memento_requires_your_permission_to_read_your_contacts_in_order_to_display_when_they_celebrate">Memento heeft je goedkeuring nodig om je contacten in te lezen en zo te kunnen tonen wanneer ze gevierd worden.</string>
    <string name="Fact_Some_people_give_free_cake_to_those_who_wish_them_Happy_Birthday._Use_Memento_to_keep_track_of_potential_cake_givers">"Feit: sommige mensen geven een gratis taart aan zij die hen Gelukkige Verjaardag wensen. Gebruik Memento om zulke potentiële taartgevers in het oog te houden. "</string>
    <string name="Grant_permission">Toestemming verlenen</string>
    <string name="Use_all_parts_of_names">Gebruik alle delen van namen</string>
    <string name="The_app_will_lookup_namedays_for_all_names_in_a_contact_including_surname">"De app zal de naamdagen opzoeken voor alle namen in een contact (inclusief achternaam)"</string>
    <string name="The_app_will_lookup_namedays_only_in_contacts_given_names_excluding_surname">"De app zal naamdagen enkel op basis van de voornaam van de contacten opzoeken (exclusief achternaam)"</string>
    <string name="eventlabel_on_dateLabel">%1$s op %2$s</string>
    <string name="Anniversary">Jubileum</string>
    <string name="Other">Andere</string>
    <string name="Custom">Aangepast</string>
    <string name="Add_event">Gebeurtenis toevoegen</string>
    <string name="Change_photo">Foto wijzigen</string>
    <string name="Remove_photo">Foto verwijderen</string>
    <string name="Take_new_photo">Nieuwe foto nemen</string>
    <string name="Pick_existing_photo">Kies bestaande foto</string>
    <string name="Discard_changes">Wijzigingen verwerpen?</string>
    <string name="No_events_on_this_date">Geen gebeurtenissen op deze datum</string>
    <string name="Invite_friend">Vriend uitnodigen</string>
    <string name="Facebook_Log_In">Aanmelden met Facebook</string>
    <string name="Your_Friends_will_be_here_shortly_smiley">Je vrienden zullen hier weldra zijn :-)</string>
    <string name="An_error_came_up">Er is iets fout gegaan</string>
    <string name="Try_again_in_a_bit">Wacht even en probeer nog eens</string>
    <string name="Hi_X">Hey, %s!</string>
    <string name="Import_from_Facebook">Importeren van Facebook</string>
    <string name="Friends_update_daily">Vrienden worden dagelijks geüpdatet</string>
    <string name="Memento_on_Facebook">Memento op Facebook</string>
    <string name="log_out">Afmelden</string>
    <string name="Facebook_profile">Facebook profiel</string>
    <string name="has_nameday_on">Naamdag op %s</string>
    <string name="has_birthday_on">Verjaardag op %s</string>
    <string name="has_birthday_on_age">Wordt %1$d op %2$s</string>
    <string name="title_add_birthday">Verjaardag toevoegen</string>
    <string name="Post_on_Facebook">Open Prikbord</string>
    <string name="romanian">Roemeens</string>
</resources>


================================================
FILE: android_common/src/main/res/values-sk/bool.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isNamedaySupported">true</bool>
</resources>

================================================
FILE: android_mobile/.gitignore
================================================
/build


================================================
FILE: android_mobile/build.gradle
================================================
plugins {
    id "io.gitlab.arturbosch.detekt" version "1.0.0.M13.2"
}

apply from: '../versions.gradle'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'io.fabric'

detekt {
    version = "1.0.0.M13.2"

    profile("main") {
        input = "$projectDir/src/main/java"
        config = "$rootDir/team-props/static-analysis/detekt-config.yml"
        filters = ".*test.*,.*/resources/.*,.*/tmp/.*"
        output = "$projectDir/build/reports/detekt.xml"
    }
}


project.afterEvaluate {
    check.dependsOn tasks['detektCheck']
}

android {

    compileSdkVersion androidCompileSdkVersion
    buildToolsVersion androidBuildToolsVersion

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            output.outputFileName = new File(
                    "./../../../../../build/",
                    output.outputFileName.replace(".apk", "-${variant.versionName}.apk"))
        }
    }


    defaultConfig {
        applicationId 'com.alexstyl.specialdates'
        minSdkVersion 16
        targetSdkVersion 27
        versionCode androidVersionCode
        versionName androidVersionName
        resValue "string", "admob_unit_id", "\"$adMobUnitId\""


        buildConfigField "String", "FILE_PROVIDER", "\"com.alexstyl.specialdates.fileprovider\""
        manifestPlaceholders = [crashlyticsApiKey: crashlyticsKey,
                                fileProvider     : "com.alexstyl.specialdates.fileprovider"]

        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
        }
    }


    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    lintOptions {
        abortOnError false
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }

}

dependencies {
    implementation fileTree(dir: 'libs', exclude: 'android-support-v4.jar', include: ['*.jar'])
    implementation project(':android_common')

    implementation "com.android.support:design:$android_support_version"
    implementation "com.android.support:cardview-v7:$android_support_version"
    implementation "com.android.support:appcompat-v7:$android_support_version"
    implementation "com.android.support:recyclerview-v7:$android_support_version"
    implementation "com.android.support:transition:$android_support_version"
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'com.google.dagger:dagger:2.9'
    kapt 'com.google.dagger:dagger-compiler:2.9'
    compileOnly 'javax.annotation:jsr250-api:1.0'

    implementation 'com.novoda:notils:2.2.15'
    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    implementation 'com.novoda:simple-chrome-custom-tabs:0.1.6'
    implementation('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
        transitive = true
    }
    implementation "com.google.android.gms:play-services-wearable:$play_services_version"
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.3.1'
    implementation "com.google.firebase:firebase-core:$play_services_version"
    implementation "com.google.firebase:firebase-ads:$play_services_version"
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
    implementation 'com.evernote:android-job:1.2.4'

    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'
    debugImplementation 'com.facebook.stetho:stetho:1.3.0'
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.easytesting:fest-assert-core:2.0M10'
    testImplementation 'org.mockito:mockito-core:1.10.19'
    testImplementation 'joda-time:joda-time:2.9.4'
    testImplementation 'org.json:json:20140107'
    androidTestImplementation 'junit:junit:4.12'
}


apply from: "$rootDir/android_mobile/google_services.gradle"

apply plugin: 'com.google.gms.google-services'


================================================
FILE: android_mobile/google_services.gradle
================================================
task copyGoogleServicesData() {

    doLast {

        if (!file("$rootDir/android_mobile/google-services.json").exists()) {
            copy {
                from "$rootDir/.circleci/ci-scripts/mock-google-services.json"
                into "$rootDir/android_mobile"

                rename { String fileName ->
                    fileName.replace("mock-google-services.json", "google-services.json")
                }
            }
        }
    }
}



tasks.whenTaskAdded { task ->
    if (task.name == 'processDebugGoogleServices' || task.name == 'processReleaseGoogleServices') {
        task.dependsOn copyGoogleServicesData
    }
}


================================================
FILE: android_mobile/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/alexstyl/android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Joda Time
-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *; }
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-keepattributes SourceFile,LineNumberTable,Annotation
-keep class com.crashlytics.android.**
-keep class com.android.vending.billing.**
-keep class com.tozny.crypto.android.AesCbcWithIntegrity$PrngFixes$* { *; }




================================================
FILE: android_mobile/src/debug/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.alexstyl.specialdates">

  <application
    android:name="com.alexstyl.specialdates.DebugApplication"
    tools:replace="android:name">

    <activity
      android:name="com.alexstyl.specialdates.debug.DebugActivity"
      android:icon="@drawable/ic_heart"
      android:label="Memento Debug"
      android:taskAffinity="com.alexstyl.debug">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

  </application>

</manifest>


================================================
FILE: android_mobile/src/debug/assets/mock/facebook-calendar.ics
================================================
BEGIN:VCALENDAR
PRODID:-//Facebook//NONSGML Facebook Events V1.0//EN
X-WR-CALNAME:Friends' Birthdays
X-PUBLISHED-TTL:PT12H
X-ORIGINAL-URL:https://www.facebook.com/events/birthdays/
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20171219
SUMMARY:Alexandros Stylianidis's birthday
RRULE:FREQ=YEARLY
DURATION:P1D
UID:b1358181263@facebook.com
END:VEVENT
BEGIN:VEVENT
DTSTART:20171219
SUMMARY:Alex Alex's birthday
RRULE:FREQ=YEARLY
DURATION:P1D
UID:b100010984206219@facebook.com
END:VEVENT
END:VCALENDAR


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/DebugAppComponent.java
================================================
package com.alexstyl.specialdates;

import com.alexstyl.resources.ResourcesModule;
import com.alexstyl.specialdates.contact.ContactsModule;
import com.alexstyl.specialdates.dailyreminder.DailyReminderModule;
import com.alexstyl.specialdates.date.DateModule;
import com.alexstyl.specialdates.debug.DebugFragment;
import com.alexstyl.specialdates.debug.DebugModule;
import com.alexstyl.specialdates.donate.DonateModule;
import com.alexstyl.specialdates.events.namedays.NamedayModule;
import com.alexstyl.specialdates.events.peopleevents.PeopleEventsModule;
import com.alexstyl.specialdates.images.ImageModule;
import com.alexstyl.specialdates.person.PersonModule;
import com.alexstyl.specialdates.upcoming.UpcomingEventsModule;

import javax.inject.Singleton;

import dagger.Component;

@Singleton
@Component(modules = {
        AndroidApplicationModule.class,
        NamedayModule.class,
        PersonModule.class,
        ContactsModule.class,
        PeopleEventsModule.class,
        DonateModule.class,
        DebugModule.class,
        UpcomingEventsModule.class,
        DailyReminderModule.class,
        ResourcesModule.class,
        ImageModule.class,
        DateModule.class})
public interface DebugAppComponent {
    void inject(DebugFragment fragment);
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/DebugApplication.java
================================================
package com.alexstyl.specialdates;

import com.alexstyl.resources.ResourcesModule;
import com.alexstyl.specialdates.events.peopleevents.PeopleEventsModule;
import com.alexstyl.specialdates.images.ImageModule;

public class DebugApplication extends MementoApplication {

    private DebugAppComponent debugAppComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        debugAppComponent =
                DaggerDebugAppComponent.builder()
                        .androidApplicationModule(new AndroidApplicationModule(this))
                        .peopleEventsModule(new PeopleEventsModule(this))
                        .imageModule(new ImageModule(getResources()))
                        .resourcesModule(new ResourcesModule(this, getResources()))
                        .build();
    }

    @Override
    protected void initialiseDependencies() {
        super.initialiseDependencies();
        new OptionalDependencies(this).initialise();
    }

    public DebugAppComponent getDebugAppComponent() {
        return debugAppComponent;
    }

}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/OptionalDependencies.java
================================================
package com.alexstyl.specialdates;

import android.app.Application;
import android.content.Context;

import com.facebook.stetho.Stetho;
import com.squareup.leakcanary.LeakCanary;

class OptionalDependencies {

    private final Context context;

    OptionalDependencies(Context context) {
        this.context = context.getApplicationContext();
    }

    void initialise() {
        Stetho.initializeWithDefaults(context);
        if (!LeakCanary.isInAnalyzerProcess(context)) {
            LeakCanary.install((Application) context);
        }
    }
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugActivity.java
================================================
package com.alexstyl.specialdates.debug;

import android.os.Bundle;

import com.alexstyl.specialdates.R;
import com.alexstyl.specialdates.ui.base.ThemedMementoActivity;

public class DebugActivity extends ThemedMementoActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_debug);
    }

}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugFragment.kt
================================================
package com.alexstyl.specialdates.debug

import android.app.Activity
import android.app.DatePickerDialog
import android.content.ContentUris
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.preference.Preference
import android.provider.CalendarContract
import android.provider.ContactsContract
import android.widget.Toast
import com.alexstyl.specialdates.CrashAndErrorTracker
import com.alexstyl.specialdates.DebugApplication
import com.alexstyl.specialdates.Optional
import com.alexstyl.specialdates.R
import com.alexstyl.specialdates.contact.Contact
import com.alexstyl.specialdates.contact.ContactSource.SOURCE_DEVICE
import com.alexstyl.specialdates.contact.ContactsProvider
import com.alexstyl.specialdates.contact.DisplayName
import com.alexstyl.specialdates.dailyreminder.*
import com.alexstyl.specialdates.date.ContactEvent
import com.alexstyl.specialdates.date.Date
import com.alexstyl.specialdates.date.DateParser
import com.alexstyl.specialdates.donate.DebugDonationPreferences
import com.alexstyl.specialdates.donate.DonateMonitor
import com.alexstyl.specialdates.events.bankholidays.BankHoliday
import com.alexstyl.specialdates.events.namedays.NamedayUserSettings
import com.alexstyl.specialdates.events.namedays.NamesInADate
import com.alexstyl.specialdates.events.peopleevents.DebugPeopleEventsUpdater
import com.alexstyl.specialdates.events.peopleevents.StandardEventType
import com.alexstyl.specialdates.events.peopleevents.UpcomingEventsSettings
import com.alexstyl.specialdates.events.peopleevents.UpcomingEventsViewRefresher
import com.alexstyl.specialdates.facebook.friendimport.FacebookFriendsIntentService
import com.alexstyl.specialdates.facebook.login.FacebookLogInActivity
import com.alexstyl.specialdates.support.AskForSupport
import com.alexstyl.specialdates.ui.base.MementoPreferenceFragment
import com.alexstyl.specialdates.upcoming.widget.today.UpcomingWidgetConfigureActivity
import com.alexstyl.specialdates.wear.WearSyncUpcomingEventsView
import com.evernote.android.job.JobRequest
import java.net.URI
import java.util.Calendar
import javax.inject.Inject

class DebugFragment : MementoPreferenceFragment() {

    var dailyReminderDebugPreferences: DailyReminderDebugPreferences? = null
        @Inject set
    var namedayUserSettings: NamedayUserSettings? = null
        @Inject set
    var contactsProvider: ContactsProvider? = null
        @Inject set
    var refresher: UpcomingEventsViewRefresher? = null
        @Inject set
    var tracker: CrashAndErrorTracker? = null
        @Inject set
    var monitor: DonateMonitor? = null
        @Inject set
    var upcomingEventsSettings: UpcomingEventsSettings? = null
        @Inject set
    var dateParser: DateParser? = null
        @Inject set
    var notifier: DailyReminderNotifier? = null
        @Inject set
    var peopleEventsUpdater: DebugPeopleEventsUpdater? = null
        @Inject set
    var dailyReminderViewModelFactory: DailyReminderViewModelFactory? = null
        @Inject set
    var askForSupport: AskForSupport? = null
        @Inject set

    private val onDailyReminderDateSelectedListener = DatePickerDialog.OnDateSetListener { _, year, month, dayOfMonth ->
        val month1 = month + 1 // dialog picker months have 0 index
        dailyReminderDebugPreferences!!.setSelectedDate(dayOfMonth, month1, year)
    }

    override fun onCreate(paramBundle: Bundle?) {
        super.onCreate(paramBundle)

        val debugAppComponent = (activity!!.application as DebugApplication).debugAppComponent
        debugAppComponent.inject(this)

        addPreferencesFromResource(R.xml.preference_debug)
        dailyReminderDebugPreferences = DailyReminderDebugPreferences.newInstance(activity)
        findPreference<Preference>(R.string.key_debug_refresh_db)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            peopleEventsUpdater?.refresh()
            showToast("Refreshing Database")
            true
        }
        findPreference<Preference>(R.string.key_debug_refresh_widget)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            refresher!!.refreshViews()
            showToast("Widget(s) refreshed")
            true
        }

        findPreference<Preference>(R.string.key_debug_daily_reminder_date_enable)!!.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
            dailyReminderDebugPreferences!!.setEnabled(newValue as Boolean)
            true
        }
        findPreference<Preference>(R.string.key_debug_daily_reminder_date)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            val today = dailyReminderDebugPreferences!!.selectedDate
            val datePickerDialog = DatePickerDialog(
                    activity!!, onDailyReminderDateSelectedListener,
                    today.year, today.month - 1, today.dayOfMonth
            )
            datePickerDialog.show()
            false
        }

        findPreference<Preference>(R.string.key_debug_daily_reminder)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            JobRequest.Builder(DailyReminderJob.TAG)
                    .startNow()
                    .build()
                    .schedule()

            showToast("Daily Reminder Triggered")
            true
        }

        findPreference<Preference>(R.string.key_debug_start_calendar)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            startDateIntent()
            true
        }

        findPreference<Preference>(R.string.key_debug_trigger_wear_service)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            WearSyncUpcomingEventsView(activity).reloadUpcomingEventsView()
            true
        }
        findPreference<Preference>(R.string.key_debug_reset_donations)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { preference ->
            DebugDonationPreferences.newInstance(preference.context, monitor).reset()
            Toast.makeText(preference.context, "Donations reset. You should see ads from now on", Toast.LENGTH_SHORT).show()
            true
        }
        findPreference<Preference>(R.string.key_debug_trigger_support)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { preference ->
            DebugPreferences.newInstance(preference.context, R.string.pref_call_to_rate).wipe()
            askForSupport!!.requestForRatingSooner()
            val message = "Support triggered. You should now see a prompt to rate the app when you launch it"
            showToast(message)
            true
        }
        findPreference<Preference>(R.string.key_debug_facebook)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            val intent = Intent(activity, FacebookLogInActivity::class.java)
            startActivity(intent)
            true
        }
        findPreference<Preference>(R.string.key_debug_facebook_fetch_friends)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            val intent = Intent(activity, FacebookFriendsIntentService::class.java)
            activity!!.startService(intent)
            true
        }

        findPreference<Preference>(R.string.key_debug_open_contact)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
            val contactPickerIntent = Intent(
                    Intent.ACTION_PICK,
                    ContactsContract.Contacts.CONTENT_URI
            )
            startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT)
            true
        }
        findPreference<Preference>(R.string.key_debug_trigger_daily_reminder_notification_one)!!
                .onPreferenceClickListener = Preference.OnPreferenceClickListener {
            notifyForContacts(arrayListOf(
                    contactEventOn(Date.today().minusDay(365 * 10), Contact(123L, "Peter".toDisplayName(), URI.create("content://com.android.contacts/contacts/123"), SOURCE_DEVICE), StandardEventType.BIRTHDAY)
            ))

            true
        }
        findPreference<Preference>(R.string.key_debug_trigger_daily_reminder_notification_many)!!
                .onPreferenceClickListener = Preference.OnPreferenceClickListener {
            notifyForContacts(arrayListOf(
                    contactEventOn(Date.today().minusDay(365 * 10), Contact(336L, "Peter".toDisplayName(), URI.create("content://com.android.contacts/contacts/336"), SOURCE_DEVICE), StandardEventType.NAMEDAY),
                    contactEventOn(Date.today().minusDay(365 * 10), Contact(123L, "Alex".toDisplayName(), URI.create("content://com.android.contacts/contacts/123"), SOURCE_DEVICE), StandardEventType.BIRTHDAY),
                    contactEventOn(Date.today().minusDay(365 * 10), Contact(108L, "Anna".toDisplayName(), URI.create("content://com.android.contacts/contacts/108"), SOURCE_DEVICE), StandardEventType.ANNIVERSARY),
                    contactEventOn(Date.today().minusDay(365 * 10), Contact(108L, "Anna".toDisplayName(), URI.create("content://com.android.contacts/contacts/108"), SOURCE_DEVICE), StandardEventType.OTHER)
            ))

            true
        }

        findPreference<Preference>(R.string.key_debug_trigger_namedays_notification)!!
                .onPreferenceClickListener = Preference.OnPreferenceClickListener {
            notifier!!.notifyFor(
                    DailyReminderViewModel(
                            dailyReminderViewModelFactory!!.summaryOf(emptyList()),
                            emptyList(),
                            namedaysNotifications(
                                    arrayListOf("NamedayTest", "Alex", "Bravo", "NamedaysRock"
                                            , "Alex", "Bravo", "NamedaysRock"
                                            , "Alex", "Bravo", "NamedaysRock"
                                            , "Alex", "Bravo", "NamedaysRock")),
                            Optional.absent()
                    )
            )
            true
        }
        findPreference<Preference>(R.string.key_debug_trigger_bank_holiday)!!
                .onPreferenceClickListener = Preference.OnPreferenceClickListener {
            notifier!!.notifyFor(
                    DailyReminderViewModel(
                            dailyReminderViewModelFactory!!.summaryOf(emptyList()),
                            emptyList(),
                            Optional.absent(),
                            bankholidayNotification()
                    )
            )
            true
        }

        findPreference<Preference>(R.string.key_debug_configure_widgets)!!
                .onPreferenceClickListener = Preference.OnPreferenceClickListener {
            val intent = Intent(activity, UpcomingWidgetConfigureActivity::class.java)
            activity!!.startActivity(intent)
            true
        }
    }

    private fun notifyForContacts(contacts: ArrayList<ContactEvent>) {
        val viewModels = contacts
                .toViewModels()

        notifier!!.notifyFor(
                DailyReminderViewModel(
                        dailyReminderViewModelFactory!!.summaryOf(viewModels),
                        viewModels,
                        Optional.absent(),
                        Optional.absent()
                )
        )
    }

    private fun bankholidayNotification() = Optional(dailyReminderViewModelFactory!!.viewModelFor(BankHoliday("Test Bank Holiday", Date.today())))

    private fun namedaysNotifications(arrayList: ArrayList<String>): Optional<NamedaysNotificationViewModel> =
            Optional(dailyReminderViewModelFactory!!.viewModelFor(NamesInADate(Date.today(),
                    arrayList
            )))

    private fun contactEventOn(date: Date, contact: Contact, standardEventType: StandardEventType) = ContactEvent(Optional.absent(), standardEventType,
            date, contact)

    private fun showToast(message: String) {
        Toast.makeText(activity, message, Toast.LENGTH_SHORT).show()
    }

    private fun startDateIntent() {
        val cal = Calendar.getInstance()
        val builder = CalendarContract.CONTENT_URI.buildUpon()
        builder.appendPath("time")
        ContentUris.appendId(builder, cal.timeInMillis)
        val intent = Intent(Intent.ACTION_VIEW)
                .setData(builder.build())

        startActivity(intent)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RESULT_PICK_CONTACT && resultCode == Activity.RESULT_OK) {
            val intent = Intent(Intent.ACTION_VIEW)
            val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, data.data!!.lastPathSegment.toString())
            intent.data = uri
            startActivity(intent)
        }
    }

    companion object {

        private const val RESULT_PICK_CONTACT = 4929
    }

    private fun String.toDisplayName(): DisplayName = DisplayName.from(this)

    private fun ArrayList<ContactEvent>.toViewModels(): ArrayList<ContactEventNotificationViewModel> {
        val viewmodels = arrayListOf<ContactEventNotificationViewModel>()
        forEach {
            viewmodels.add(dailyReminderViewModelFactory!!.viewModelFor(it.contact, listOf(it)))
        }
        return viewmodels
    }
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugModule.java
================================================
package com.alexstyl.specialdates.debug;

import android.content.Context;

import com.alexstyl.specialdates.dailyreminder.DailyReminderDebugPreferences;
import com.alexstyl.specialdates.events.namedays.NamedayDatabaseRefresher;
import com.alexstyl.specialdates.events.peopleevents.DebugPeopleEventsUpdater;
import com.alexstyl.specialdates.events.peopleevents.PeopleEventsStaticEventsRefresher;

import dagger.Module;
import dagger.Provides;

@Module
public class DebugModule {

    @Provides
    DebugPeopleEventsUpdater debugPeopleEventsUpdater(PeopleEventsStaticEventsRefresher peopleEventsStaticEventsRefresher,
                                                      NamedayDatabaseRefresher namedayDatabaseRefresher) {
        return new DebugPeopleEventsUpdater(peopleEventsStaticEventsRefresher, namedayDatabaseRefresher);
    }

    @Provides
    DailyReminderDebugPreferences debugPreferences(Context context) {
        return DailyReminderDebugPreferences.newInstance(context);
    }
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugPreferences.java
================================================
package com.alexstyl.specialdates.debug;

import android.content.Context;
import android.support.annotation.StringRes;

import com.alexstyl.specialdates.EasyPreferences;

final class DebugPreferences {

    private final EasyPreferences preferences;

    public static DebugPreferences newInstance(Context context, @StringRes int prefKey) {
        return new DebugPreferences(EasyPreferences.createForPrivatePreferences(context, prefKey));
    }

    private DebugPreferences(EasyPreferences preferences) {
        this.preferences = preferences;
    }

    void wipe() {
        preferences.clear();
    }
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/donate/DebugDonationPreferences.java
================================================
package com.alexstyl.specialdates.donate;

import android.content.Context;

import com.alexstyl.specialdates.EasyPreferences;
import com.alexstyl.specialdates.R;

public final class DebugDonationPreferences {

    private final EasyPreferences easyPreferences;
    private final DonateMonitor donateMonitor;

    public static DebugDonationPreferences newInstance(Context context, DonateMonitor donateMonitor) {
        return new DebugDonationPreferences(EasyPreferences.createForDefaultPreferences(context), donateMonitor);
    }

    private DebugDonationPreferences(EasyPreferences easyPreferences, DonateMonitor donateMonitor) {
        this.easyPreferences = easyPreferences;
        this.donateMonitor = donateMonitor;
    }

    public void reset() {
        easyPreferences.setBoolean(R.string.key_has_donated, false);
        donateMonitor.onDonationUpdated();
    }
}


================================================
FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/events/peopleevents/DebugPeopleEventsUpdater.java
================================================
package com.alexstyl.specialdates.events.peopleevents;

import com.alexstyl.specialdates.events.namedays.NamedayDatabaseRefresher;

public final class DebugPeopleEventsUpdater {

    private final PeopleEventsStaticEventsRefresher peopleEventsStaticEventsRefresher;
    private final NamedayDatabaseRefresher namedayDatabaseRefresher;

    public DebugPeopleEventsUpdater(PeopleEventsStaticEventsRefresher peopleEventsStaticEventsRefresher,
                                    NamedayDatabaseRefresher namedayDatabaseRefresher) {
        this.peopleEventsStaticEventsRefresher = peopleEventsStaticEventsRefresher;
        this.namedayDatabaseRefresher = namedayDatabaseRefresher;
    }

    public void refresh() {
        peopleEventsStaticEventsRefresher.rebuildEvents();
        namedayDatabaseRefresher.refreshNamedaysIfEnabled();
    }
}


================================================
FILE: android_mobile/src/debug/res/layout/activity_debug.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/search_fragment"
  android:name="com.alexstyl.specialdates.debug.DebugFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />



================================================
FILE: android_mobile/src/debug/res/layout/debug_activity_animations.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <com.alexstyl.specialdates.addevent.BirthdayLabelView
    android:layout_width="match_parent"
    android:layout_height="match_parent"></com.alexstyl.specialdates.addevent.BirthdayLabelView>
</RelativeLayout>




================================================
FILE: android_mobile/src/debug/res/layout/debug_activity_mixing_colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Lorem ipsum and stuff" />

</LinearLayout>


================================================
FILE: android_mobile/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.alexstyl.specialdates"
    android:installLocation="internalOnly">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />


    <!-- The BLUETOOTH permission is used for mixpanel-->
    <uses-permission android:name="android.permission.BLUETOOTH" />

    <uses-permission android:name="com.android.vending.BILLING" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <application
        android:name="com.alexstyl.specialdates.MementoApplication"
        android:allowBackup="true"
        android:exported="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/localised_app_name">

        <activity android:name="com.alexstyl.specialdates.home.HomeActivity" />

        <!-- Activity alias used so that we can modify the UpcomingEventsActivity file without worrying about the name -->
        <activity-alias
            android:name="com.alexstyl.specialdates.ui.activity.MainActivity"
            android:targetActivity=".home.HomeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity
            android:name="com.alexstyl.specialdates.search.SearchActivity"
            android:parentActivityName="com.alexstyl.specialdates.home.HomeActivity"
            android:windowSoftInputMode="stateVisible|adjustResize">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.alexstyl.specialdates.home.HomeActivity" />
        </activity>


        <activity
            android:name=".settings.DailyReminderActivity"
            android:exported="true"
            android:label="@string/daily_reminder"
            android:launchMode="singleInstance"
            android:parentActivityName=".home.HomeActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".home.HomeActivity" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.alexstyl.specialdates.addevent.AddEventActivity"
            android:exported="true"
            android:label="@string/add_event_title"
            android:parentActivityName="com.alexstyl.specialdates.home.HomeActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.alexstyl.specialdates.home.HomeActivity" />
        </activity>


        <activity
            android:name="com.alexstyl.specialdates.support.RateDialog"
            android:label="@string/support_app"
            android:noHistory="true"
            android:parentActivityName="com.alexstyl.specialdates.home.HomeActivity"
            android:theme="@style/Theme.Dayslight.DialogNoTitle">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.alexstyl.specialdates.home.HomeActivity" />
        </activity>

        <activity
            android:name=".upcoming.widget.today.UpcomingWidgetConfigureActivity"
            android:label="@string/Configure_widget"
            android:noHistory="true"
            android:theme="@style/Theme.Memento.Wallpaper">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
            android:theme="@style/Base.Theme.AppCompat" />


        <activity android:name=".permissions.ContactPermissionActivity" />

        <activity
            android:name=".donate.DonateActivity"
            android:label="@string/donate_welcome"
            android:parentActivityName=".home.HomeActivity"
            android:theme="@style/Theme.Donate" />

        <activity
            android:name=".facebook.login.FacebookLogInActivity"
            android:label="@string/title_facebook_log_in" />

        <activity
            android:name=".facebook.FacebookProfileActivity"
            android:label="@string/title_facebook_profile" />

        <activity
            android:name=".person.PersonActivity"
            android:parentActivityName=".home.HomeActivity">

            <intent-filter>
                <action android:name="com.android.contacts.action.QUICK_CONTACT" />
                <action android:name="android.provider.action.QUICK_CONTACT" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="vnd.android.cursor.item/contact" />
                <data android:mimeType="vnd.android.cursor.item/person" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="vnd.android.cursor.item/person" />
                <data android:mimeType="vnd.android.cursor.item/contact" />
                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
            </intent-filter>

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".home.HomeActivity" />
        </activity>

        <activity
            android:name=".events.namedays.activity.NamedaysOnADayActivity"
            android:parentActivityName=".home.HomeActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".home.HomeActivity" />
        </activity>


        <activity android:name=".dailyreminder.actions.PersonActionsActivity" />

        <activity android:name=".upcoming.widget.list.WidgetRouterActivity" />
        <!-- Services -->

        <service
            android:name="com.alexstyl.specialdates.wear.WearSyncService"
            android:exported="false" />

        <receiver android:name="com.alexstyl.specialdates.DeviceConfigurationUpdatedReceiver">
            <intent-filter>
                <action android:name="android.intent.action.LOCALE_CHANGED" />
            </intent-filter>
        </receiver>

        <receiver android:name="com.alexstyl.specialdates.receiver.BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.TIME_SET" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name=".upcoming.widget.today.TodayAppWidgetProvider"
            android:label="@string/widget_upcoming_title_simple">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info_upcoming_events_simple" />
        </receiver>

        <receiver
            android:name=".upcoming.widget.list.UpcomingEventsScrollingAppWidgetProvider"
            android:label="@string/widget_upcoming_title_list">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info_upcoming_events_list" />
        </receiver>

        <service
            android:name=".upcoming.widget.list.UpcomingEventsRemoteViewService"
            android:permission="android.permission.BIND_REMOTEVIEWS" />

        <service
            android:name=".facebook.friendimport.FacebookFriendsIntentService"
            android:label="@string/title_facebook_friends_import" />

        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="${crashlyticsApiKey}" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${fileProvider}"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
    </application>

</manifest>


================================================
FILE: android_mobile/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl
================================================
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.vending.billing;

import android.os.Bundle;

/**
 * InAppBillingService is the service that provides in-app billing version 3 and beyond.
 * This service provides the following features:
 * 1. Provides a new API to get details of in-app items published for the app including
 *    price, type, title and description.
 * 2. The purchase flow is synchronous and purchase information is available immediately
 *    after it completes.
 * 3. Purchase information of in-app purchases is maintained within the Google Play system
 *    till the purchase is consumed.
 * 4. An API to consume a purchase of an inapp item. All purchases of one-time
 *    in-app items are consumable and thereafter can be purchased again.
 * 5. An API to get current purchases of the user immediately. This will not contain any
 *    consumed purchases.
 *
 * All calls will give a response code with the following possible values
 * RESULT_OK = 0 - success
 * RESULT_USER_CANCELED = 1 - User pressed back or canceled a dialog
 * RESULT_SERVICE_UNAVAILABLE = 2 - The network connection is down
 * RESULT_BILLING_UNAVAILABLE = 3 - This billing API version is not supported for the type requested
 * RESULT_ITEM_UNAVAILABLE = 4 - Requested SKU is not available for purchase
 * RESULT_DEVELOPER_ERROR = 5 - Invalid arguments provided to the API
 * RESULT_ERROR = 6 - Fatal error during the API action
 * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
 * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
 */
interface IInAppBillingService {
    /**
     * Checks support for the requested billing API version, package and in-app type.
     * Minimum API version supported by this interface is 3.
     * @param apiVersion billing API version that the app is using
     * @param packageName the package name of the calling app
     * @param type type of the in-app item being purchased ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @return RESULT_OK(0) on success and appropriate response code on failures.
     */
    int isBillingSupported(int apiVersion, String packageName, String type);

    /**
     * Provides details of a list of SKUs
     * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
     * with a list JSON strings containing the productId, price, title and description.
     * This API can be called with a maximum of 20 SKUs.
     * @param apiVersion billing API version that the app is using
     * @param packageName the package name of the calling app
     * @param type of the in-app items ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
     * @return Bundle containing the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
     *                         on failures.
     *         "DETAILS_LIST" with a StringArrayList containing purchase information
     *                        in JSON format similar to:
     *                        '{ "productId" : "exampleSku",
     *                           "type" : "inapp",
     *                           "price" : "$5.00",
     *                           "price_currency": "USD",
     *                           "price_amount_micros": 5000000,
     *                           "title : "Example Title",
     *                           "description" : "This is an example description" }'
     */
    Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);

    /**
     * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
     * the type, a unique purchase token and an optional developer payload.
     * @param apiVersion billing API version that the app is using
     * @param packageName package name of the calling app
     * @param sku the SKU of the in-app item as published in the developer console
     * @param type of the in-app item being purchased ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @param developerPayload optional argument to be sent back with the purchase information
     * @return Bundle containing the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
     *                         on failures.
     *         "BUY_INTENT" - PendingIntent to start the purchase flow
     *
     * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
     * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
     * If the purchase is successful, the result data will contain the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response
     *                         codes on failures.
     *         "INAPP_PURCHASE_DATA" - String in JSON format similar to
     *                                 '{"orderId":"12999763169054705758.1371079406387615",
     *                                   "packageName":"com.example.app",
     *                                   "productId":"exampleSku",
     *                                   "purchaseTime":1345678900000,
     *                                   "purchaseToken" : "122333444455555",
     *                                   "developerPayload":"example developer payload" }'
     *         "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
     *                                  was signed with the private key of the developer
     */
    Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
        String developerPayload);

    /**
     * Returns the current SKUs owned by the user of the type and package name specified along with
     * purchase information and a signature of the data to be validated.
     * This will return all SKUs that have been purchased in V3 and managed items purchased using
     * V1 and V2 that have not been consumed.
     * @param apiVersion billing API version that the app is using
     * @param packageName package name of the calling app
     * @param type of the in-app items being requested ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @param continuationToken to be set as null for the first call, if the number of owned
     *        skus are too many, a continuationToken is returned in the response bundle.
     *        This method can be called again with the continuation token to get the next set of
     *        owned skus.
     * @return Bundle containing the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
                               on failures.
     *         "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
     *         "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
     *         "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
     *                                      of the purchase information
     *         "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
     *                                      next set of in-app purchases. Only set if the
     *                                      user has more owned skus than the current list.
     */
    Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);

    /**
     * Consume the last purchase of the given SKU. This will result in this item being removed
     * from all subsequent responses to getPurchases() and allow re-purchase of this item.
     * @param apiVersion billing API version that the app is using
     * @param packageName package name of the calling app
     * @param purchaseToken token in the purchase information JSON that identifies the purchase
     *        to be consumed
     * @return RESULT_OK(0) if consumption succeeded, appropriate response codes on failures.
     */
    int consumePurchase(int apiVersion, String packageName, String purchaseToken);

    /**
     * This API is currently under development.
     */
    int stub(int apiVersion, String packageName, String type);

    /**
     * Returns a pending intent to launch the purchase flow for upgrading or downgrading a
     * subscription. The existing owned SKU(s) should be provided along with the new SKU that
     * the user is upgrading or downgrading to.
     * @param apiVersion billing API version that the app is using, must be 5 or later
     * @param packageName package name of the calling app
     * @param oldSkus the SKU(s) that the user is upgrading or downgrading from,
     *        if null or empty this method will behave like {@link #getBuyIntent}
     * @param newSku the SKU that the user is upgrading or downgrading to
     * @param type of the item being purchased, currently must be "subs"
     * @param developerPayload optional argument to be sent back with the purchase information
     * @return Bundle containing the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response codes
     *                         on failures.
     *         "BUY_INTENT" - PendingIntent to start the purchase flow
     *
     * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
     * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
     * If the purchase is successful, the result data will contain the following key-value pairs
     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, appropriate response
     *                         codes on failures.
     *         "INAPP_PURCHASE_DATA" - String in JSON format similar to
     *                                 '{"orderId":"12999763169054705758.1371079406387615",
     *                                   "packageName":"com.example.app",
     *                                   "productId":"exampleSku",
     *                                   "purchaseTime":1345678900000,
     *                                   "purchaseToken" : "122333444455555",
     *                                   "developerPayload":"example developer payload" }'
     *         "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
     *                                  was signed with the private key of the developer
     */
    Bundle getBuyIntentToReplaceSkus(int apiVersion, String packageName,
        in List<String> oldSkus, String newSku, String type, String developerPayload);

    /**
     * Returns a pending intent to launch the purchase flow for an in-app item. This method is
     * a variant of the {@link #getBuyIntent} method and takes an additional {@code extraParams}
     * parameter. This parameter is a Bundle of optional keys and values that affect the
     * operation of the method.
     * @param apiVersion billing API version that the app is using, must be 6 or later
     * @param packageName package name of the calling app
     * @param sku the SKU of the in-app item as published in the developer console
     * @param type of the in-app item being purchased ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @param developerPayload optional argument to be sent back with the purchase information
     * @extraParams a Bundle with the following optional keys:
     *        "skusToReplace" - List<String> - an optional list of SKUs that the user is
     *                          upgrading or downgrading from.
     *                          Pass this field if the purchase is upgrading or downgrading
     *                          existing subscriptions.
     *                          The specified SKUs are replaced with the SKUs that the user is
     *                          purchasing. Google Play replaces the specified SKUs at the start of
     *                          the next billing cycle.
     * "replaceSkusProration" - Boolean - whether the user should be credited for any unused
     *                          subscription time on the SKUs they are upgrading or downgrading.
     *                          If you set this field to true, Google Play swaps out the old SKUs
     *                          and credits the user with the unused value of their subscription
     *                          time on a pro-rated basis.
     *                          Google Play applies this credit to the new subscription, and does
     *                          not begin billing the user for the new subscription until after
     *                          the credit is used up.
     *                          If you set this field to false, the user does not receive credit for
     *                          any unused subscription time and the recurrence date does not
     *                          change.
     *                          Default value is true. Ignored if you do not pass skusToReplace.
     *            "accountId" - String - an optional obfuscated string that is uniquely
     *                          associated with the user's account in your app.
     *                          If you pass this value, Google Play can use it to detect irregular
     *                          activity, such as many devices making purchases on the same
     *                          account in a short period of time.
     *                          Do not use the developer ID or the user's Google ID for this field.
     *                          In addition, this field should not contain the user's ID in
     *                          cleartext.
     *                          We recommend that you use a one-way hash to generate a string from
     *                          the user's ID, and store the hashed string in this field.
     *                   "vr" - Boolean - an optional flag indicating whether the returned intent
     *                          should start a VR purchase flow. The apiVersion must also be 7 or
     *                          later to use this flag.
     */
    Bundle getBuyIntentExtraParams(int apiVersion, String packageName, String sku,
        String type, String developerPayload, in Bundle extraParams);

    /**
     * Returns the most recent purchase made by the user for each SKU, even if that purchase is
     * expired, canceled, or consumed.
     * @param apiVersion billing API version that the app is using, must be 6 or later
     * @param packageName package name of the calling app
     * @param type of the in-app items being requested ("inapp" for one-time purchases
     *        and "subs" for subscriptions)
     * @param continuationToken to be set as null for the first call, if the number of owned
     *        skus is too large, a continuationToken is returned in the response bundle.
     *        This method can be called again with the continuation token to get the next set of
     *        owned skus.
     * @param extraParams a Bundle with extra params that would be appended into http request
     *        query string. Not used at this moment. Reserved for future functionality.
     * @return Bundle containing the following key-value pairs
     *         "RESPONSE_CODE" with int value: RESULT_OK(0) if success,
     *         {@link IabHelper#BILLING_RESPONSE_RESULT_*} response codes on failures.
     *
     *         "INAPP_PURCHASE_ITEM_LIST" - ArrayList<String> containing the list of SKUs
     *         "INAPP_PURCHASE_DATA_LIST" - ArrayList<String> containing the purchase information
     *         "INAPP_DATA_SIGNATURE_LIST"- ArrayList<String> containing the signatures
     *                                      of the purchase information
     *         "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
     *                                      next set of in-app purchases. Only set if the
     *                                      user has more owned skus than the current list.
     */
    Bundle getPurchaseHistory(int apiVersion, String packageName, String type,
        String continuationToken, in Bundle extraParams);

    /**
    * This method is a variant of {@link #isBillingSupported}} that takes an additional
    * {@code extraParams} parameter.
    * @param apiVersion billing API version that the app is using, must be 7 or later
    * @param packageName package name of the calling app
    * @param type of the in-app item being purchased ("inapp" for one-time purchases and "subs"
    *        for subscriptions)
    * @param extraParams a Bundle with the following optional keys:
    *        "vr" - Boolean - an optional flag to indicate whether {link #getBuyIntentExtraParams}
    *               supports returning a VR purchase flow.
    * @return RESULT_OK(0) on success and appropriate response code on failures.
    */
    int isBillingSupportedExtraParams(int apiVersion, String packageName, String type,
        in Bundle extraParams);
}


================================================
FILE: android_mobile/src/main/java/android/support/v4/preference/PreferenceFragment.java
================================================
/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.support.v4.preference;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.ListView;

import com.alexstyl.specialdates.R;

@SuppressWarnings("all")
public abstract class PreferenceFragment extends Fragment implements
		PreferenceManagerCompat.OnPreferenceTreeClickListener {

	private static final String PREFERENCES_TAG = "android:preferences";

    private PreferenceManager mPreferenceManager;
    private ListView mList;
    private boolean mHavePrefs;
    private boolean mInitDone;

    /**
     * The starting request code given out to preference framework.
     */
    private static final int FIRST_REQUEST_CODE = 100;

    private static final int MSG_BIND_PREFERENCES = 1;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                case MSG_BIND_PREFERENCES:
                    bindPreferences();
                    break;
            }
        }
    };

    final private Runnable mRequestFocus = new Runnable() {
        public void run() {
            mList.focusableViewAvailable(mList);
        }
    };

    /**
     * Interface that PreferenceFragment's containing activity should
     * implement to be able to process preference items that wish to
     * switch to a new fragment.
     */
    public interface OnPreferenceStartFragmentCallback {
        /**
         * Called when the user has clicked on a Preference that has
         * a fragment class name associated with it.  The implementation
         * to should instantiate and switch to an instance of the given
         * fragment.
         */
        boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref);
    }

    @Override
	public void onCreate(Bundle paramBundle) {
		super.onCreate(paramBundle);
		mPreferenceManager = PreferenceManagerCompat.newInstance(getActivity(), FIRST_REQUEST_CODE);
		PreferenceManagerCompat.setFragment(mPreferenceManager, this);
	}

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

    }

    @Override
	public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup,
			Bundle paramBundle) {
		return paramLayoutInflater.inflate(
                R.layout.preference_list_fragment, paramViewGroup,
				false);
	}

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        if (mHavePrefs) {
            bindPreferences();
        }

        mInitDone = true;

        if (savedInstanceState != null) {
            Bundle container = savedInstanceState.getBundle(PREFERENCES_TAG);
            if (container != null) {
                final PreferenceScreen preferenceScreen = getPreferenceScreen();
                if (preferenceScreen != null) {
                    preferenceScreen.restoreHierarchyState(container);
                }
            }
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        PreferenceManagerCompat.setOnPreferenceTreeClickListener(mPreferenceManager, this);
    }

    @Override
	public void onStop() {
		super.onStop();
		PreferenceManagerCompat.dispatchActivityStop(mPreferenceManager);
		PreferenceManagerCompat.setOnPreferenceTreeClickListener(mPreferenceManager, null);
	}

    @Override
	public void onDestroyView() {
		mList = null;
		mHandler.removeCallbacks(mRequestFocus);
		mHandler.removeMessages(MSG_BIND_PREFERENCES);
		super.onDestroyView();
	}

    @Override
	public void onDestroy() {
		super.onDestroy();
		PreferenceManagerCompat.dispatchActivityDestroy(mPreferenceManager);
	}

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        final PreferenceScreen preferenceScreen = getPreferenceScreen();
        if (preferenceScreen != null) {
            Bundle container = new Bundle();
            preferenceScreen.saveHierarchyState(container);
            outState.putBundle(PREFERENCES_TAG, container);
        }
    }

    @Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

        PreferenceManagerCompat.dispatchActivityResult(mPreferenceManager, requestCode, resultCode, data);
	}

    /**
     * Returns the {@link PreferenceManager} used by this fragment.
     * @return The {@link PreferenceManager}.
     */
    public PreferenceManager getPreferenceManager() {
        return mPreferenceManager;
    }

    /**
     * Sets the root of the preference hierarchy that this fragment is showing.
     *
     * @param preferenceScreen The root {@link PreferenceScreen} of the preference hierarchy.
     */
    public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
        if (PreferenceManagerCompat.setPreferences(mPreferenceManager, preferenceScreen) && preferenceScreen != null) {
            mHavePrefs = true;
            if (mInitDone) {
                postBindPreferences();
            }
        }
    }

    /**
     * Gets the root of the preference hierarchy that this fragment is showing.
     *
     * @return The {@link PreferenceScreen} that is the root of the preference
     *         hierarchy.
     */
    public PreferenceScreen getPreferenceScreen() {
        return PreferenceManagerCompat.getPreferenceScreen(mPreferenceManager);
    }

    /**
     * Adds preferences from activities that match the given {@link Intent}.
     *
     * @param intent The {@link Intent} to query activities.
     */
    public void addPreferencesFromIntent(Intent intent) {
        requirePreferenceManager();

        setPreferenceScreen(PreferenceManagerCompat.inflateFromIntent(mPreferenceManager, intent, getPreferenceScreen()));
    }

    /**
     * Inflates the given XML resource and adds the preference hierarchy to the current
     * preference hierarchy.
     *
     * @param preferencesResId The XML resource ID to inflate.
     */
    public void addPreferencesFromResource(int preferencesResId) {
        requirePreferenceManager();

        setPreferenceScreen(PreferenceManagerCompat.inflateFromResource(mPreferenceManager, getActivity(),
        		preferencesResId, getPreferenceScreen()));
    }

    /**
     * {@inheritDoc}
     */
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
            Preference preference) {
        //if (preference.getFragment() != null &&
    	if (
                getActivity() instanceof OnPreferenceStartFragmentCallback) {
            return ((OnPreferenceStartFragmentCallback)getActivity()).onPreferenceStartFragment(
                    this, preference);
        }
        return false;
    }

    /**
     * Finds a {@link Preference} based on its key.
     *
     * @param key The key of the preference to retrieve.
     * @return The {@link Preference} with the key, or null.
     * @see PreferenceGroup#findPreference(CharSequence)
     */
    public Preference findPreference(CharSequence key) {
        if (mPreferenceManager == null) {
            return null;
        }
        return mPreferenceManager.findPreference(key);
    }

    private void requirePreferenceManager() {
        if (mPreferenceManager == null) {
            throw new RuntimeException("This should be called after super.onCreate.");
        }
    }

    private void postBindPreferences() {
        if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) return;
        mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget();
    }

    private void bindPreferences() {
        final PreferenceScreen preferenceScreen = getPreferenceScreen();
        if (preferenceScreen != null) {
            preferenceScreen.bind(getListView());
        }
    }

    public ListView getListView() {
        ensureList();
        return mList;
    }

    private void ensureList() {
        if (mList != null) {
            return;
        }
        View root = getView();
        if (root == null) {
            throw new IllegalStateException("Content view not yet created");
        }
        View rawListView = root.findViewById(android.R.id.list);
        if (!(rawListView instanceof ListView)) {
            throw new RuntimeException(
                    "Content has view with id attribute 'android.R.id.list' "
                    + "that is not a ListView class");
        }
        mList = (ListView)rawListView;
        if (mList == null) {
            throw new RuntimeException(
                    "Your content must have a ListView whose id attribute is " +
                    "'android.R.id.list'");
        }
        mList.setOnKeyListener(mListOnKeyListener);
        mHandler.post(mRequestFocus);
    }

    private OnKeyListener mListOnKeyListener = new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            Object selectedItem = mList.getSelectedItem();
            if (selectedItem instanceof Preference) {
                @SuppressWarnings("unused")
				View selectedView = mList.getSelectedView();
                //return ((Preference)selectedItem).onKey(
                //        selectedView, keyCode, event);
                return false;
            }
            return false;
        }

    };


}


================================================
FILE: android_mobile/src/main/java/android/support/v4/preference/PreferenceManagerCompat.java
================================================
/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.support.v4.preference;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.util.Log;

public class PreferenceManagerCompat {
	
	private static final String TAG = PreferenceManagerCompat.class.getSimpleName();
	
    /**
     * Interface definition for a callback to be invoked when a
     * {@link Preference} in the hierarchy rooted at this {@link PreferenceScreen} is
     * clicked.
     */
    interface OnPreferenceTreeClickListener {
        /**
         * Called when a preference in the tree rooted at this
         * {@link PreferenceScreen} has been clicked.
         * 
         * @param preferenceScreen The {@link PreferenceScreen} that the
         *        preference is located in.
         * @param preference The preference that was clicked.
         * @return Whether the click was handled.
         */
        boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference);
    }
    
	static PreferenceManager newInstance(Activity activity, int firstRequestCode) {
		try {
			Constructor<PreferenceManager> c = PreferenceManager.class.getDeclaredConstructor(Activity.class, int.class);
			c.setAccessible(true);
			return c.newInstance(activity, firstRequestCode);
		} catch (Exception e) {
			Log.w(TAG, "Couldn't call constructor PreferenceManager by reflection", e);
		}
		return null;
	}
	
	/**
     * Sets the owning preference fragment
     */
    static void setFragment(PreferenceManager manager, PreferenceFragment fragment) {
    	// stub
    }

    /**
     * Sets the callback to be invoked when a {@link Preference} in the
     * hierarchy rooted at this {@link PreferenceManager} is clicked.
     * 
     * @param listener The callback to be invoked.
     */
	static void setOnPreferenceTreeClickListener(PreferenceManager manager, final OnPreferenceTreeClickListener listener) {
		try {
			Field onPreferenceTreeClickListener = PreferenceManager.class.getDeclaredField("mOnPreferenceTreeClickListener");
			onPreferenceTreeClickListener.setAccessible(true);
			if (listener != null) {
				Object proxy = Proxy.newProxyInstance(
						onPreferenceTreeClickListener.getType().getClassLoader(),
						new Class[] { onPreferenceTreeClickListener.getType() },
						new InvocationHandler() {
					public Object invoke(Object proxy, Method method, Object[] args) {
						if (method.getName().equals("onPreferenceTreeClick")) {
							return Boolean.valueOf(listener.onPreferenceTreeClick((PreferenceScreen) args[0], (Preference) args[1]));
						} else {
							return null;
						}
					}
				});
				onPreferenceTreeClickListener.set(manager, proxy);
			} else {
				onPreferenceTreeClickListener.set(manager, null);
			}
		} catch (Exception e) {
			Log.w(TAG, "Couldn't set PreferenceManager.mOnPreferenceTreeClickListener by reflection", e);
		}
	}
	
	/**
     * Inflates a preference hierarchy from the preference hierarchies of
     * {@link Activity Activities} that match the given {@link Intent}. An
     * {@link Activity} defines its preference hierarchy with meta-data using
     * the {@link #METADATA_KEY_PREFERENCES} key.
     * <p>
     * If a preference hierarchy is given, the new preference hierarchies will
     * be merged in.
     * 
     * @param queryIntent The intent to match activities.
     * @param rootPreferences Optional exist
Download .txt
gitextract_87q2jt04/

├── .circleci/
│   ├── ci-scripts/
│   │   ├── accept-android-licenses.sh
│   │   ├── ensure-sdkmanager.sh
│   │   └── mock-google-services.json
│   └── config.yml
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE.md
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── LICENSE
├── PEOPLE.md
├── README.md
├── android_common/
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           ├── android/
│           │           │   ├── AndroidLogger.kt
│           │           │   ├── Version.kt
│           │           │   ├── ViewVisibility.java
│           │           │   ├── preferences/
│           │           │   │   └── widget/
│           │           │   │       └── TimePreference.java
│           │           │   └── widget/
│           │           │       └── AppWidgetId.java
│           │           ├── resources/
│           │           │   ├── AndroidDimensionResources.java
│           │           │   └── DimensionResources.java
│           │           └── specialdates/
│           │               ├── AndroidStrings.kt
│           │               ├── TextViewLabelSetter.java
│           │               ├── date/
│           │               │   └── IntentDateExtensions.kt
│           │               ├── events/
│           │               │   └── database/
│           │               │       └── EventColumns.java
│           │               └── wear/
│           │                   └── SharedConstants.java
│           └── res/
│               ├── values/
│               │   ├── colors.xml
│               │   ├── strings-non-translatable.xml
│               │   └── strings.xml
│               ├── values-cs/
│               │   └── strings.xml
│               ├── values-de/
│               │   └── strings.xml
│               ├── values-el/
│               │   └── strings.xml
│               ├── values-fr/
│               │   └── strings.xml
│               ├── values-it/
│               │   └── strings.xml
│               ├── values-lv/
│               │   └── bools.xml
│               ├── values-lv-rLV/
│               │   └── strings.xml
│               ├── values-nl/
│               │   └── strings.xml
│               └── values-sk/
│                   └── bool.xml
├── android_mobile/
│   ├── .gitignore
│   ├── build.gradle
│   ├── google_services.gradle
│   ├── proguard-rules.pro
│   └── src/
│       ├── debug/
│       │   ├── AndroidManifest.xml
│       │   ├── assets/
│       │   │   └── mock/
│       │   │       └── facebook-calendar.ics
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alexstyl/
│       │   │           └── specialdates/
│       │   │               ├── DebugAppComponent.java
│       │   │               ├── DebugApplication.java
│       │   │               ├── OptionalDependencies.java
│       │   │               ├── debug/
│       │   │               │   ├── DebugActivity.java
│       │   │               │   ├── DebugFragment.kt
│       │   │               │   ├── DebugModule.java
│       │   │               │   └── DebugPreferences.java
│       │   │               ├── donate/
│       │   │               │   └── DebugDonationPreferences.java
│       │   │               └── events/
│       │   │                   └── peopleevents/
│       │   │                       └── DebugPeopleEventsUpdater.java
│       │   └── res/
│       │       └── layout/
│       │           ├── activity_debug.xml
│       │           ├── debug_activity_animations.xml
│       │           └── debug_activity_mixing_colors.xml
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── aidl/
│       │   │   └── com/
│       │   │       └── android/
│       │   │           └── vending/
│       │   │               └── billing/
│       │   │                   └── IInAppBillingService.aidl
│       │   ├── java/
│       │   │   ├── android/
│       │   │   │   └── support/
│       │   │   │       └── v4/
│       │   │   │           └── preference/
│       │   │   │               ├── PreferenceFragment.java
│       │   │   │               └── PreferenceManagerCompat.java
│       │   │   └── com/
│       │   │       └── alexstyl/
│       │   │           ├── android/
│       │   │           │   ├── Bitmap.kt
│       │   │           │   ├── SimpleAnimatorListener.java
│       │   │           │   ├── Uri.kt
│       │   │           │   └── preferences/
│       │   │           │       └── PreferenceKeyId.java
│       │   │           ├── resources/
│       │   │           │   ├── AndroidColors.kt
│       │   │           │   └── ResourcesModule.java
│       │   │           └── specialdates/
│       │   │               ├── AndroidApplicationModule.java
│       │   │               ├── AppComponent.java
│       │   │               ├── DeviceConfigurationUpdatedReceiver.java
│       │   │               ├── EasyPreferences.java
│       │   │               ├── ExternalNavigator.java
│       │   │               ├── FabricTracker.java
│       │   │               ├── JobsCreator.kt
│       │   │               ├── MementoApplication.java
│       │   │               ├── MementoConstants.kt
│       │   │               ├── SQLArgumentBuilder.java
│       │   │               ├── ShareAppIntentCreator.java
│       │   │               ├── addevent/
│       │   │               │   ├── AccountData.java
│       │   │               │   ├── AddEventActivity.kt
│       │   │               │   ├── AddEventModule.kt
│       │   │               │   ├── AndroidAddEventView.kt
│       │   │               │   ├── AndroidContactOperationsExecutor.kt
│       │   │               │   ├── AndroidEventIcons.kt
│       │   │               │   ├── ContactDetailsListener.java
│       │   │               │   ├── ContactEventViewHolder.java
│       │   │               │   ├── ContactEventsAdapter.java
│       │   │               │   ├── ContactSuggestionViewHolder.java
│       │   │               │   ├── DiscardPromptDialog.java
│       │   │               │   ├── EventDatePickerDialogFragment.java
│       │   │               │   ├── ImageIntentFactory.java
│       │   │               │   ├── OnCameraClickedListener.java
│       │   │               │   ├── OperationsFactory.kt
│       │   │               │   ├── ToastDisplayer.kt
│       │   │               │   ├── ToolbarBackgroundAnimator.java
│       │   │               │   ├── ToolbarBackgroundFadingAnimator.java
│       │   │               │   ├── ToolbarBackgroundStubAnimator.java
│       │   │               │   ├── UriFilePathProvider.kt
│       │   │               │   ├── WriteableAccountsProvider.java
│       │   │               │   ├── bottomsheet/
│       │   │               │   │   ├── BottomSheetPicturesDialog.kt
│       │   │               │   │   ├── ClearImageViewHolder.java
│       │   │               │   │   ├── ImagePickerOptionViewHolder.kt
│       │   │               │   │   ├── ImagePickerOptionsAdapter.java
│       │   │               │   │   ├── IntentResolver.kt
│       │   │               │   │   ├── PhotoPickerViewModel.kt
│       │   │               │   │   └── PhotoPickerViewModelFactory.kt
│       │   │               │   └── ui/
│       │   │               │       ├── AvatarPickerView.java
│       │   │               │       ├── ContactSuggestionView.java
│       │   │               │       ├── ContactsAdapter.java
│       │   │               │       ├── DeviceContactsFilter.kt
│       │   │               │       └── EventDatePicker.java
│       │   │               ├── analytics/
│       │   │               │   ├── Action.java
│       │   │               │   ├── ActionWithParameters.java
│       │   │               │   ├── AnalyticsModule.kt
│       │   │               │   ├── CompositeAnalytics.kt
│       │   │               │   ├── FirebaseAnalyticsImpl.kt
│       │   │               │   └── MixPanel.kt
│       │   │               ├── contact/
│       │   │               │   ├── AndroidContactFactory.kt
│       │   │               │   ├── AndroidContactsProviderSource.kt
│       │   │               │   ├── AndroidContactsQuery.java
│       │   │               │   ├── ContactIntentExtractor.kt
│       │   │               │   ├── ContactsModule.kt
│       │   │               │   ├── EmptyContactSource.kt
│       │   │               │   └── FacebookContactsSource.kt
│       │   │               ├── dailyreminder/
│       │   │               │   ├── AlarmManagerCompat.java
│       │   │               │   ├── AndroidDailyReminderNotifier.kt
│       │   │               │   ├── AndroidDailyReminderScheduler.kt
│       │   │               │   ├── AndroidDailyReminderViewModelFactory.kt
│       │   │               │   ├── DailyReminderDebugPreferences.java
│       │   │               │   ├── DailyReminderJob.kt
│       │   │               │   ├── DailyReminderModule.java
│       │   │               │   ├── DailyReminderOreoChannelCreator.kt
│       │   │               │   ├── DailyReminderPreferences.kt
│       │   │               │   ├── NoActions.kt
│       │   │               │   ├── NotificationConstants.kt
│       │   │               │   ├── NotificationDailyReminderView.kt
│       │   │               │   └── actions/
│       │   │               │       ├── AndroidContactActionsView.kt
│       │   │               │       ├── ContactActionsModule.java
│       │   │               │       ├── ContactActionsPresenter.kt
│       │   │               │       ├── ContactActionsView.kt
│       │   │               │       └── PersonActionsActivity.kt
│       │   │               ├── date/
│       │   │               │   ├── AndroidDateLabelCreator.kt
│       │   │               │   └── DateModule.java
│       │   │               ├── donate/
│       │   │               │   ├── AndroidDonation.java
│       │   │               │   ├── AndroidDonationConstants.java
│       │   │               │   ├── AndroidDonationService.java
│       │   │               │   ├── DonateActivity.java
│       │   │               │   ├── DonateModule.java
│       │   │               │   ├── DonatePresenter.java
│       │   │               │   ├── DonationPreferences.java
│       │   │               │   ├── SimpleOnSeekBarChangeListener.java
│       │   │               │   └── util/
│       │   │               │       ├── IabBroadcastReceiver.java
│       │   │               │       ├── IabException.java
│       │   │               │       ├── IabHelper.java
│       │   │               │       ├── IabResult.java
│       │   │               │       ├── Inventory.java
│       │   │               │       ├── Purchase.java
│       │   │               │       ├── Security.java
│       │   │               │       └── SkuDetails.java
│       │   │               ├── events/
│       │   │               │   ├── ContactsObserver.java
│       │   │               │   ├── PreferenceChangedEventsUpdateTrigger.java
│       │   │               │   ├── bankholidays/
│       │   │               │   │   ├── BankHolidaysModule.java
│       │   │               │   │   └── BankHolidaysPreferences.java
│       │   │               │   ├── database/
│       │   │               │   │   ├── ContactColumns.java
│       │   │               │   │   ├── DatabaseContract.java
│       │   │               │   │   └── EventSQLiteOpenHelper.kt
│       │   │               │   ├── namedays/
│       │   │               │   │   ├── NamedayModule.java
│       │   │               │   │   ├── NamedayPreferences.java
│       │   │               │   │   ├── activity/
│       │   │               │   │   │   ├── AndroidNamedaysOnADayView.kt
│       │   │               │   │   │   ├── CelebratingContactViewHolder.kt
│       │   │               │   │   │   ├── NameViewHolder.kt
│       │   │               │   │   │   ├── NamedayScreenViewHolder.kt
│       │   │               │   │   │   ├── NamedaysInADayModule.java
│       │   │               │   │   │   ├── NamedaysOnADayActivity.kt
│       │   │               │   │   │   ├── NamedaysOnADayNavigator.kt
│       │   │               │   │   │   ├── NamedaysScreenAdapter.java
│       │   │               │   │   │   ├── NamedaysScreenViewHolderFactory.kt
│       │   │               │   │   │   └── NamedaysViewModelDiff.java
│       │   │               │   │   └── calendar/
│       │   │               │   │       └── resource/
│       │   │               │   │           └── AndroidJSONResourceLoader.kt
│       │   │               │   └── peopleevents/
│       │   │               │       ├── AndroidPeopleEventsPersister.kt
│       │   │               │       ├── AndroidPeopleEventsProvider.kt
│       │   │               │       ├── AndroidPeopleEventsRepository.kt
│       │   │               │       ├── AndroidUpcomingEventSettings.kt
│       │   │               │       ├── ContactEventsMarshaller.java
│       │   │               │       ├── CustomEventProvider.kt
│       │   │               │       └── PeopleEventsModule.kt
│       │   │               ├── facebook/
│       │   │               │   ├── AndroidFacebookPreferences.java
│       │   │               │   ├── FacebookLogoutService.java
│       │   │               │   ├── FacebookModule.java
│       │   │               │   ├── FacebookProfileActivity.java
│       │   │               │   ├── FacebookProfilePresenter.java
│       │   │               │   ├── FacebookProfileView.java
│       │   │               │   ├── OnFacebookLogOutCallback.java
│       │   │               │   ├── ScreenOrientationLock.java
│       │   │               │   ├── friendimport/
│       │   │               │   │   ├── CalendarURLCreator.java
│       │   │               │   │   ├── FacebookFriendsIntentService.java
│       │   │               │   │   ├── FacebookFriendsPersister.java
│       │   │               │   │   └── FacebookFriendsScheduler.java
│       │   │               │   └── login/
│       │   │               │       ├── CookieResetter.java
│       │   │               │       ├── CredentialsExtractor.java
│       │   │               │       ├── FBImportClient.java
│       │   │               │       ├── FacebookImportView.java
│       │   │               │       ├── FacebookLogInActivity.java
│       │   │               │       ├── FacebookLogInCallback.java
│       │   │               │       ├── FacebookLogInException.java
│       │   │               │       ├── FacebookWebView.java
│       │   │               │       └── UserCredentialsExtractorTask.java
│       │   │               ├── home/
│       │   │               │   ├── DonationBannerView.kt
│       │   │               │   ├── HomeActivity.java
│       │   │               │   ├── HomeNavigator.kt
│       │   │               │   ├── HomeViewPagerAdapter.java
│       │   │               │   ├── OnCloseBannerListener.kt
│       │   │               │   └── SearchTransitioner.java
│       │   │               ├── images/
│       │   │               │   ├── AndroidContactsImageDownloader.kt
│       │   │               │   ├── CrossFadeBitmapDisplayer.java
│       │   │               │   ├── CrossFadeCircleBitmapDisplayer.java
│       │   │               │   ├── DecodedImage.java
│       │   │               │   ├── ImageDecoder.kt
│       │   │               │   ├── ImageLoadedConsumer.java
│       │   │               │   ├── ImageLoader.kt
│       │   │               │   ├── ImageModule.java
│       │   │               │   ├── NutraBaseImageDecoder.java
│       │   │               │   ├── SimpleImageLoadedConsumer.java
│       │   │               │   └── UILImageLoader.java
│       │   │               ├── people/
│       │   │               │   ├── ImportFromFacebookViewHolder.kt
│       │   │               │   ├── NoContactViewHolder.kt
│       │   │               │   ├── PeopleAdapter.java
│       │   │               │   ├── PeopleDiffCallback.kt
│       │   │               │   ├── PeopleFragment.java
│       │   │               │   ├── PeopleItemDecorator.java
│       │   │               │   ├── PeopleModule.java
│       │   │               │   └── PeopleViewHolder.java
│       │   │               ├── permissions/
│       │   │               │   ├── AndroidPermissions.kt
│       │   │               │   └── ContactPermissionActivity.java
│       │   │               ├── person/
│       │   │               │   ├── AndroidContactActions.kt
│       │   │               │   ├── AndroidContactActionsProvider.kt
│       │   │               │   ├── AndroidPersonView.kt
│       │   │               │   ├── BottomSheetIntentAdapter.java
│       │   │               │   ├── BottomSheetIntentDialog.kt
│       │   │               │   ├── BottomSheetIntentListener.java
│       │   │               │   ├── CallMethod.kt
│       │   │               │   ├── CallViewHolder.java
│       │   │               │   ├── CompositeContactActionsProvider.kt
│       │   │               │   ├── ContactAction.kt
│       │   │               │   ├── ContactActionViewModel.kt
│       │   │               │   ├── ContactActionsAdapter.java
│       │   │               │   ├── ContactActionsPageViewHolder.kt
│       │   │               │   ├── ContactActionsProvider.kt
│       │   │               │   ├── ContactItemsAdapter.java
│       │   │               │   ├── EventAdapter.java
│       │   │               │   ├── EventPageViewHolder.kt
│       │   │               │   ├── EventPressedListener.java
│       │   │               │   ├── EventViewHolder.java
│       │   │               │   ├── FacebookContactActionsProvider.kt
│       │   │               │   ├── IntentOptionViewHolder.java
│       │   │               │   ├── IntentOptionViewModel.java
│       │   │               │   ├── PageViewHolder.kt
│       │   │               │   ├── PersonActivity.kt
│       │   │               │   ├── PersonAvailableActionsViewModel.kt
│       │   │               │   ├── PersonDetailsNavigator.kt
│       │   │               │   ├── PersonDetailsViewModelFactory.kt
│       │   │               │   ├── PersonInfoViewModel.kt
│       │   │               │   ├── PersonModule.kt
│       │   │               │   ├── PersonPresenter.kt
│       │   │               │   └── PersonView.kt
│       │   │               ├── receiver/
│       │   │               │   └── BootCompleteReceiver.java
│       │   │               ├── search/
│       │   │               │   ├── BackKeyEditText.java
│       │   │               │   ├── CaseInsensitiveComparator.java
│       │   │               │   ├── ContactEventViewModel.kt
│       │   │               │   ├── ContactEventViewModelFactory.kt
│       │   │               │   ├── DelayedTextWatcher.java
│       │   │               │   ├── MoreViewHolder.java
│       │   │               │   ├── NameSuggestionsAdapter.java
│       │   │               │   ├── NamedayCard.java
│       │   │               │   ├── NamedaysLoader.java
│       │   │               │   ├── NamesFilter.java
│       │   │               │   ├── NoResultsViewHolder.java
│       │   │               │   ├── OnBackKeyPressedListener.java
│       │   │               │   ├── SearchActivity.java
│       │   │               │   ├── SearchBar.java
│       │   │               │   ├── SearchHintCreator.java
│       │   │               │   ├── SearchLoader.java
│       │   │               │   ├── SearchModule.java
│       │   │               │   ├── SearchNavigator.kt
│       │   │               │   ├── SearchResultAdapter.java
│       │   │               │   ├── SearchResultContactViewHolder.java
│       │   │               │   ├── SearchResultNamedayViewHolder.java
│       │   │               │   ├── SearchResults.java
│       │   │               │   ├── SuggstedNameViewHolder.java
│       │   │               │   └── ToggleVisibilityOnFocus.java
│       │   │               ├── settings/
│       │   │               │   ├── ClickableRingtonePreference.java
│       │   │               │   ├── DailyReminderActivity.java
│       │   │               │   ├── DailyReminderFragment.kt
│       │   │               │   ├── DailyReminderNavigator.kt
│       │   │               │   ├── MementoThemeNameComparator.java
│       │   │               │   ├── NamedayListPreference.java
│       │   │               │   ├── OnlyGreekSupportedDialog.java
│       │   │               │   ├── PreferenceNotFoundException.kt
│       │   │               │   ├── ThemeSelectAdapter.java
│       │   │               │   ├── ThemeSelectDialog.java
│       │   │               │   ├── ThemeViewHolder.java
│       │   │               │   └── UserSettingsFragment.java
│       │   │               ├── support/
│       │   │               │   ├── AskForSupport.kt
│       │   │               │   ├── CallForRatingPreferences.java
│       │   │               │   ├── Emoticon.java
│       │   │               │   ├── OnSupportCardClickListener.java
│       │   │               │   └── RateDialog.java
│       │   │               ├── theming/
│       │   │               │   ├── AttributeExtractor.java
│       │   │               │   ├── DrawableTinter.java
│       │   │               │   ├── MementoTheme.kt
│       │   │               │   ├── ThemeMonitor.java
│       │   │               │   ├── Themer.kt
│       │   │               │   ├── ThemingModule.java
│       │   │               │   └── ThemingPreferences.kt
│       │   │               ├── transition/
│       │   │               │   ├── FadeInTransition.java
│       │   │               │   ├── FadeOutTransition.java
│       │   │               │   └── SimpleTransitionListener.java
│       │   │               ├── ui/
│       │   │               │   ├── DummyHideStatusBarListener.java
│       │   │               │   ├── HorizontalDivider.java
│       │   │               │   ├── LolipopHideStatusBarListener.java
│       │   │               │   ├── MementoCardView.java
│       │   │               │   ├── ViewFader.java
│       │   │               │   ├── base/
│       │   │               │   │   ├── MementoActivity.kt
│       │   │               │   │   ├── MementoDialog.java
│       │   │               │   │   ├── MementoFragment.java
│       │   │               │   │   ├── MementoPreferenceActivity.kt
│       │   │               │   │   ├── MementoPreferenceFragment.kt
│       │   │               │   │   └── ThemedMementoActivity.kt
│       │   │               │   ├── dialog/
│       │   │               │   │   └── ProgressFragmentDialog.java
│       │   │               │   ├── loader/
│       │   │               │   │   └── SimpleAsyncTaskLoader.java
│       │   │               │   └── widget/
│       │   │               │       ├── AndroidLetterPainter.java
│       │   │               │       ├── AvatarLayout.java
│       │   │               │       ├── ColorImageView.java
│       │   │               │       ├── ForegroundLinearLayout.java
│       │   │               │       ├── LogoView.java
│       │   │               │       ├── MementoToolbar.java
│       │   │               │       ├── SpacesItemDecoration.java
│       │   │               │       └── ViewModule.java
│       │   │               ├── upcoming/
│       │   │               │   ├── AndroidUpcomingDateStringCreator.kt
│       │   │               │   ├── AndroidUpcomingMVPView.kt
│       │   │               │   ├── BankholidayViewHolder.kt
│       │   │               │   ├── ContactEventViewHolder.kt
│       │   │               │   ├── DateHeaderViewHolder.kt
│       │   │               │   ├── DatePickerDialogFragment.java
│       │   │               │   ├── NamedaysViewHolder.kt
│       │   │               │   ├── PeopleEventsRefreshJob.kt
│       │   │               │   ├── UpcomingEventsAdapter.java
│       │   │               │   ├── UpcomingEventsDecorator.java
│       │   │               │   ├── UpcomingEventsDiffCallback.kt
│       │   │               │   ├── UpcomingEventsFragment.kt
│       │   │               │   ├── UpcomingEventsModule.kt
│       │   │               │   ├── UpcomingRowViewHolder.kt
│       │   │               │   ├── UpcomingViewHolderFactory.kt
│       │   │               │   ├── view/
│       │   │               │   │   ├── ExposedSearchToolbar.java
│       │   │               │   │   └── OnUpcomingEventClickedListener.java
│       │   │               │   └── widget/
│       │   │               │       ├── RecentUpcomingPeopleEventsModule.kt
│       │   │               │       ├── list/
│       │   │               │       │   ├── BankHolidayBinder.kt
│       │   │               │       │   ├── CircularAvatarFactory.java
│       │   │               │       │   ├── ContactEventBinder.kt
│       │   │               │       │   ├── DateHeaderBinder.kt
│       │   │               │       │   ├── NamedaysBinder.kt
│       │   │               │       │   ├── UpcomingEventViewBinder.java
│       │   │               │       │   ├── UpcomingEventsRemoteViewService.java
│       │   │               │       │   ├── UpcomingEventsScrollingAppWidgetProvider.java
│       │   │               │       │   ├── UpcomingEventsScrollingWidgetView.java
│       │   │               │       │   ├── UpcomingEventsViewsFactory.java
│       │   │               │       │   └── WidgetRouterActivity.kt
│       │   │               │       └── today/
│       │   │               │           ├── AndroidRecentPeopleEventsView.kt
│       │   │               │           ├── LuminanceAnalyzer.kt
│       │   │               │           ├── SimpleOnSeekBarChangeListener.java
│       │   │               │           ├── TodayAppWidgetProvider.kt
│       │   │               │           ├── TodayUpcomingEventsView.java
│       │   │               │           ├── TransparencyColorCalculator.java
│       │   │               │           ├── UpcomingWidgetConfigurationPanel.java
│       │   │               │           ├── UpcomingWidgetConfigureActivity.kt
│       │   │               │           ├── UpcomingWidgetPreferences.kt
│       │   │               │           ├── UpcomingWidgetPreviewLayout.java
│       │   │               │           ├── UserOptions.kt
│       │   │               │           ├── WidgetColorCalculator.java
│       │   │               │           ├── WidgetImageLoader.java
│       │   │               │           └── WidgetVariant.java
│       │   │               ├── util/
│       │   │               │   ├── GreekNameUtils.java
│       │   │               │   └── NaturalLanguageUtils.java
│       │   │               └── wear/
│       │   │                   ├── WearSyncService.java
│       │   │                   └── WearSyncUpcomingEventsView.java
│       │   └── res/
│       │       ├── anim/
│       │       │   ├── bounce.xml
│       │       │   ├── grow_from_bottom.xml
│       │       │   ├── grow_from_top.xml
│       │       │   ├── heartbeat.xml
│       │       │   ├── slide_in_below.xml
│       │       │   ├── slide_in_from_above.xml
│       │       │   ├── slide_in_from_below.xml
│       │       │   ├── slide_out_above.xml
│       │       │   ├── slide_out_from_above.xml
│       │       │   ├── slide_out_from_below.xml
│       │       │   ├── slide_up_left.xml
│       │       │   ├── slide_up_right.xml
│       │       │   └── stay.xml
│       │       ├── drawable/
│       │       │   ├── ab_background_textured_dayslight.xml
│       │       │   ├── background_daymarker.xml
│       │       │   ├── background_suggestions.xml
│       │       │   ├── black_to_transparent_gradient_facing_down.xml
│       │       │   ├── btn_cab_done_dayslight.xml
│       │       │   ├── card_noshadow.xml
│       │       │   ├── dayslight_progress_horizontal_holo_light.xml
│       │       │   ├── dayslight_progress_indeterminate_horizontal_holo_light.xml
│       │       │   ├── divider_top_horizontal.xml
│       │       │   ├── ic_add_contact_42px.xml
│       │       │   ├── ic_add_person_24px.xml
│       │       │   ├── ic_arrow_back_white_24dp.xml
│       │       │   ├── ic_bankholidays.xml
│       │       │   ├── ic_bankholidays_disabled.xml
│       │       │   ├── ic_call.xml
│       │       │   ├── ic_camera.xml
│       │       │   ├── ic_check_white.xml
│       │       │   ├── ic_clear.xml
│       │       │   ├── ic_close_black.xml
│       │       │   ├── ic_close_white.xml
│       │       │   ├── ic_contacts.xml
│       │       │   ├── ic_contacts_disabled.xml
│       │       │   ├── ic_donate.xml
│       │       │   ├── ic_events.xml
│       │       │   ├── ic_f_icon.xml
│       │       │   ├── ic_facebook_import_friends.xml
│       │       │   ├── ic_facebook_like.xml
│       │       │   ├── ic_facebook_logo_traced.xml
│       │       │   ├── ic_facebook_sad.xml
│       │       │   ├── ic_friend_invite.xml
│       │       │   ├── ic_gift.xml
│       │       │   ├── ic_github.xml
│       │       │   ├── ic_licenses.xml
│       │       │   ├── ic_menu.xml
│       │       │   ├── ic_message.xml
│       │       │   ├── ic_namedays.xml
│       │       │   ├── ic_namedays_disabled.xml
│       │       │   ├── ic_person_120.xml
│       │       │   ├── ic_person_24dp.xml
│       │       │   ├── ic_person_96dp.xml
│       │       │   ├── ic_person_light_24dp.xml
│       │       │   ├── ic_search_black_24dp.xml
│       │       │   ├── ic_settings.xml
│       │       │   ├── progress_horizontal_dayslight.xml
│       │       │   ├── selectable_background_dayslight.xml
│       │       │   ├── spinner_background_ab_dayslight.xml
│       │       │   └── tab_indicator_ab_dayslight.xml
│       │       ├── drawable-v21/
│       │       │   ├── blue_ripple.xml
│       │       │   ├── neutral_ripple.xml
│       │       │   ├── neutral_ripple_no_mask.xml
│       │       │   ├── red_ripple.xml
│       │       │   └── red_ripple_no_mask.xml
│       │       ├── layout/
│       │       │   ├── abc_dropdown_title.xml
│       │       │   ├── activity_add_event.xml
│       │       │   ├── activity_call.xml
│       │       │   ├── activity_contact_permission_request.xml
│       │       │   ├── activity_dailyreminder.xml
│       │       │   ├── activity_debug_facebook.xml
│       │       │   ├── activity_donate.xml
│       │       │   ├── activity_facebook_log_in.xml
│       │       │   ├── activity_facebook_profile.xml
│       │       │   ├── activity_home.xml
│       │       │   ├── activity_namedays.xml
│       │       │   ├── activity_person.xml
│       │       │   ├── activity_preferences.xml
│       │       │   ├── activity_rate_dialog.xml
│       │       │   ├── activity_search.xml
│       │       │   ├── activity_try.xml
│       │       │   ├── activity_upcoming_events_widget_configure__first_frame.xml
│       │       │   ├── activity_upcoming_events_widget_configure__start.xml
│       │       │   ├── card_bankholiday.xml
│       │       │   ├── card_compact_support_heart.xml
│       │       │   ├── card_contact_event_full.xml
│       │       │   ├── card_full_support_heart.xml
│       │       │   ├── card_load_more.xml
│       │       │   ├── card_nameday_single.xml
│       │       │   ├── card_namedays.xml
│       │       │   ├── dialog_birthday_picker.xml
│       │       │   ├── dialog_bottom_dialog.xml
│       │       │   ├── dialog_donate.xml
│       │       │   ├── dialog_pick_image.xml
│       │       │   ├── dialog_progress.xml
│       │       │   ├── dialog_rate_prompt.xml
│       │       │   ├── dialog_support.xml
│       │       │   ├── dialog_translate.xml
│       │       │   ├── fragment_first.xml
│       │       │   ├── fragment_people.xml
│       │       │   ├── fragment_upcoming_events.xml
│       │       │   ├── merge_avatar_picker_view.xml
│       │       │   ├── merge_birthday_picker.xml
│       │       │   ├── merge_birthdaypicker_label_view.xml
│       │       │   ├── merge_color_imageview.xml
│       │       │   ├── merge_compact_cardview.xml
│       │       │   ├── merge_contact_permission_required.xml
│       │       │   ├── merge_contact_suggestion_view.xml
│       │       │   ├── merge_daymarker.xml
│       │       │   ├── merge_donation_banner_view.xml
│       │       │   ├── merge_dummy_view.xml
│       │       │   ├── merge_logo_view.xml
│       │       │   ├── merge_memento_toolbar.xml
│       │       │   ├── merge_namedaycardview.xml
│       │       │   ├── merge_no_contact_events.xml
│       │       │   ├── merge_searchbar.xml
│       │       │   ├── merge_upcoming_widget_configure_panel.xml
│       │       │   ├── merge_upcoming_widget_preview.xml
│       │       │   ├── nameday_date.xml
│       │       │   ├── names_suggestions.xml
│       │       │   ├── navigation_header.xml
│       │       │   ├── navigation_new_feature.xml
│       │       │   ├── page_person_items.xml
│       │       │   ├── preference_list_fragment.xml
│       │       │   ├── preference_theme_select.xml
│       │       │   ├── row_account.xml
│       │       │   ├── row_add_event_contact_event.xml
│       │       │   ├── row_add_event_contact_suggestion.xml
│       │       │   ├── row_contact.xml
│       │       │   ├── row_datatype.xml
│       │       │   ├── row_image_option.xml
│       │       │   ├── row_nameday_checkbox.xml
│       │       │   ├── row_nameday_contact.xml
│       │       │   ├── row_nameday_name.xml
│       │       │   ├── row_no_search_results.xml
│       │       │   ├── row_people.xml
│       │       │   ├── row_people_import_from_facebook.xml
│       │       │   ├── row_people_no_contacts.xml
│       │       │   ├── row_person_action.xml
│       │       │   ├── row_person_event.xml
│       │       │   ├── row_search_result_contact_event.xml
│       │       │   ├── row_suggested_name.xml
│       │       │   ├── row_theme_select.xml
│       │       │   ├── row_upcoming_events_bankholiday.xml
│       │       │   ├── row_upcoming_events_contact_event.xml
│       │       │   ├── row_upcoming_events_date_header.xml
│       │       │   ├── row_upcoming_events_nameday.xml
│       │       │   ├── toolbar_search.xml
│       │       │   ├── widget_loading.xml
│       │       │   ├── widget_prompt_permissions.xml
│       │       │   ├── widget_today.xml
│       │       │   ├── widget_today_nocontacts.xml
│       │       │   ├── widget_upcoming_events.xml
│       │       │   ├── widget_upcoming_events_list_contact_event.xml
│       │       │   ├── widget_upcoming_events_list_date.xml
│       │       │   ├── widget_upcoming_events_list_nameday.xml
│       │       │   └── widget_upcomingevents_list_bankholiday.xml
│       │       ├── layout-land/
│       │       │   └── activity_add_event.xml
│       │       ├── menu/
│       │       │   ├── menu_date_details.xml
│       │       │   ├── menu_nameday_view.xml
│       │       │   ├── menu_nav_drawer.xml
│       │       │   ├── menu_person_details.xml
│       │       │   └── menu_search.xml
│       │       ├── raw/
│       │       │   ├── cs_namedays.json
│       │       │   ├── gr_namedays.json
│       │       │   ├── hu_namedays.json
│       │       │   ├── it_namedays.json
│       │       │   ├── lv_ext_namedays.json
│       │       │   ├── lv_namedays.json
│       │       │   ├── ro_namedays.json
│       │       │   ├── ru_namedays.json
│       │       │   └── sk_namedays.json
│       │       ├── transition/
│       │       │   ├── changebounds.xml
│       │       │   ├── explode.xml
│       │       │   └── fade_and_changebounds.xml
│       │       ├── values/
│       │       │   ├── add_event-resources.xml
│       │       │   ├── admob.xml
│       │       │   ├── animations_dimens.xml
│       │       │   ├── arrays.xml
│       │       │   ├── attrs.xml
│       │       │   ├── available_themes.xml
│       │       │   ├── bankholidays_preferences-resources.xml
│       │       │   ├── bithday_picker-styles.xml
│       │       │   ├── bools.xml
│       │       │   ├── bottom_sheet-resources.xml
│       │       │   ├── card-resources.xml
│       │       │   ├── colors.xml
│       │       │   ├── colors_dayslight.xml
│       │       │   ├── colors_support.xml
│       │       │   ├── contact_cards-resources.xml
│       │       │   ├── contact_permission-resources.xml
│       │       │   ├── date_details-resources.xml
│       │       │   ├── debug_keys.xml
│       │       │   ├── dimens-contact_details.xml
│       │       │   ├── dimens.xml
│       │       │   ├── divider-res.xml
│       │       │   ├── donate-resources.xml
│       │       │   ├── drawable.xml
│       │       │   ├── facebook-resources.xml
│       │       │   ├── ids.xml
│       │       │   ├── integers.xml
│       │       │   ├── main_preferences-resources.xml
│       │       │   ├── namedayscreen-resources.xml
│       │       │   ├── no_contacts.xml
│       │       │   ├── nocontacts_styles.xml
│       │       │   ├── people_resources.xml
│       │       │   ├── person-resources.xml
│       │       │   ├── pref_fragment_dimens.xml
│       │       │   ├── pref_fragment_strings.xml
│       │       │   ├── search-resources.xml
│       │       │   ├── string_keys.xml
│       │       │   ├── styles.xml
│       │       │   ├── support-resources.xml
│       │       │   ├── support-strings.xml
│       │       │   ├── themes-strings.xml
│       │       │   ├── themes.xml
│       │       │   ├── today_widget_strings.xml
│       │       │   ├── toolbar-resources.xml
│       │       │   ├── upcoming-resources.xml
│       │       │   ├── upcoming_widget_dimens.xml
│       │       │   ├── upcoming_widget_preview-resources.xml
│       │       │   └── widget_upcoming_events-resources.xml
│       │       ├── values-el/
│       │       │   ├── bool.xml
│       │       │   └── support-strings.xml
│       │       ├── values-it/
│       │       │   └── bool.xml
│       │       ├── values-land/
│       │       │   ├── bools.xml
│       │       │   ├── dimens.xml
│       │       │   ├── integers.xml
│       │       │   └── toolbar-resources.xml
│       │       ├── values-land-v23/
│       │       │   └── themes.xml
│       │       ├── values-large/
│       │       │   └── bool.xml
│       │       ├── values-sw600dp/
│       │       │   ├── bottom_sheet-resources.xml
│       │       │   ├── dimens.xml
│       │       │   ├── integers.xml
│       │       │   └── toolbar-resources.xml
│       │       ├── values-sw720dp/
│       │       │   └── bottom_sheet-resources.xml
│       │       ├── values-sw720dp-land/
│       │       │   └── dimens.xml
│       │       ├── values-v21/
│       │       │   ├── dimens.xml
│       │       │   ├── drawable.xml
│       │       │   └── styles.xml
│       │       ├── xml/
│       │       │   ├── file_paths.xml
│       │       │   ├── preference_dailyreminder.xml
│       │       │   ├── preference_debug.xml
│       │       │   ├── preference_main.xml
│       │       │   ├── widget_info_upcoming_events_list.xml
│       │       │   └── widget_info_upcoming_events_simple.xml
│       │       └── xml-v26/
│       │           └── preference_dailyreminder.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── alexstyl/
│                       ├── resources/
│                       │   └── JavaStrings.kt
│                       └── specialdates/
│                           └── person/
│                               ├── CompositeContactActionsProviderTest.kt
│                               └── PersonInfoViewModelFactoryTest.kt
├── android_wear/
│   ├── .gitignore
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           └── specialdates/
│           │               ├── ContactEventsActivity.java
│           │               ├── ContactEventsProviderService.java
│           │               ├── DataChangedListenerService.java
│           │               └── WearCommunicationService.java
│           └── res/
│               ├── layout/
│               │   └── activity_contact_events.xml
│               └── values/
│                   ├── contact_events-resource.xml
│                   └── strings.xml
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── memento/
│   ├── .gitignore
│   ├── build.gradle
│   ├── config.yml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── android/
│       │       │   └── LruCache.java
│       │       └── com/
│       │           └── alexstyl/
│       │               ├── Logger.kt
│       │               ├── gsc/
│       │               │   ├── Index.java
│       │               │   ├── Sound.kt
│       │               │   ├── SoundComparer.kt
│       │               │   └── SoundRules.kt
│       │               ├── resources/
│       │               │   └── Colors.kt
│       │               └── specialdates/
│       │                   ├── CrashAndErrorTracker.kt
│       │                   ├── EventsUpdateTrigger.java
│       │                   ├── LabelSetter.java
│       │                   ├── Optional.kt
│       │                   ├── SoundWordComparator.java
│       │                   ├── Strings.kt
│       │                   ├── TimeOfDay.kt
│       │                   ├── UpcomingEventsView.kt
│       │                   ├── WordComparator.java
│       │                   ├── addevent/
│       │                   │   ├── AddEventContactEventViewModel.kt
│       │                   │   ├── AddEventView.kt
│       │                   │   ├── AddEventViewModelFactory.kt
│       │                   │   ├── AddEventsPresenter.kt
│       │                   │   ├── ContactOperations.kt
│       │                   │   ├── ContactOperationsExecutor.kt
│       │                   │   ├── ContactsSearch.kt
│       │                   │   ├── EventIcons.kt
│       │                   │   ├── MessageDisplayer.kt
│       │                   │   └── operations/
│       │                   │       ├── ContactOperation.kt
│       │                   │       ├── InsertContact.kt
│       │                   │       ├── InsertEvent.kt
│       │                   │       ├── InsertImage.kt
│       │                   │       └── UpdateContact.kt
│       │                   ├── analytics/
│       │                   │   ├── Analytics.kt
│       │                   │   ├── Screen.kt
│       │                   │   └── Widget.kt
│       │                   ├── contact/
│       │                   │   ├── Contact.kt
│       │                   │   ├── ContactCache.kt
│       │                   │   ├── ContactNotFoundException.kt
│       │                   │   ├── ContactSource.java
│       │                   │   ├── Contacts.kt
│       │                   │   ├── ContactsProvider.kt
│       │                   │   ├── ContactsProviderSource.kt
│       │                   │   ├── DisplayName.kt
│       │                   │   └── Names.kt
│       │                   ├── dailyreminder/
│       │                   │   ├── BankHolidayNotificationViewModel.kt
│       │                   │   ├── ContactActionViewModel.kt
│       │                   │   ├── ContactEventNotificationViewModel.kt
│       │                   │   ├── DailyReminderNotifier.kt
│       │                   │   ├── DailyReminderPresenter.kt
│       │                   │   ├── DailyReminderScheduler.kt
│       │                   │   ├── DailyReminderUserSettings.kt
│       │                   │   ├── DailyReminderView.kt
│       │                   │   ├── DailyReminderViewModel.kt
│       │                   │   ├── DailyReminderViewModelFactory.kt
│       │                   │   ├── NamedaysNotificationViewModel.kt
│       │                   │   ├── NotificationViewModel.kt
│       │                   │   └── SummaryNotificationViewModel.kt
│       │                   ├── date/
│       │                   │   ├── ContactEvent.kt
│       │                   │   ├── Date.kt
│       │                   │   ├── DateAndTime.kt
│       │                   │   ├── DateComparator.java
│       │                   │   ├── DateLabelCreator.kt
│       │                   │   ├── DateParseException.kt
│       │                   │   ├── DateParser.kt
│       │                   │   ├── Dates.kt
│       │                   │   ├── MonthInt.java
│       │                   │   ├── Months.java
│       │                   │   └── TimePeriod.kt
│       │                   ├── donate/
│       │                   │   ├── DonateMonitor.kt
│       │                   │   ├── Donation.java
│       │                   │   ├── DonationCallbacks.java
│       │                   │   └── DonationService.java
│       │                   ├── events/
│       │                   │   ├── Event.kt
│       │                   │   ├── SettingsPresenter.kt
│       │                   │   ├── bankholidays/
│       │                   │   │   ├── BankHoliday.kt
│       │                   │   │   ├── BankHolidayProvider.kt
│       │                   │   │   ├── BankHolidaysUserSettings.kt
│       │                   │   │   └── GreekBankHolidaysCalculator.java
│       │                   │   ├── database/
│       │                   │   │   └── EventTypeId.java
│       │                   │   ├── namedays/
│       │                   │   │   ├── NameCelebrations.kt
│       │                   │   │   ├── NamedayBundle.java
│       │                   │   │   ├── NamedayDatabaseRefresher.kt
│       │                   │   │   ├── NamedayLocale.java
│       │                   │   │   ├── NamedayUserSettings.java
│       │                   │   │   ├── NamedaysList.java
│       │                   │   │   ├── NamesInADate.kt
│       │                   │   │   ├── activity/
│       │                   │   │   │   ├── CelebratingContactViewModel.kt
│       │                   │   │   │   ├── NamedayScreenViewModel.kt
│       │                   │   │   │   ├── NamedayScreenViewType.java
│       │                   │   │   │   ├── NamedaysInADayPresenter.kt
│       │                   │   │   │   ├── NamedaysOnADayView.kt
│       │                   │   │   │   ├── NamedaysViewModel.kt
│       │                   │   │   │   └── NamedaysViewModelFactory.kt
│       │                   │   │   └── calendar/
│       │                   │   │       ├── EasternNameday.java
│       │                   │   │       ├── EasternNamedaysExtractor.java
│       │                   │   │       ├── NamedayCalendar.java
│       │                   │   │       ├── OrthodoxEasterCalculator.java
│       │                   │   │       └── resource/
│       │                   │   │           ├── CharacterNode.java
│       │                   │   │           ├── GreekNamedays.java
│       │                   │   │           ├── GreekSpecialNamedays.java
│       │                   │   │           ├── NamedayCalendarProvider.java
│       │                   │   │           ├── NamedayJSON.java
│       │                   │   │           ├── NamedayJSONParser.java
│       │                   │   │           ├── NamedayJSONProvider.java
│       │                   │   │           ├── NamedayJSONResourceLoader.kt
│       │                   │   │           ├── Node.java
│       │                   │   │           ├── RomanianEasterSpecialCalculator.kt
│       │                   │   │           ├── RomanianNamedays.kt
│       │                   │   │           ├── RomanianSpecialNamedays.java
│       │                   │   │           ├── SoundNode.kt
│       │                   │   │           ├── SpecialGreekNamedaysCalculator.java
│       │                   │   │           ├── SpecialNamedays.java
│       │                   │   │           └── SpecialNamedaysHandlerFactory.java
│       │                   │   └── peopleevents/
│       │                   │       ├── ClosestEventsComparator.java
│       │                   │       ├── CompositePeopleEventsProvider.kt
│       │                   │       ├── ContactEventsOnADate.kt
│       │                   │       ├── CustomEventType.kt
│       │                   │       ├── EventType.kt
│       │                   │       ├── NoEventsFoundException.kt
│       │                   │       ├── PeopleDynamicNamedaysProvider.kt
│       │                   │       ├── PeopleEventsPersister.kt
│       │                   │       ├── PeopleEventsProvider.kt
│       │                   │       ├── PeopleEventsRepository.kt
│       │                   │       ├── PeopleEventsStaticEventsRefresher.kt
│       │                   │       ├── PeopleEventsUpdater.kt
│       │                   │       ├── ShortDateLabelCreator.java
│       │                   │       ├── StandardEventType.java
│       │                   │       ├── UpcomingEventsSettings.kt
│       │                   │       └── UpcomingEventsViewRefresher.kt
│       │                   ├── facebook/
│       │                   │   ├── FacebookImagePath.kt
│       │                   │   ├── FacebookUserSettings.kt
│       │                   │   ├── UserCredentials.java
│       │                   │   └── friendimport/
│       │                   │       ├── CalendarFetcherException.java
│       │                   │       ├── CalendarLoader.java
│       │                   │       ├── ContactEventSerialiser.java
│       │                   │       ├── FacebookBirthdaysProvider.java
│       │                   │       ├── FacebookCalendarLoader.java
│       │                   │       ├── FacebookContactFactory.java
│       │                   │       └── InvalidFacebookContactException.java
│       │                   ├── people/
│       │                   │   ├── FacebookImportViewModel.kt
│       │                   │   ├── NoContactsViewModel.kt
│       │                   │   ├── PeoplePresenter.kt
│       │                   │   ├── PeopleRowViewModel.kt
│       │                   │   ├── PeopleView.java
│       │                   │   ├── PeopleViewHolderListener.java
│       │                   │   ├── PeopleViewModelFactory.kt
│       │                   │   └── PersonViewModel.kt
│       │                   ├── permissions/
│       │                   │   └── MementoPermissions.kt
│       │                   ├── person/
│       │                   │   ├── AgeCalculator.kt
│       │                   │   ├── ContactActions.kt
│       │                   │   ├── ContactEventViewModel.kt
│       │                   │   ├── EventViewModelFactory.kt
│       │                   │   ├── PersonDetailItem.kt
│       │                   │   └── StarSign.kt
│       │                   ├── search/
│       │                   │   ├── ContactEventLabelCreator.kt
│       │                   │   ├── ContactWithEvents.java
│       │                   │   ├── NameFilter.java
│       │                   │   ├── NameMatcher.kt
│       │                   │   └── PeopleEventsSearch.java
│       │                   ├── ui/
│       │                   │   └── widget/
│       │                   │       └── LetterPainter.kt
│       │                   ├── upcoming/
│       │                   │   ├── AnnualDate.kt
│       │                   │   ├── BankHolidayViewModel.kt
│       │                   │   ├── CompositeUpcomingEventsProvider.kt
│       │                   │   ├── ContactViewModelFactory.kt
│       │                   │   ├── DateHeaderViewModel.kt
│       │                   │   ├── MonthLabels.java
│       │                   │   ├── UpcomingContactEventViewModel.kt
│       │                   │   ├── UpcomingDateStringCreator.kt
│       │                   │   ├── UpcomingEventRowViewModelFactory.kt
│       │                   │   ├── UpcomingEventsAdRules.kt
│       │                   │   ├── UpcomingEventsFreeUserAdRules.kt
│       │                   │   ├── UpcomingEventsPresenter.kt
│       │                   │   ├── UpcomingEventsProvider.kt
│       │                   │   ├── UpcomingListMVPView.kt
│       │                   │   ├── UpcomingNamedaysViewModel.kt
│       │                   │   ├── UpcomingRowViewModel.kt
│       │                   │   ├── UpcomingRowViewModelsBuilder.kt
│       │                   │   ├── UpcomingRowViewType.java
│       │                   │   └── widget/
│       │                   │       ├── list/
│       │                   │       │   └── NoAds.kt
│       │                   │       └── today/
│       │                   │           ├── PercentToValueConverter.java
│       │                   │           ├── RecentPeopleEventsPresenter.kt
│       │                   │           └── RecentPeopleEventsView.kt
│       │                   └── util/
│       │                       └── HashMapList.kt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alexstyl/
│           │           ├── TestColors.kt
│           │           ├── gsc/
│           │           │   ├── SoundComparerTest.kt
│           │           │   └── SoundTest.kt
│           │           └── specialdates/
│           │               ├── JavaStrings.kt
│           │               ├── NamesTest.kt
│           │               ├── OptionalTest.java
│           │               ├── TestContactEventsBuilder.kt
│           │               ├── TestDateLabelCreator.kt
│           │               ├── addevent/
│           │               │   ├── AddEventsPresenterTest.kt
│           │               │   ├── JavaEventIcons.kt
│           │               │   ├── JavaMessageDisplayer.kt
│           │               │   └── ui/
│           │               │       ├── ContactSourcesStubs.kt
│           │               │       └── ContactsSearchTest.kt
│           │               ├── contact/
│           │               │   ├── ContactCacheTest.java
│           │               │   ├── ContactFixture.java
│           │               │   ├── ContactTest.java
│           │               │   └── DisplayNameTest.java
│           │               ├── date/
│           │               │   └── ContactEventTest.java
│           │               ├── events/
│           │               │   ├── ContactActionTest.java
│           │               │   ├── DateTest.java
│           │               │   ├── ShortDateLabelCreatorTest.java
│           │               │   ├── StandardEventTypeTest.java
│           │               │   ├── bankholidays/
│           │               │   │   └── BankHolidayProviderTest.java
│           │               │   ├── namedays/
│           │               │   │   ├── NamedaysListTest.java
│           │               │   │   ├── OrthodoxEasterCalculatorTest.java
│           │               │   │   ├── RomanianNamedaysTest.java
│           │               │   │   ├── activity/
│           │               │   │   │   └── NamedaysInADayPresenterTest.kt
│           │               │   │   └── calendar/
│           │               │   │       └── resource/
│           │               │   │           ├── CharacterNodeTest.java
│           │               │   │           ├── GreeklishParserTest.java
│           │               │   │           ├── NamedayJSONParserTest.java
│           │               │   │           ├── RomanianEasterSpecialCalculatorTest.kt
│           │               │   │           ├── SoundNodeTest.kt
│           │               │   │           ├── TestJSONResourceLoader.kt
│           │               │   │           └── TestNamedayCalendarBuilder.java
│           │               │   └── peopleevents/
│           │               │       ├── ClosestEventsComparatorTest.java
│           │               │       ├── CompositePeopleEventsProviderTest.kt
│           │               │       ├── ContactEventsOnADateTest.kt
│           │               │       └── PeopleDynamicNamedaysProviderTest.kt
│           │               ├── facebook/
│           │               │   └── friendimport/
│           │               │       ├── FacebookBirthdaysProviderTest.java
│           │               │       ├── FacebookContactFactoryTest.java
│           │               │       ├── MockCalendarLoader.java
│           │               │       └── SystemLogTracker.kt
│           │               ├── person/
│           │               │   ├── AgeCalculatorTest.kt
│           │               │   └── StarSignTest.kt
│           │               ├── search/
│           │               │   ├── ContactEventTestBuilder.java
│           │               │   ├── EventLabelCreatorTest.java
│           │               │   ├── NameFilterTest.java
│           │               │   ├── NameMatcherTest.java
│           │               │   └── PeopleEventsSearchTest.kt
│           │               ├── timeofday/
│           │               │   └── TimeOfDayTest.java
│           │               ├── upcoming/
│           │               │   ├── MonthLabelsTest.java
│           │               │   ├── TimePeriodTest.java
│           │               │   ├── UpcomingEventsPresenterTest.kt
│           │               │   ├── UpcomingRowViewModelsBuilderTest.kt
│           │               │   └── widget/
│           │               │       └── today/
│           │               │           └── PercentToValueConverterTest.java
│           │               └── util/
│           │                   ├── DateParserTest.kt
│           │                   └── HashMapListTest.java
│           └── resources/
│               └── gr_namedays.json
├── secret.gradle
├── settings.gradle
├── team-props/
│   ├── android-code-quality.gradle
│   ├── static-analysis/
│   │   ├── checkstyle-modules.xml
│   │   ├── checkstyle-suppressions.xml
│   │   ├── detekt-config.yml
│   │   ├── findbugs-excludes.xml
│   │   ├── lint-config.xml
│   │   └── pmd-rules.xml
│   └── static-analysis.gradle
└── versions.gradle
Download .txt
SYMBOL INDEX (1710 symbols across 297 files)

FILE: android_common/src/main/java/com/alexstyl/android/preferences/widget/TimePreference.java
  class TimePreference (line 15) | public class TimePreference extends DialogPreference {
    method TimePreference (line 21) | public TimePreference(Context ctx, AttributeSet attrs) {
    method onCreateDialogView (line 28) | @Override
    method onBindDialogView (line 35) | @Override
    method onDialogClosed (line 43) | @Override
    method onGetDefaultValue (line 61) | @Override
    method onSetInitialValue (line 66) | @Override
    method getHour (line 85) | private static int getHour(String time) {
    method getMinute (line 90) | private static int getMinute(String time) {

FILE: android_common/src/main/java/com/alexstyl/resources/AndroidDimensionResources.java
  class AndroidDimensionResources (line 6) | final class AndroidDimensionResources implements DimensionResources {
    method AndroidDimensionResources (line 10) | AndroidDimensionResources(Resources resources) {
    method getPixelSize (line 14) | @Override

FILE: android_common/src/main/java/com/alexstyl/resources/DimensionResources.java
  type DimensionResources (line 6) | public interface DimensionResources {
    method getPixelSize (line 7) | @Px

FILE: android_common/src/main/java/com/alexstyl/specialdates/TextViewLabelSetter.java
  class TextViewLabelSetter (line 5) | public class TextViewLabelSetter implements LabelSetter {
    method TextViewLabelSetter (line 8) | public TextViewLabelSetter(TextView textView) {
    method setLabel (line 12) | @Override

FILE: android_common/src/main/java/com/alexstyl/specialdates/events/database/EventColumns.java
  type EventColumns (line 3) | public interface EventColumns {

FILE: android_common/src/main/java/com/alexstyl/specialdates/wear/SharedConstants.java
  class SharedConstants (line 3) | public final class SharedConstants {
    method SharedConstants (line 9) | private SharedConstants() {

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/DebugAppComponent.java
  type DebugAppComponent (line 20) | @Singleton
    method inject (line 35) | void inject(DebugFragment fragment);

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/DebugApplication.java
  class DebugApplication (line 7) | public class DebugApplication extends MementoApplication {
    method onCreate (line 11) | @Override
    method initialiseDependencies (line 23) | @Override
    method getDebugAppComponent (line 29) | public DebugAppComponent getDebugAppComponent() {

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/OptionalDependencies.java
  class OptionalDependencies (line 9) | class OptionalDependencies {
    method OptionalDependencies (line 13) | OptionalDependencies(Context context) {
    method initialise (line 17) | void initialise() {

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugActivity.java
  class DebugActivity (line 8) | public class DebugActivity extends ThemedMementoActivity {
    method onCreate (line 9) | @Override

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugModule.java
  class DebugModule (line 13) | @Module
    method debugPeopleEventsUpdater (line 16) | @Provides
    method debugPreferences (line 22) | @Provides

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugPreferences.java
  class DebugPreferences (line 8) | final class DebugPreferences {
    method newInstance (line 12) | public static DebugPreferences newInstance(Context context, @StringRes...
    method DebugPreferences (line 16) | private DebugPreferences(EasyPreferences preferences) {
    method wipe (line 20) | void wipe() {

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/donate/DebugDonationPreferences.java
  class DebugDonationPreferences (line 8) | public final class DebugDonationPreferences {
    method newInstance (line 13) | public static DebugDonationPreferences newInstance(Context context, Do...
    method DebugDonationPreferences (line 17) | private DebugDonationPreferences(EasyPreferences easyPreferences, Dona...
    method reset (line 22) | public void reset() {

FILE: android_mobile/src/debug/java/com/alexstyl/specialdates/events/peopleevents/DebugPeopleEventsUpdater.java
  class DebugPeopleEventsUpdater (line 5) | public final class DebugPeopleEventsUpdater {
    method DebugPeopleEventsUpdater (line 10) | public DebugPeopleEventsUpdater(PeopleEventsStaticEventsRefresher peop...
    method refresh (line 16) | public void refresh() {

FILE: android_mobile/src/main/java/android/support/v4/preference/PreferenceFragment.java
  class PreferenceFragment (line 37) | @SuppressWarnings("all")
    method handleMessage (line 55) | @Override
    method run (line 67) | public void run() {
    type OnPreferenceStartFragmentCallback (line 77) | public interface OnPreferenceStartFragmentCallback {
      method onPreferenceStartFragment (line 84) | boolean onPreferenceStartFragment(PreferenceFragment caller, Prefere...
    method onCreate (line 87) | @Override
    method onViewCreated (line 94) | @Override
    method onCreateView (line 100) | @Override
    method onActivityCreated (line 108) | @Override
    method onStart (line 129) | @Override
    method onStop (line 135) | @Override
    method onDestroyView (line 142) | @Override
    method onDestroy (line 150) | @Override
    method onSaveInstanceState (line 156) | @Override
    method onActivityResult (line 168) | @Override
    method getPreferenceManager (line 179) | public PreferenceManager getPreferenceManager() {
    method setPreferenceScreen (line 188) | public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
    method getPreferenceScreen (line 203) | public PreferenceScreen getPreferenceScreen() {
    method addPreferencesFromIntent (line 212) | public void addPreferencesFromIntent(Intent intent) {
    method addPreferencesFromResource (line 224) | public void addPreferencesFromResource(int preferencesResId) {
    method onPreferenceTreeClick (line 234) | public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
    method findPreference (line 252) | public Preference findPreference(CharSequence key) {
    method requirePreferenceManager (line 259) | private void requirePreferenceManager() {
    method postBindPreferences (line 265) | private void postBindPreferences() {
    method bindPreferences (line 270) | private void bindPreferences() {
    method getListView (line 277) | public ListView getListView() {
    method ensureList (line 282) | private void ensureList() {
    method onKey (line 308) | @Override

FILE: android_mobile/src/main/java/android/support/v4/preference/PreferenceManagerCompat.java
  class PreferenceManagerCompat (line 33) | public class PreferenceManagerCompat {
    type OnPreferenceTreeClickListener (line 42) | interface OnPreferenceTreeClickListener {
      method onPreferenceTreeClick (line 52) | boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Pre...
    method newInstance (line 55) | static PreferenceManager newInstance(Activity activity, int firstReque...
    method setFragment (line 69) | static void setFragment(PreferenceManager manager, PreferenceFragment ...
    method setOnPreferenceTreeClickListener (line 79) | static void setOnPreferenceTreeClickListener(PreferenceManager manager...
    method inflateFromIntent (line 120) | static PreferenceScreen inflateFromIntent(PreferenceManager manager, I...
    method inflateFromResource (line 144) | static PreferenceScreen inflateFromResource(PreferenceManager manager,...
    method getPreferenceScreen (line 161) | static PreferenceScreen getPreferenceScreen(PreferenceManager manager) {
    method dispatchActivityResult (line 175) | static void dispatchActivityResult(PreferenceManager manager, int requ...
    method dispatchActivityStop (line 189) | static void dispatchActivityStop(PreferenceManager manager) {
    method dispatchActivityDestroy (line 203) | static void dispatchActivityDestroy(PreferenceManager manager) {
    method setPreferences (line 219) | static boolean setPreferences(PreferenceManager manager, PreferenceScr...

FILE: android_mobile/src/main/java/com/alexstyl/android/SimpleAnimatorListener.java
  class SimpleAnimatorListener (line 5) | public class SimpleAnimatorListener implements Animator.AnimatorListener {
    method onAnimationStart (line 6) | @Override
    method onAnimationEnd (line 11) | @Override
    method onAnimationCancel (line 16) | @Override
    method onAnimationRepeat (line 21) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/resources/ResourcesModule.java
  class ResourcesModule (line 14) | @Module
    method ResourcesModule (line 21) | public ResourcesModule(Context context, Resources resources) {
    method providesString (line 26) | @Provides
    method providesDimensionResources (line 32) | @Provides
    method providesColorResources (line 38) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/AndroidApplicationModule.java
  class AndroidApplicationModule (line 24) | @Module
    method AndroidApplicationModule (line 29) | AndroidApplicationModule(Context appContext) {
    method appContext (line 33) | @Provides
    method resources (line 38) | @Provides
    method pkgManager (line 43) | @Provides
    method contentResolver (line 48) | @Provides
    method appWidgetManager (line 53) | @Provides
    method sqLiteOpenHelper (line 58) | @Provides
    method permissionChecker (line 64) | @Provides
    method tracker (line 69) | @Provides
    method jobManager (line 74) | @Provides
    method notificationManager (line 80) | @Provides
    method logger (line 85) | @Provides
    method alarmManagerCompat (line 90) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/AppComponent.java
  type AppComponent (line 60) | @Singleton
    method inject (line 87) | void inject(MementoApplication application);
    method inject (line 89) | void inject(HomeActivity activity);
    method inject (line 91) | void inject(UpcomingEventsFragment fragment);
    method inject (line 93) | void inject(AddEventActivity activity);
    method inject (line 95) | void inject(SearchActivity activity);
    method inject (line 97) | void inject(FacebookProfileActivity activity);
    method inject (line 99) | void inject(FacebookLogInActivity activity);
    method inject (line 101) | void inject(RateDialog activity);
    method inject (line 103) | void inject(UserSettingsFragment fragment);
    method inject (line 105) | void inject(DailyReminderFragment fragment);
    method inject (line 107) | void inject(DonateActivity activity);
    method inject (line 109) | void inject(UpcomingEventsScrollingAppWidgetProvider widgetProvider);
    method inject (line 111) | void inject(TodayAppWidgetProvider widgetProvider);
    method inject (line 113) | void inject(PersonActivity activity);
    method inject (line 115) | void inject(NamedaysOnADayActivity activity);
    method inject (line 117) | void inject(EventDatePickerDialogFragment fragment);
    method inject (line 119) | void inject(UpcomingEventsRemoteViewService viewService);
    method inject (line 121) | void inject(ContactSuggestionView view);
    method inject (line 123) | void inject(NamedayListPreference preference);
    method inject (line 125) | void inject(WearSyncService service);
    method inject (line 127) | void inject(ColorImageView view);
    method inject (line 129) | void inject(UpcomingWidgetConfigureActivity activity);
    method inject (line 131) | void inject(WidgetRouterActivity widgetRouterActivity);
    method inject (line 133) | void inject(DeviceConfigurationUpdatedReceiver receiver);
    method inject (line 135) | void inject(FacebookFriendsIntentService service);
    method inject (line 137) | void inject(ContactPermissionActivity activity);
    method inject (line 139) | void inject(BootCompleteReceiver receiver);
    method inject (line 141) | void inject(PeopleFragment peopleFragment);
    method inject (line 143) | void inject(FacebookWebView peopleFragment);
    method inject (line 145) | void inject(@NotNull ThemedMementoActivity themedMementoActivity);
    method inject (line 147) | void inject(@NotNull PersonActionsActivity personActionsActivity);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/DeviceConfigurationUpdatedReceiver.java
  class DeviceConfigurationUpdatedReceiver (line 15) | public class DeviceConfigurationUpdatedReceiver extends BroadcastReceiver {
    method onReceive (line 20) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/EasyPreferences.java
  class EasyPreferences (line 11) | public final class EasyPreferences {
    method createForDefaultPreferences (line 16) | public static EasyPreferences createForDefaultPreferences(Context cont...
    method createForPrivatePreferences (line 22) | public static EasyPreferences createForPrivatePreferences(Context cont...
    method EasyPreferences (line 28) | private EasyPreferences(SharedPreferences preferences, Resources resou...
    method key (line 33) | private String key(int key) {
    method getBoolean (line 37) | public boolean getBoolean(@StringRes int bool, boolean defValue) {
    method getBoolean (line 41) | public boolean getBoolean(@StringRes int bool, @BoolRes int fallbackDe...
    method setBoolean (line 49) | public void setBoolean(@StringRes int key, boolean value) {
    method setString (line 53) | public void setString(@StringRes int key, String value) {
    method setInteger (line 57) | public void setInteger(@StringRes int key, int value) {
    method getInt (line 61) | public int getInt(@StringRes int key, int defValue) {
    method getLong (line 65) | public long getLong(@StringRes int key, long defValue) {
    method getString (line 69) | public String getString(@StringRes int key, String defValue) {
    method getFloat (line 73) | public float getFloat(@StringRes int key, float defValue) {
    method setLong (line 77) | public void setLong(@StringRes int key, long value) {
    method clear (line 81) | public void clear() {
    method setFloat (line 85) | public void setFloat(@StringRes int key, float value) {
    method setIntegers (line 89) | public void setIntegers(Pair<Integer, Integer> firstPair, Pair<Integer...
    method addOnPreferenceChangedListener (line 98) | public void addOnPreferenceChangedListener(SharedPreferences.OnSharedP...
    method removeOnPreferenceChagnedListener (line 102) | public void removeOnPreferenceChagnedListener(SharedPreferences.OnShar...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ExternalNavigator.java
  class ExternalNavigator (line 23) | public class ExternalNavigator {
    method ExternalNavigator (line 29) | public ExternalNavigator(MementoActivity activity, Analytics analytics...
    method createPlayStoreUri (line 36) | private Uri createPlayStoreUri() {
    method toPlayStore (line 41) | public void toPlayStore() {
    method connectTo (line 51) | public void connectTo(Activity activity) {
    method disconnectTo (line 55) | public void disconnectTo(Activity activity) {
    method toContactDetails (line 59) | public void toContactDetails(Contact contact) {
    method toFacebookContactDetails (line 69) | private void toFacebookContactDetails(Contact contact) {
    method toDeviceContactDetails (line 79) | private void toDeviceContactDetails(Contact contact) {
    method viewContactIntentsFromOtherApps (line 99) | private ArrayList<Intent> viewContactIntentsFromOtherApps(Contact cont...
    method viewContact (line 118) | private Intent viewContact(Contact contact) {
    method toFacebookPage (line 125) | public void toFacebookPage() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/FabricTracker.java
  class FabricTracker (line 14) | public final class FabricTracker implements CrashAndErrorTracker {
    method FabricTracker (line 25) | FabricTracker(Context context) {
    method startTracking (line 29) | @Override
    method track (line 43) | @Override
    method onNamedayLocaleChanged (line 51) | @Override
    method updateLocaleUsed (line 58) | @Override
    method log (line 65) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/MementoApplication.java
  class MementoApplication (line 37) | public class MementoApplication extends MultiDexApplication {
    method onCreate (line 50) | @Override
    method needsToInitialiseEvents (line 91) | private boolean needsToInitialiseEvents() {
    method schedulePeopleEventJob (line 95) | private void schedulePeopleEventJob() {
    method initialiseDependencies (line 104) | protected void initialiseDependencies() {
    method initImageLoader (line 110) | @SuppressWarnings("MagicNumber")
    method getApplicationModule (line 123) | public AppComponent getApplicationModule() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/SQLArgumentBuilder.java
  class SQLArgumentBuilder (line 5) | public final class SQLArgumentBuilder {
    method SQLArgumentBuilder (line 9) | private SQLArgumentBuilder() {
    method dateWithoutYear (line 13) | public static String dateWithoutYear(Date date) {
    method addWithLeadingZeroIfNeeded (line 22) | private static void addWithLeadingZeroIfNeeded(StringBuilder stringBui...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ShareAppIntentCreator.java
  class ShareAppIntentCreator (line 5) | public class ShareAppIntentCreator {
    method ShareAppIntentCreator (line 11) | public ShareAppIntentCreator(Strings strings) {
    method buildIntent (line 15) | public Intent buildIntent() {
    method createShareText (line 22) | private String createShareText() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AccountData.java
  class AccountData (line 5) | public class AccountData {
    method AccountData (line 13) | AccountData(String name, String type, Drawable icon) {
    method getAccountName (line 19) | String getAccountName() {
    method getAccountType (line 23) | String getAccountType() {
    method getIcon (line 27) | Drawable getIcon() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactDetailsListener.java
  type ContactDetailsListener (line 6) | interface ContactDetailsListener {
    method onAddEventClicked (line 7) | void onAddEventClicked(AddEventContactEventViewModel viewModel);
    method onRemoveEventClicked (line 8) | void onRemoveEventClicked(EventType eventType);
    method onContactSelected (line 9) | void onContactSelected(Contact contact);
    method onNameModified (line 10) | void onNameModified(String newName);
    method onContactCleared (line 11) | void onContactCleared();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactEventViewHolder.java
  class ContactEventViewHolder (line 9) | final class ContactEventViewHolder extends RecyclerView.ViewHolder {
    method ContactEventViewHolder (line 14) | ContactEventViewHolder(View view, ImageView icon, TextView datePicker,...
    method bind (line 21) | public void bind(final AddEventContactEventViewModel viewModel, final ...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactEventsAdapter.java
  class ContactEventsAdapter (line 19) | public final class ContactEventsAdapter extends RecyclerView.Adapter<Vie...
    method ContactEventsAdapter (line 28) | ContactEventsAdapter(ContactDetailsListener contactDetailsListener) {
    method getItemViewType (line 32) | @Override
    method onCreateViewHolder (line 37) | @Override
    method onBindViewHolder (line 56) | @Override
    method getItemCount (line 69) | @Override
    method display (line 74) | void display(List<AddEventContactEventViewModel> viewModels) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactSuggestionViewHolder.java
  class ContactSuggestionViewHolder (line 10) | final class ContactSuggestionViewHolder extends RecyclerView.ViewHolder {
    method ContactSuggestionViewHolder (line 14) | ContactSuggestionViewHolder(ContactSuggestionView contactSuggestionVie...
    method bind (line 19) | public void bind(final ContactDetailsListener listener) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/DiscardPromptDialog.java
  class DiscardPromptDialog (line 14) | public class DiscardPromptDialog extends MementoDialog {
    type Listener (line 16) | interface Listener {
      method onDiscardChangesSelected (line 17) | void onDiscardChangesSelected();
    method onAttach (line 22) | @Override
    method onCreateDialog (line 28) | @NonNull

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/EventDatePickerDialogFragment.java
  class EventDatePickerDialogFragment (line 30) | public class EventDatePickerDialogFragment extends MementoDialog {
    method newInstance (line 42) | public static EventDatePickerDialogFragment newInstance(EventType even...
    method onAttach (line 54) | @Override
    method onCreate (line 60) | @Override
    method getDate (line 69) | private Optional<Date> getDate() {
    method parseFrom (line 79) | private Optional<Date> parseFrom(String birthday) {
    method onCreateDialog (line 89) | @Override
    method getEventType (line 112) | public EventType getEventType() {
    type OnEventDatePickedListener (line 117) | public interface OnEventDatePickedListener {
      method onDatePicked (line 118) | void onDatePicked(EventType eventType, Date date);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ImageIntentFactory.java
  class ImageIntentFactory (line 7) | public final class ImageIntentFactory {
    method pickExistingImage (line 12) | public Intent pickExistingImage() {
    method captureNewPhoto (line 22) | public Intent captureNewPhoto(Uri outputUri) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/OnCameraClickedListener.java
  type OnCameraClickedListener (line 3) | interface OnCameraClickedListener {
    method onPictureRetakenRequested (line 4) | void onPictureRetakenRequested();
    method onNewPictureTakenRequested (line 5) | void onNewPictureTakenRequested();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundAnimator.java
  type ToolbarBackgroundAnimator (line 3) | public interface ToolbarBackgroundAnimator {
    method fadeOut (line 4) | void fadeOut();
    method fadeIn (line 6) | void fadeIn();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundFadingAnimator.java
  class ToolbarBackgroundFadingAnimator (line 8) | final class ToolbarBackgroundFadingAnimator implements ToolbarBackground...
    method setupOn (line 14) | static ToolbarBackgroundFadingAnimator setupOn(Toolbar toolbar) {
    method ToolbarBackgroundFadingAnimator (line 22) | private ToolbarBackgroundFadingAnimator(TransitionDrawable transitionD...
    method fadeOut (line 26) | @Override
    method layersFrom (line 34) | private static Drawable[] layersFrom(Drawable from, Drawable to) {
    method fadeIn (line 41) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundStubAnimator.java
  class ToolbarBackgroundStubAnimator (line 3) | final class ToolbarBackgroundStubAnimator implements ToolbarBackgroundAn...
    method fadeOut (line 5) | @Override
    method fadeIn (line 10) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/WriteableAccountsProvider.java
  class WriteableAccountsProvider (line 12) | public final class WriteableAccountsProvider {
    method from (line 19) | public static WriteableAccountsProvider from(Context context) {
    method WriteableAccountsProvider (line 26) | private WriteableAccountsProvider(AccountManager accountManager, Packa...
    method getAvailableAccounts (line 31) | ArrayList<AccountData> getAvailableAccounts() {
    method accountIsWritable (line 46) | private static boolean accountIsWritable(String accountType) {
    method getAuthenticatorDescription (line 50) | private static AuthenticatorDescription getAuthenticatorDescription(St...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/ClearImageViewHolder.java
  class ClearImageViewHolder (line 10) | final class ClearImageViewHolder extends RecyclerView.ViewHolder {
    method ClearImageViewHolder (line 15) | ClearImageViewHolder(View itemView, ImageView imageView, TextView text...
    method bind (line 21) | void bind(final BottomSheetPicturesDialog.Listener listener) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/ImagePickerOptionsAdapter.java
  class ImagePickerOptionsAdapter (line 16) | final class ImagePickerOptionsAdapter extends RecyclerView.Adapter<Recyc...
    method newInstance (line 26) | public static ImagePickerOptionsAdapter newInstance(Listener listener) {
    method createWithClear (line 30) | static ImagePickerOptionsAdapter createWithClear(Listener listener) {
    method ImagePickerOptionsAdapter (line 34) | private ImagePickerOptionsAdapter(Listener listener, boolean includeCl...
    method getItemViewType (line 41) | @Override
    method onCreateViewHolder (line 49) | @Override
    method onBindViewHolder (line 63) | @Override
    method getItemCount (line 76) | @Override
    method updateWith (line 81) | void updateWith(List<PhotoPickerViewModel> viewModels) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/AvatarPickerView.java
  class AvatarPickerView (line 16) | public final class AvatarPickerView extends RelativeLayout implements Im...
    method AvatarPickerView (line 23) | public AvatarPickerView(Context context, AttributeSet attrs) {
    method onFinishInflate (line 27) | @Override
    method getScaleType (line 38) | @Override
    method getWrappedView (line 43) | @Override
    method isCollected (line 48) | @Override
    method setImageDrawable (line 53) | @Override
    method hideGradient (line 64) | private void hideGradient() {
    method setImageBitmap (line 69) | @Override
    method showGradient (line 81) | private void showGradient() {
    method isDisplayingAvatar (line 86) | public boolean isDisplayingAvatar() {
    method setEnabled (line 90) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/ContactSuggestionView.java
  class ContactSuggestionView (line 26) | public class ContactSuggestionView extends LinearLayout {
    method ContactSuggestionView (line 33) | public ContactSuggestionView(Context context, AttributeSet attrs) {
    method onFinishInflate (line 42) | @Override
    method addTextChangedListener (line 84) | public void addTextChangedListener(TextWatcher textWatcher) {
    method setOnContactSelectedListener (line 88) | public void setOnContactSelectedListener(OnContactSelectedListener lis...
    type OnContactSelectedListener (line 92) | public interface OnContactSelectedListener {
      method onContactSelected (line 93) | void onContactSelected(Contact contact);
      method onContactSelected (line 96) | @Override
      method onContactCleared (line 101) | @Override
      method onContactCleared (line 108) | void onContactCleared();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/ContactsAdapter.java
  class ContactsAdapter (line 22) | class ContactsAdapter extends BaseAdapter implements Filterable {
    method ContactsAdapter (line 29) | ContactsAdapter(ContactsSearch contactsSearch, ImageLoader imageLoader) {
    method getCount (line 40) | @Override
    method getItem (line 45) | @Override
    method getItemId (line 50) | @Override
    method getView (line 55) | @Override
    class ContactViewHolder (line 82) | private static class ContactViewHolder {
    method setSuggestions (line 87) | private void setSuggestions(List<Contact> contacts) {
    method getFilter (line 94) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/EventDatePicker.java
  class EventDatePicker (line 19) | public class EventDatePicker extends LinearLayout {
    method EventDatePicker (line 36) | public EventDatePicker(Context context, AttributeSet attrs) {
    method setupDayPicker (line 79) | private void setupDayPicker() {
    method setupMonthPicker (line 87) | private void setupMonthPicker() {
    method setupYearPicker (line 97) | private void setupYearPicker() {
    method currentYear (line 105) | private Integer currentYear() {
    method setDisplayingDate (line 109) | public void setDisplayingDate(Date dateToDisplay) {
    method getDisplayingDate (line 125) | public Date getDisplayingDate() {
    method isDisplayingYear (line 136) | private boolean isDisplayingYear() {
    method getDayOfMonth (line 140) | private int getDayOfMonth() {
    method getMonth (line 144) | @MonthInt
    method getYear (line 150) | private int getYear() {
    method onValueChange (line 156) | @Override
    method updateMaximumDaysInCurrentMonth (line 163) | private void updateMaximumDaysInCurrentMonth() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/analytics/Action.java
  type Action (line 3) | public enum Action {
    method Action (line 14) | Action(String name) {
    method getName (line 18) | public String getName() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/analytics/ActionWithParameters.java
  class ActionWithParameters (line 3) | public final class ActionWithParameters {
    method ActionWithParameters (line 9) | public ActionWithParameters(Action actionName, String label, String va...
    method getName (line 15) | public String getName() {
    method getLabel (line 19) | public String getLabel() {
    method getValue (line 23) | public String getValue() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/contact/AndroidContactsQuery.java
  class AndroidContactsQuery (line 7) | final class AndroidContactsQuery {
    method AndroidContactsQuery (line 20) | private AndroidContactsQuery() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/AlarmManagerCompat.java
  class AlarmManagerCompat (line 8) | public final class AlarmManagerCompat {
    method AlarmManagerCompat (line 11) | public AlarmManagerCompat(AlarmManager alarmManager) {
    method setExact (line 15) | public void setExact(int type, long triggerAtmillis, PendingIntent ope...
    method cancel (line 25) | public void cancel(PendingIntent pendingIntent) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderDebugPreferences.java
  class DailyReminderDebugPreferences (line 12) | public final class DailyReminderDebugPreferences {
    method newInstance (line 16) | public static DailyReminderDebugPreferences newInstance(Context contex...
    method DailyReminderDebugPreferences (line 20) | private DailyReminderDebugPreferences(EasyPreferences preferences) {
    method getSelectedDate (line 24) | @SuppressWarnings("magicNumber")
    method isFakeDateEnabled (line 32) | boolean isFakeDateEnabled() {
    method setSelectedDate (line 36) | public void setSelectedDate(int dayOfMonth, int month, int year) {
    method setEnabled (line 44) | public void setEnabled(boolean newValue) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderModule.java
  class DailyReminderModule (line 24) | @Module
    method settings (line 27) | @Provides
    method factory (line 33) | @Provides
    method presenter (line 38) | @Provides
    method notifier (line 59) | @Provides
    method channelCreator (line 67) | @Provides
    method navigator (line 75) | @Provides
    method scheduler (line 80) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/ContactActionsModule.java
  class ContactActionsModule (line 13) | @Module
    method presenter (line 16) | @Provides
    method extractor (line 21) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/date/DateModule.java
  class DateModule (line 12) | @Module
    method labelCreator (line 16) | @Provides
    method dateParser (line 22) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonation.java
  type AndroidDonation (line 3) | enum AndroidDonation implements Donation {
    method AndroidDonation (line 15) | AndroidDonation(String priceLabel, String identifier) {
    method getAmount (line 20) | @Override
    method getIdentifier (line 25) | @Override
    method valueOfIndex (line 30) | public static Donation valueOfIndex(int index) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonationConstants.java
  class AndroidDonationConstants (line 3) | public final class AndroidDonationConstants {
    method AndroidDonationConstants (line 5) | private AndroidDonationConstants() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonationService.java
  class AndroidDonationService (line 14) | public class AndroidDonationService implements DonationService {
    method AndroidDonationService (line 25) | public AndroidDonationService(IabHelper iabHelper,
    method setup (line 39) | @Override
    method placeDonation (line 52) | @Override
    method dispose (line 73) | @Override
    method restoreDonations (line 82) | @Override
    method containsDonations (line 105) | private static boolean containsDonations(Inventory inventory) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonateActivity.java
  class DonateActivity (line 33) | public class DonateActivity extends MementoActivity {
    method onCreate (line 53) | @Override
    method setupDonateBar (line 109) | private void setupDonateBar() {
    method onDestroy (line 123) | @Override
    method donationCallbacks (line 129) | private DonationCallbacks donationCallbacks() {
    method createIntent (line 149) | public static Intent createIntent(Context context) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonateModule.java
  class DonateModule (line 12) | @Module
    method providesIabHelper (line 15) | @Provides
    method providesDonationPreferences (line 20) | @Provides
    method providesMonitor (line 26) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonatePresenter.java
  class DonatePresenter (line 8) | class DonatePresenter {
    method DonatePresenter (line 15) | DonatePresenter(Analytics analytics,
    method displaySelectedDonation (line 25) | void displaySelectedDonation(String amount) {
    method startPresenting (line 29) | void startPresenting(DonationCallbacks donationCallbacks) {
    method placeDonation (line 34) | void placeDonation(Donation donation, int requestCode) {
    method stopPresenting (line 39) | void stopPresenting() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonationPreferences.java
  class DonationPreferences (line 8) | public final class DonationPreferences {
    method newInstance (line 12) | public static DonationPreferences newInstance(Context context) {
    method DonationPreferences (line 17) | private DonationPreferences(EasyPreferences preferences) {
    method markAsDonated (line 21) | void markAsDonated() {
    method hasDonated (line 25) | public boolean hasDonated() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/SimpleOnSeekBarChangeListener.java
  class SimpleOnSeekBarChangeListener (line 5) | class SimpleOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeLi...
    method onProgressChanged (line 6) | @Override
    method onStartTrackingTouch (line 11) | @Override
    method onStopTrackingTouch (line 16) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabBroadcastReceiver.java
  class IabBroadcastReceiver (line 35) | public class IabBroadcastReceiver extends BroadcastReceiver {
    type IabBroadcastListener (line 39) | public interface IabBroadcastListener {
      method receivedBroadcast (line 40) | void receivedBroadcast();
    method IabBroadcastReceiver (line 50) | public IabBroadcastReceiver(IabBroadcastListener listener) {
    method onReceive (line 54) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabException.java
  class IabException (line 24) | public class IabException extends Exception {
    method IabException (line 27) | public IabException(IabResult r) {
    method IabException (line 30) | public IabException(int response, String message) {
    method IabException (line 33) | public IabException(IabResult r, Exception cause) {
    method IabException (line 37) | public IabException(int response, String message, Exception cause) {
    method getResult (line 42) | public IabResult getResult() { return mResult; }

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabHelper.java
  class IabHelper (line 74) | public class IabHelper {
    method IabHelper (line 176) | public IabHelper(Context ctx, String base64PublicKey) {
    method enableDebugLogging (line 185) | public void enableDebugLogging(boolean enable, String tag) {
    method enableDebugLogging (line 191) | public void enableDebugLogging(boolean enable) {
    type OnIabSetupFinishedListener (line 202) | public interface OnIabSetupFinishedListener {
      method onIabSetupFinished (line 208) | void onIabSetupFinished(IabResult result);
    method startSetup (line 218) | public void startSetup(final OnIabSetupFinishedListener listener) {
    method dispose (line 321) | public void dispose() throws IabAsyncInProgressException {
    method disposeWhenFinished (line 345) | public void disposeWhenFinished() {
    method checkNotDisposed (line 361) | private void checkNotDisposed() {
    method subscriptionsSupported (line 366) | public boolean subscriptionsSupported() {
    type OnIabPurchaseFinishedListener (line 375) | public interface OnIabPurchaseFinishedListener {
      method onIabPurchaseFinished (line 385) | void onIabPurchaseFinished(IabResult result, Purchase info);
    method launchPurchaseFlow (line 392) | public void launchPurchaseFlow(Activity act, String sku, int requestCo...
    method launchPurchaseFlow (line 397) | public void launchPurchaseFlow(Activity act, String sku, int requestCode,
    method launchSubscriptionPurchaseFlow (line 403) | public void launchSubscriptionPurchaseFlow(Activity act, String sku, i...
    method launchSubscriptionPurchaseFlow (line 408) | public void launchSubscriptionPurchaseFlow(Activity act, String sku, i...
    method launchPurchaseFlow (line 434) | public void launchPurchaseFlow(Activity act, String sku, String itemTy...
    method handleActivityResult (line 519) | public boolean handleActivityResult(int requestCode, int resultCode, I...
    method queryInventory (line 603) | public Inventory queryInventory() throws IabException {
    method queryInventory (line 620) | public Inventory queryInventory(boolean querySkuDetails, List<String> ...
    type QueryInventoryFinishedListener (line 666) | public interface QueryInventoryFinishedListener {
      method onQueryInventoryFinished (line 673) | void onQueryInventoryFinished(IabResult result, Inventory inv);
    method queryInventoryAsync (line 688) | public void queryInventoryAsync(final boolean querySkuDetails, final L...
    method queryInventoryAsync (line 721) | public void queryInventoryAsync(QueryInventoryFinishedListener listener)
    method consume (line 735) | void consume(Purchase itemInfo) throws IabException {
    type OnConsumeFinishedListener (line 771) | public interface OnConsumeFinishedListener {
      method onConsumeFinished (line 778) | void onConsumeFinished(Purchase purchase, IabResult result);
    type OnConsumeMultiFinishedListener (line 784) | public interface OnConsumeMultiFinishedListener {
      method onConsumeMultiFinished (line 792) | void onConsumeMultiFinished(List<Purchase> purchases, List<IabResult...
    method consumeAsync (line 803) | public void consumeAsync(Purchase purchase, OnConsumeFinishedListener ...
    method consumeAsync (line 817) | public void consumeAsync(List<Purchase> purchases, OnConsumeMultiFinis...
    method getResponseDesc (line 831) | public static String getResponseDesc(int code) {
    method checkSetupDone (line 860) | void checkSetupDone(String operation) {
    method getResponseCodeFromBundle (line 868) | int getResponseCodeFromBundle(Bundle b) {
    method getResponseCodeFromIntent (line 884) | int getResponseCodeFromIntent(Intent i) {
    method flagStartAsync (line 899) | void flagStartAsync(String operation) throws IabAsyncInProgressExcepti...
    method flagEndAsync (line 912) | void flagEndAsync() {
    class IabAsyncInProgressException (line 932) | public static class IabAsyncInProgressException extends Exception {
      method IabAsyncInProgressException (line 933) | public IabAsyncInProgressException(String message) {
    method queryPurchases (line 938) | int queryPurchases(Inventory inv, String itemType) throws JSONExceptio...
    method querySkuDetails (line 1001) | int querySkuDetails(String itemType, Inventory inv, List<String> moreS...
    method consumeAsyncInternal (line 1069) | void consumeAsyncInternal(final List<Purchase> purchases,
    method logDebug (line 1107) | void logDebug(String msg) {
    method logError (line 1111) | void logError(String msg) {
    method logWarn (line 1115) | void logWarn(String msg) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabResult.java
  class IabResult (line 26) | public class IabResult {
    method IabResult (line 30) | public IabResult(int response, String message) {
    method getResponse (line 39) | public int getResponse() { return mResponse; }
    method getMessage (line 40) | public String getMessage() { return mMessage; }
    method isSuccess (line 41) | public boolean isSuccess() { return mResponse == IabHelper.BILLING_RES...
    method isFailure (line 42) | public boolean isFailure() { return !isSuccess(); }
    method toString (line 43) | public String toString() { return "IabResult: " + getMessage(); }

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Inventory.java
  class Inventory (line 27) | public class Inventory {
    method Inventory (line 31) | Inventory() { }
    method getSkuDetails (line 34) | public SkuDetails getSkuDetails(String sku) {
    method getPurchase (line 39) | public Purchase getPurchase(String sku) {
    method hasPurchase (line 44) | public boolean hasPurchase(String sku) {
    method hasDetails (line 49) | public boolean hasDetails(String sku) {
    method erasePurchase (line 61) | public void erasePurchase(String sku) {
    method getAllOwnedSkus (line 66) | List<String> getAllOwnedSkus() {
    method getAllOwnedSkus (line 71) | List<String> getAllOwnedSkus(String itemType) {
    method getAllPurchases (line 80) | List<Purchase> getAllPurchases() {
    method addSkuDetails (line 84) | void addSkuDetails(SkuDetails d) {
    method addPurchase (line 88) | void addPurchase(Purchase p) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Purchase.java
  class Purchase (line 24) | public class Purchase {
    method Purchase (line 37) | public Purchase(String itemType, String jsonPurchaseInfo, String signa...
    method getItemType (line 52) | public String getItemType() { return mItemType; }
    method getOrderId (line 53) | public String getOrderId() { return mOrderId; }
    method getPackageName (line 54) | public String getPackageName() { return mPackageName; }
    method getSku (line 55) | public String getSku() { return mSku; }
    method getPurchaseTime (line 56) | public long getPurchaseTime() { return mPurchaseTime; }
    method getPurchaseState (line 57) | public int getPurchaseState() { return mPurchaseState; }
    method getDeveloperPayload (line 58) | public String getDeveloperPayload() { return mDeveloperPayload; }
    method getToken (line 59) | public String getToken() { return mToken; }
    method getOriginalJson (line 60) | public String getOriginalJson() { return mOriginalJson; }
    method getSignature (line 61) | public String getSignature() { return mSignature; }
    method isAutoRenewing (line 62) | public boolean isAutoRenewing() { return mIsAutoRenewing; }
    method toString (line 64) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Security.java
  class Security (line 40) | @SuppressWarnings("all")
    method verifyPurchase (line 56) | public static boolean verifyPurchase(String base64PublicKey, String si...
    method generatePublicKey (line 74) | public static PublicKey generatePublicKey(String encodedPublicKey) {
    method verify (line 96) | public static boolean verify(PublicKey publicKey, String signedData, S...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/SkuDetails.java
  class SkuDetails (line 24) | public class SkuDetails {
    method SkuDetails (line 35) | public SkuDetails(String jsonSkuDetails) throws JSONException {
    method SkuDetails (line 39) | public SkuDetails(String itemType, String jsonSkuDetails) throws JSONE...
    method getSku (line 52) | public String getSku() { return mSku; }
    method getType (line 53) | public String getType() { return mType; }
    method getPrice (line 54) | public String getPrice() { return mPrice; }
    method getPriceAmountMicros (line 55) | public long getPriceAmountMicros() { return mPriceAmountMicros; }
    method getPriceCurrencyCode (line 56) | public String getPriceCurrencyCode() { return mPriceCurrencyCode; }
    method getTitle (line 57) | public String getTitle() { return mTitle; }
    method getDescription (line 58) | public String getDescription() { return mDescription; }
    method toString (line 60) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/ContactsObserver.java
  class ContactsObserver (line 11) | public final class ContactsObserver extends ContentObserver implements E...
    method ContactsObserver (line 18) | public ContactsObserver(ContentResolver resolver) {
    method startObserving (line 23) | @Override
    method onChange (line 29) | @Override
    method onChange (line 35) | @Override
    method stopObserving (line 41) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/PreferenceChangedEventsUpdateTrigger.java
  class PreferenceChangedEventsUpdateTrigger (line 12) | public final class PreferenceChangedEventsUpdateTrigger implements Event...
    method PreferenceChangedEventsUpdateTrigger (line 19) | public PreferenceChangedEventsUpdateTrigger(EasyPreferences preference...
    method startObserving (line 28) | @Override
    method isAKeyIcareAbout (line 42) | private boolean isAKeyIcareAbout(String key) {
    method stopObserving (line 46) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/bankholidays/BankHolidaysModule.java
  class BankHolidaysModule (line 11) | @Module
    method userSettings (line 14) | @Provides
    method greekBankHolidaysCalculator (line 20) | @Provides
    method provider (line 25) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/bankholidays/BankHolidaysPreferences.java
  class BankHolidaysPreferences (line 6) | public class BankHolidaysPreferences implements BankHolidaysUserSettings {
    method BankHolidaysPreferences (line 10) | BankHolidaysPreferences(EasyPreferences preferences) {
    method isEnabled (line 14) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/database/ContactColumns.java
  type ContactColumns (line 3) | @SuppressWarnings("all")

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/database/DatabaseContract.java
  class DatabaseContract (line 5) | public final class DatabaseContract {
    class AnnualEventsContract (line 7) | public static final class AnnualEventsContract implements BaseColumns,...
    method DatabaseContract (line 11) | private DatabaseContract() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayModule.java
  class NamedayModule (line 20) | @Module
    method namedayJSONProvider (line 24) | @Provides
    method romanianEasterSpecialCalculator (line 29) | @Provides
    method calculator (line 34) | @Provides
    method handlerFactory (line 39) | @Provides
    method provider (line 45) | @Provides
    method userSettings (line 54) | @Provides
    method calendar (line 59) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayPreferences.java
  class NamedayPreferences (line 8) | public final class NamedayPreferences implements NamedayUserSettings {
    method NamedayPreferences (line 15) | NamedayPreferences(Context context) {
    method setSelectedLanguage (line 20) | @Override
    method getSelectedLanguage (line 25) | @Override
    method isEnabled (line 31) | @Override
    method isEnabledForContactsOnly (line 36) | @Override
    method setEnabledForContactsOnly (line 41) | @Override
    method shouldLookupAllNames (line 46) | @Override
    method shouldNamedaysBeEnabledByDefault (line 51) | private static boolean shouldNamedaysBeEnabledByDefault(Context contex...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysInADayModule.java
  class NamedaysInADayModule (line 13) | @Module
    method viewModelFactory (line 16) | @Provides
    method presenter (line 21) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysScreenAdapter.java
  class NamedaysScreenAdapter (line 16) | public class NamedaysScreenAdapter extends RecyclerView.Adapter<NamedayS...
    method NamedaysScreenAdapter (line 23) | public NamedaysScreenAdapter(NamedaysScreenViewHolderFactory viewholde...
    method getItemViewType (line 28) | @Override
    method onCreateViewHolder (line 33) | @NonNull
    method onBindViewHolder (line 39) | @Override
    method display (line 45) | void display(List<NamedayScreenViewModel> viewModels) {
    method getItemCount (line 52) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysViewModelDiff.java
  class NamedaysViewModelDiff (line 7) | final class NamedaysViewModelDiff extends DiffUtil.Callback {
    method NamedaysViewModelDiff (line 12) | NamedaysViewModelDiff(List<NamedayScreenViewModel> oldModels, List<Nam...
    method getOldListSize (line 17) | @Override
    method getNewListSize (line 22) | @Override
    method areItemsTheSame (line 27) | @Override
    method areContentsTheSame (line 33) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/ContactEventsMarshaller.java
  class ContactEventsMarshaller (line 12) | public class ContactEventsMarshaller {
    method ContactEventsMarshaller (line 19) | public ContactEventsMarshaller(ShortDateLabelCreator dateLabelCreator) {
    method marshall (line 23) | public ContentValues[] marshall(List<ContactEvent> item) {
    method createValuesFor (line 32) | private ContentValues createValuesFor(ContactEvent event) {
    method putDeviceContactIdIfPresent (line 49) | private void putDeviceContactIdIfPresent(ContactEvent event, ContentVa...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/AndroidFacebookPreferences.java
  class AndroidFacebookPreferences (line 6) | public final class AndroidFacebookPreferences implements FacebookUserSet...
    method AndroidFacebookPreferences (line 9) | AndroidFacebookPreferences(EasyPreferences preferences) {
    method store (line 13) | @Override
    method retrieveCredentials (line 20) | @Override
    method isLoggedIn (line 28) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookLogoutService.java
  class FacebookLogoutService (line 12) | class FacebookLogoutService {
    method FacebookLogoutService (line 22) | FacebookLogoutService(Scheduler resultScheduler,
    method logOut (line 33) | void logOut() {
    method refreshAllUI (line 44) | private Action refreshAllUI() {
    method clearAllUserPresence (line 53) | private Action clearAllUserPresence() {
    method onLogOut (line 63) | private Action onLogOut() {
    method dispose (line 72) | void dispose() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookModule.java
  class FacebookModule (line 11) | @Module
    method FacebookModule (line 16) | public FacebookModule(Context context) {
    method userSettings (line 20) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfileActivity.java
  class FacebookProfileActivity (line 34) | public class FacebookProfileActivity extends ThemedMementoActivity imple...
    method onCreate (line 50) | @Override
    method onLogOut (line 88) | private OnFacebookLogOutCallback onLogOut() {
    method setupToolbar (line 97) | private void setupToolbar() {
    method display (line 104) | @Override
    method onCreateOptionsMenu (line 114) | @Override
    method onOptionsItemSelected (line 120) | @Override
    method onDestroy (line 133) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfilePresenter.java
  class FacebookProfilePresenter (line 3) | class FacebookProfilePresenter {
    method FacebookProfilePresenter (line 8) | FacebookProfilePresenter(FacebookLogoutService service,
    method startPresenting (line 16) | void startPresenting() {
    method logOut (line 21) | void logOut() {
    method stopPresenting (line 25) | void stopPresenting() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfileView.java
  type FacebookProfileView (line 3) | interface FacebookProfileView {
    method display (line 4) | void display(UserCredentials userCredentials);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/OnFacebookLogOutCallback.java
  type OnFacebookLogOutCallback (line 3) | interface OnFacebookLogOutCallback {
    method onUserLogOut (line 4) | void onUserLogOut();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/ScreenOrientationLock.java
  class ScreenOrientationLock (line 9) | public class ScreenOrientationLock {
    method lock (line 11) | public void lock(Activity activity) {
    method unlock (line 34) | public void unlock(Activity activity) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/CalendarURLCreator.java
  class CalendarURLCreator (line 9) | class CalendarURLCreator {
    method CalendarURLCreator (line 13) | CalendarURLCreator(CrashAndErrorTracker tracker) {
    method createFrom (line 17) | URL createFrom(UserCredentials user) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsIntentService.java
  class FacebookFriendsIntentService (line 27) | public class FacebookFriendsIntentService extends IntentService {
    method FacebookFriendsIntentService (line 37) | public FacebookFriendsIntentService() {
    method onCreate (line 41) | @Override
    method onHandleIntent (line 47) | @Override
    method notifyServiceRan (line 82) | private void notifyServiceRan() {
    method isAnnonymous (line 90) | private boolean isAnnonymous(UserCredentials userCredentials) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsPersister.java
  class FacebookFriendsPersister (line 10) | public final class FacebookFriendsPersister {
    method FacebookFriendsPersister (line 14) | public FacebookFriendsPersister(PeopleEventsPersister persister) {
    method keepOnly (line 18) | void keepOnly(List<ContactEvent> friends) {
    method removeAllFriends (line 23) | public void removeAllFriends() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsScheduler.java
  class FacebookFriendsScheduler (line 12) | public final class FacebookFriendsScheduler {
    method FacebookFriendsScheduler (line 19) | public FacebookFriendsScheduler(Context context, AlarmManager alarmMan...
    method scheduleNext (line 24) | public void scheduleNext() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/CookieResetter.java
  class CookieResetter (line 8) | class CookieResetter {
    method CookieResetter (line 11) | CookieResetter(CookieManager instance) {
    method clearAll (line 15) | void clearAll() {
    method removeAllCookies (line 41) | private void removeAllCookies() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/CredentialsExtractor.java
  class CredentialsExtractor (line 8) | class CredentialsExtractor {
    method extractCalendarURL (line 19) | UserCredentials extractCalendarURL(String pageSource) {
    method createFrom (line 32) | static UserCredentials createFrom(String calendarURL, String name) {
    method obtainName (line 44) | private String obtainName(String pageSource) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FBImportClient.java
  class FBImportClient (line 8) | class FBImportClient extends WebViewClient {
    method FBImportClient (line 19) | FBImportClient(WebView webview) {
    method onPageStarted (line 23) | @Override
    method isHomePage (line 31) | private boolean isHomePage(String url) {
    method internalOnUserLoggedIn (line 36) | private void internalOnUserLoggedIn() {
    method switchToDesktopBrowsing (line 42) | private void switchToDesktopBrowsing() {
    method onPageFinished (line 47) | @Override
    method onReceivedError (line 54) | @Override
    method setListener (line 60) | public void setListener(FacebookLogInCallback listener) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookImportView.java
  type FacebookImportView (line 5) | interface FacebookImportView {
    method showLoading (line 7) | void showLoading();
    method showData (line 9) | void showData(UserCredentials user);
    method showError (line 11) | void showError();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookLogInActivity.java
  class FacebookLogInActivity (line 39) | public class FacebookLogInActivity extends ThemedMementoActivity impleme...
    method onCreate (line 57) | @Override
    method onCloseButtonPressed (line 93) | private View.OnClickListener onCloseButtonPressed() {
    method shareAppIntentOnClick (line 102) | private View.OnClickListener shareAppIntentOnClick() {
    method onUserCredentialsSubmitted (line 117) | @Override
    method onUserLoggedIn (line 123) | @Override
    method fetchFacebookFriends (line 130) | private void fetchFacebookFriends() {
    method startFacebookFetchService (line 136) | private void startFacebookFetchService() {
    method onError (line 141) | @Override
    method showLoading (line 148) | @Override
    method showData (line 161) | @Override
    method animateAvatarWithBounce (line 188) | private void animateAvatarWithBounce() {
    method showError (line 201) | @Override
    method onDestroy (line 217) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookLogInCallback.java
  type FacebookLogInCallback (line 5) | interface FacebookLogInCallback {
    method onUserLoggedIn (line 6) | void onUserLoggedIn(UserCredentials loggedInCredentials);
    method onUserCredentialsSubmitted (line 11) | void onUserCredentialsSubmitted();
    method onError (line 13) | void onError(Exception e);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookLogInException.java
  class FacebookLogInException (line 3) | final class FacebookLogInException extends Exception {
    method FacebookLogInException (line 4) | FacebookLogInException(String message) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookWebView.java
  class FacebookWebView (line 15) | public class FacebookWebView extends WebView {
    method FacebookWebView (line 21) | public FacebookWebView(Context context, AttributeSet attrs) {
    method FacebookWebView (line 27) | public FacebookWebView(Context context, AttributeSet attrs, int defSty...
    method setup (line 32) | private void setup() {
    method loadLogInPage (line 46) | public void loadLogInPage() {
    method setCallback (line 50) | public void setCallback(FacebookLogInCallback callback) {
    class FacebookJavaScriptInterface (line 55) | private class FacebookJavaScriptInterface {
      method processHTML (line 59) | @JavascriptInterface

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/UserCredentialsExtractorTask.java
  class UserCredentialsExtractorTask (line 10) | class UserCredentialsExtractorTask extends AsyncTask<Void, Void, UserCre...
    method UserCredentialsExtractorTask (line 18) | UserCredentialsExtractorTask(String pageSource, FacebookUserSettings f...
    method doInBackground (line 24) | @Override
    method onPostExecute (line 33) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/home/HomeActivity.java
  class HomeActivity (line 42) | public class HomeActivity extends ThemedMementoActivity implements DateP...
    method onCreate (line 64) | @Override
    method onResume (line 130) | @Override
    method onStop (line 144) | @Override
    method onActivityResult (line 150) | @Override
    method hideBanner (line 164) | private void hideBanner() {
    method bannerVisibility (line 177) | private int bannerVisibility() {
    method onDateSelected (line 185) | @Override
    method onSearchRequested (line 190) | @Override
    method onUserInteraction (line 197) | @Override
    method onClick (line 204) | @Override
    method onBackPressed (line 211) | @Override
    method getStartIntent (line 220) | public static Intent getStartIntent(Context context) {
    method onUserDonated (line 225) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/home/HomeViewPagerAdapter.java
  class HomeViewPagerAdapter (line 13) | class HomeViewPagerAdapter extends FragmentPagerAdapter {
    method HomeViewPagerAdapter (line 19) | HomeViewPagerAdapter(FragmentManager fragmentManager) {
    method getItem (line 23) | @Override
    method createFragmentFor (line 33) | private Fragment createFragmentFor(int position) {
    method getCount (line 45) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/home/SearchTransitioner.java
  class SearchTransitioner (line 24) | final class SearchTransitioner {
    method SearchTransitioner (line 36) | SearchTransitioner(Activity activity,
    method transitionToSearch (line 51) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method expandToolbar (line 70) | private void expandToolbar() {
    method navigateToSearchWhenDone (line 76) | private Transition.TransitionListener navigateToSearchWhenDone() {
    method supportsTransitions (line 93) | private static boolean supportsTransitions() {
    method onActivityResumed (line 97) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/CrossFadeBitmapDisplayer.java
  class CrossFadeBitmapDisplayer (line 18) | class CrossFadeBitmapDisplayer implements BitmapDisplayer {
    method CrossFadeBitmapDisplayer (line 23) | CrossFadeBitmapDisplayer(Resources resources, int duration) {
    method display (line 29) | @Override
    method display (line 38) | protected void display(ImageAware imageAware, LoadedFrom loadedFrom, D...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/CrossFadeCircleBitmapDisplayer.java
  class CrossFadeCircleBitmapDisplayer (line 10) | class CrossFadeCircleBitmapDisplayer extends CrossFadeBitmapDisplayer {
    method CrossFadeCircleBitmapDisplayer (line 12) | CrossFadeCircleBitmapDisplayer(Resources resources, int duration) {
    method display (line 16) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/DecodedImage.java
  class DecodedImage (line 3) | public final class DecodedImage {
    method DecodedImage (line 9) | DecodedImage(byte[] bytes) {
    method getBytes (line 13) | public byte[] getBytes() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/ImageLoadedConsumer.java
  type ImageLoadedConsumer (line 5) | public interface ImageLoadedConsumer {
    method onImageLoaded (line 6) | void onImageLoaded(Bitmap loadedImage);
    method onLoadingFailed (line 7) | void onLoadingFailed();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/ImageModule.java
  class ImageModule (line 10) | @Module
    method ImageModule (line 17) | public ImageModule(Resources resources) {
    method providesImageLoader (line 21) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/NutraBaseImageDecoder.java
  class NutraBaseImageDecoder (line 9) | public class NutraBaseImageDecoder extends BaseImageDecoder {
    method NutraBaseImageDecoder (line 11) | public NutraBaseImageDecoder(boolean loggingEnabled) {
    method getImageStream (line 15) | @Override
    class JpegClosedInputStream (line 22) | private static final class JpegClosedInputStream extends InputStream {
      method JpegClosedInputStream (line 29) | private JpegClosedInputStream(final InputStream iInputStream) {
      method read (line 34) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/SimpleImageLoadedConsumer.java
  class SimpleImageLoadedConsumer (line 5) | public class SimpleImageLoadedConsumer implements ImageLoadedConsumer {
    method onImageLoaded (line 7) | @Override
    method onLoadingFailed (line 12) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/images/UILImageLoader.java
  class UILImageLoader (line 19) | class UILImageLoader implements com.alexstyl.specialdates.images.ImageLo...
    method UILImageLoader (line 25) | UILImageLoader(CrossFadeBitmapDisplayer defaultDisplayer, CrossFadeCir...
    method load (line 31) | @NonNull
    method standardBuilder (line 85) | private DisplayImageOptions.Builder standardBuilder() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/people/PeopleAdapter.java
  class PeopleAdapter (line 17) | class PeopleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    method PeopleAdapter (line 28) | PeopleAdapter(ImageLoader imageLoader, LayoutInflater inflater, People...
    method getItemViewType (line 34) | @Override
    method onCreateViewHolder (line 49) | @Override
    method onBindViewHolder (line 67) | @Override
    method updateWith (line 80) | void updateWith(List<PeopleRowViewModel> viewModels) {
    method getItemCount (line 87) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/people/PeopleFragment.java
  class PeopleFragment (line 26) | public class PeopleFragment extends MementoFragment implements PeopleVie...
    method onCreate (line 37) | @Override
    method onCreateView (line 43) | @Nullable
    method onResume (line 76) | @Override
    method onPause (line 83) | @Override
    method displayPeople (line 90) | @Override
    method showLoading (line 97) | @Override
    method isDisplayNoData (line 105) | private boolean isDisplayNoData() {
    method reloadUpcomingEventsView (line 109) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/people/PeopleItemDecorator.java
  class PeopleItemDecorator (line 7) | class PeopleItemDecorator extends RecyclerView.ItemDecoration {
    method PeopleItemDecorator (line 12) | PeopleItemDecorator(int categoryMargin, int itemInBetweenMargin) {
    method getItemOffsets (line 17) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/people/PeopleModule.java
  class PeopleModule (line 14) | @Module
    method viewModelFactory (line 17) | @Provides
    method presenter (line 22) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/people/PeopleViewHolder.java
  class PeopleViewHolder (line 10) | class PeopleViewHolder extends RecyclerView.ViewHolder {
    method PeopleViewHolder (line 16) | PeopleViewHolder(View rowView, ImageLoader imageLoader, ColorImageView...
    method bind (line 23) | public void bind(final PersonViewModel viewModel, final PeopleViewHold...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/permissions/ContactPermissionActivity.java
  class ContactPermissionActivity (line 16) | @TargetApi(Build.VERSION_CODES.M) // Runtime permissions were added in M...
    method onCreate (line 21) | @Override
    method onClick (line 33) | @Override
    method requestContactPermission (line 39) | private void requestContactPermission() {
    method onRequestPermissionsResult (line 47) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/BottomSheetIntentAdapter.java
  class BottomSheetIntentAdapter (line 15) | public final class BottomSheetIntentAdapter extends RecyclerView.Adapter...
    method BottomSheetIntentAdapter (line 21) | BottomSheetIntentAdapter(BottomSheetIntentListener listener, List<Inte...
    method onCreateViewHolder (line 28) | @Override
    method onBindViewHolder (line 36) | @Override
    method getItemCount (line 42) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/BottomSheetIntentListener.java
  type BottomSheetIntentListener (line 5) | public interface BottomSheetIntentListener {
    method onActivitySelected (line 6) | void onActivitySelected(Intent intent);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/CallViewHolder.java
  class CallViewHolder (line 8) | class CallViewHolder extends RecyclerView.ViewHolder {
    method CallViewHolder (line 13) | CallViewHolder(View view, TextView callTypeView, TextView numberView, ...
    method bind (line 20) | public void bind(final ContactActionViewModel viewModel, final EventPr...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/ContactActionsAdapter.java
  class ContactActionsAdapter (line 16) | public class ContactActionsAdapter extends RecyclerView.Adapter<CallView...
    method ContactActionsAdapter (line 21) | public ContactActionsAdapter(EventPressedListener listener) {
    method onCreateViewHolder (line 25) | @Override
    method onBindViewHolder (line 34) | @Override
    method getItemCount (line 39) | @Override
    method displayCallMethods (line 44) | public void displayCallMethods(List<ContactActionViewModel> viewModels) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/ContactItemsAdapter.java
  class ContactItemsAdapter (line 16) | public class ContactItemsAdapter extends PagerAdapter {
    method ContactItemsAdapter (line 29) | ContactItemsAdapter(LayoutInflater inflater, EventPressedListener list...
    method instantiateItem (line 34) | @SuppressWarnings("unchecked")
    method destroyItem (line 63) | @Override
    method getCount (line 68) | @Override
    method pageCountOf (line 73) | private int pageCountOf(PersonAvailableActionsViewModel viewModel) {
    method count (line 77) | private int count(List<?> item) {
    method isViewFromObject (line 81) | @Override
    method displayEvents (line 86) | void displayEvents(PersonAvailableActionsViewModel viewModel) {
    method getItemPosition (line 91) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/EventAdapter.java
  class EventAdapter (line 15) | public class EventAdapter extends RecyclerView.Adapter<EventViewHolder> {
    method onCreateViewHolder (line 19) | @Override
    method onBindViewHolder (line 27) | @Override
    method getItemCount (line 32) | @Override
    method displayEvents (line 37) | public void displayEvents(List<ContactEventViewModel> viewModels) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/EventPressedListener.java
  type EventPressedListener (line 3) | public interface EventPressedListener {
    method onContactActionPressed (line 4) | public void onContactActionPressed(ContactActionViewModel intent);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/EventViewHolder.java
  class EventViewHolder (line 7) | class EventViewHolder extends RecyclerView.ViewHolder {
    method EventViewHolder (line 11) | EventViewHolder(View itemView, TextView eventNameView, TextView eventD...
    method bind (line 17) | public void bind(ContactEventViewModel viewModel) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/IntentOptionViewHolder.java
  class IntentOptionViewHolder (line 10) | final class IntentOptionViewHolder extends RecyclerView.ViewHolder {
    method IntentOptionViewHolder (line 15) | IntentOptionViewHolder(View view, ImageView iconView, TextView labelVi...
    method bind (line 21) | void bind(final IntentOptionViewModel viewModel, final BottomSheetInte...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/person/IntentOptionViewModel.java
  class IntentOptionViewModel (line 6) | public final class IntentOptionViewModel {
    method IntentOptionViewModel (line 12) | IntentOptionViewModel(Drawable icon, String label, Intent intent) {
    method getActivityIcon (line 18) | Drawable getActivityIcon() {
    method getLabel (line 22) | String getLabel() {
    method getIntent (line 26) | Intent getIntent() {
    method equals (line 30) | @Override
    method hashCode (line 51) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/receiver/BootCompleteReceiver.java
  class BootCompleteReceiver (line 14) | public class BootCompleteReceiver extends BroadcastReceiver {
    method onReceive (line 20) | @Override
    method rescheduleDailyReminder (line 33) | private void rescheduleDailyReminder(DailyReminderUserSettings userSet...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/BackKeyEditText.java
  class BackKeyEditText (line 8) | public class BackKeyEditText extends EditText {
    method BackKeyEditText (line 9) | public BackKeyEditText(Context context, AttributeSet attrs) {
    method setOnBackKeyPressedListener (line 15) | public void setOnBackKeyPressedListener(OnBackKeyPressedListener liste...
    method onKeyPreIme (line 19) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/CaseInsensitiveComparator.java
  class CaseInsensitiveComparator (line 7) | class CaseInsensitiveComparator implements WordComparator {
    method CaseInsensitiveComparator (line 11) | CaseInsensitiveComparator() {
    method compare (line 15) | @Override
    method compareUpToPoint (line 20) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/DelayedTextWatcher.java
  class DelayedTextWatcher (line 7) | public class DelayedTextWatcher implements TextWatcher {
    method newInstance (line 15) | public static DelayedTextWatcher newInstance(TextUpdatedCallback textU...
    method DelayedTextWatcher (line 20) | public DelayedTextWatcher(TextUpdatedCallback textWatchTextUpdatedCall...
    method run (line 26) | @Override
    method beforeTextChanged (line 36) | @Override
    method onTextChanged (line 43) | @Override
    method afterTextChanged (line 48) | @Override
    type TextUpdatedCallback (line 54) | public interface TextUpdatedCallback {
      method onTextChanged (line 55) | void onTextChanged(String text);
      method onEmptyTextConfirmed (line 57) | void onEmptyTextConfirmed();
      method onTextConfirmed (line 59) | void onTextConfirmed(String text);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/MoreViewHolder.java
  class MoreViewHolder (line 12) | final class MoreViewHolder extends RecyclerView.ViewHolder {
    method createFor (line 17) | static MoreViewHolder createFor(ViewGroup parent) {
    method MoreViewHolder (line 23) | private MoreViewHolder(View convertView) {
    method bind (line 29) | void bind(boolean isLoadingMore) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/NameSuggestionsAdapter.java
  class NameSuggestionsAdapter (line 19) | final class NameSuggestionsAdapter extends RecyclerView.Adapter<Suggsted...
    method newInstance (line 25) | public static NameSuggestionsAdapter newInstance(OnNameSelectedListene...
    method NameSuggestionsAdapter (line 41) | private NameSuggestionsAdapter(NameFilter nameFilter, OnNameSelectedLi...
    method onCreateViewHolder (line 47) | @Override
    method onBindViewHolder (line 52) | @Override
    method getItemCount (line 57) | @Override
    method getFilter (line 62) | @Override
    method clearNames (line 67) | void clearNames() {
    method updateNames (line 72) | void updateNames(ArrayList<String> names) {
    method setTextTyped (line 78) | void setTextTyped(String textTyped) {
    type OnNameSelectedListener (line 82) | interface OnNameSelectedListener {
      method onNameSelected (line 83) | void onNameSelected(String name);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/NamedayCard.java
  class NamedayCard (line 6) | public class NamedayCard {
    method setNameday (line 10) | public void setNameday(NameCelebrations nameday) {
    method isAvailable (line 14) | public boolean isAvailable() {
    method getDate (line 18) | public Date getDate(int i) {
    method clear (line 22) | public void clear() {
    method getName (line 26) | public String getName() {
    method size (line 30) | public int size() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/NamedaysLoader.java
  class NamedaysLoader (line 13) | final class NamedaysLoader extends SimpleAsyncTaskLoader<NameCelebration...
    method newInstance (line 22) | public static NamedaysLoader newInstance(Context context,
    method NamedaysLoader (line 30) | private NamedaysLoader(Context context, NamedayUserSettings namedayUse...
    method loadInBackground (line 38) | @Override
    method getNamedays (line 43) | private NameCelebrations getNamedays(String searchQuery) {
    method getNamedayCalendar (line 50) | private NamedayCalendar getNamedayCalendar() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/NamesFilter.java
  class NamesFilter (line 10) | final class NamesFilter extends Filter {
    method NamesFilter (line 17) | NamesFilter(NameSuggestionsAdapter adapter, NameFilter nameFilter) {
    method performFiltering (line 22) | @Override
    method publishResults (line 37) | @Override
    method convertResultToString (line 50) | @Override
    method ignoreResults (line 55) | void ignoreResults(String ignoredResult) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/NoResultsViewHolder.java
  class NoResultsViewHolder (line 10) | final class NoResultsViewHolder extends RecyclerView.ViewHolder {
    method createFor (line 12) | static NoResultsViewHolder createFor(ViewGroup parent) {
    method NoResultsViewHolder (line 18) | private NoResultsViewHolder(final View convertView) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/OnBackKeyPressedListener.java
  type OnBackKeyPressedListener (line 3) | public interface OnBackKeyPressedListener {
    method onBackButtonPressed (line 7) | boolean onBackButtonPressed();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchActivity.java
  class SearchActivity (line 53) | public class SearchActivity extends ThemedMementoActivity {
    method onCreate (line 88) | @Override
    method onResume (line 162) | @Override
    method setupSearchbarHint (line 171) | private void setupSearchbarHint(NamedayUserSettings preferences) {
    method onCreateOptionsMenu (line 176) | @Override
    method onPrepareOptionsMenu (line 182) | @Override
    method onOptionsItemSelected (line 190) | @Override
    method finish (line 204) | @Override
    method exitTransitionWithAction (line 220) | private void exitTransitionWithAction(final Runnable endingAction) {
    method onClearPressed (line 234) | private void onClearPressed() {
    method onSaveInstanceState (line 239) | @Override
    method startSearching (line 245) | private void startSearching() {
    method clearResults (line 250) | private void clearResults() {
    method resetSearchCounter (line 257) | private void resetSearchCounter() {
    method updateNameSuggestions (line 261) | private void updateNameSuggestions(String text) {
    method setupSearchField (line 267) | private void setupSearchField() {
    method onNameSelected (line 281) | @Override
    method onNameSet (line 289) | private void onNameSet(String name) {
    method onContactClicked (line 299) | @Override
    method onNamedayClicked (line 304) | @Override
    method onCreateLoader (line 313) | @Override
    method onLoadFinished (line 318) | @Override
    method onLoaderReset (line 323) | @Override
    method onTextChanged (line 330) | @Override
    method onEmptyTextConfirmed (line 338) | @Override
    method onTextConfirmed (line 344) | @Override
    method onCreateLoader (line 352) | @Override
    method onLoadFinished (line 358) | @Override
    method onLoaderReset (line 365) | @Override
    method onBackButtonPressed (line 374) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchBar.java
  class SearchBar (line 21) | public class SearchBar extends Toolbar {
    method SearchBar (line 25) | public SearchBar(Context context, @Nullable AttributeSet attrs) {
    method addTintedUpNavigation (line 35) | private void addTintedUpNavigation() {
    method addTextWatcher (line 42) | public void addTextWatcher(TextWatcher textWatcher) {
    method setInputType (line 46) | public void setInputType(int typeTextFlag) {
    method onEditorAction (line 51) | @Override
    method setOnBackKeyPressedListener (line 63) | public void setOnBackKeyPressedListener(OnBackKeyPressedListener liste...
    method setText (line 67) | public void setText(String text) {
    method clearText (line 71) | public void clearText() {
    method hasText (line 75) | public boolean hasText() {
    method setHint (line 79) | public void setHint(String hint) {
    method getText (line 83) | public Editable getText() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchHintCreator.java
  class SearchHintCreator (line 8) | class SearchHintCreator {
    method SearchHintCreator (line 13) | SearchHintCreator(Resources resources, NamedayUserSettings namedayPref...
    method createHint (line 18) | String createHint() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchLoader.java
  class SearchLoader (line 9) | class SearchLoader extends SimpleAsyncTaskLoader<SearchResults> {
    method SearchLoader (line 17) | SearchLoader(Context context,
    method loadInBackground (line 29) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchModule.java
  class SearchModule (line 8) | @Module
    method navigator (line 11) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchResultAdapter.java
  class SearchResultAdapter (line 17) | final class SearchResultAdapter extends RecyclerView.Adapter<RecyclerVie...
    method SearchResultAdapter (line 29) | SearchResultAdapter(ImageLoader imageLoader, DateLabelCreator labelCre...
    method updateSearchResults (line 34) | void updateSearchResults(SearchResults searchResults) {
    method setNamedays (line 45) | public void setNamedays(NameCelebrations namedays) {
    method notifyIsLoadingMore (line 50) | void notifyIsLoadingMore() {
    method clearResults (line 55) | void clearResults() {
    type SearchResultClickListener (line 63) | interface SearchResultClickListener {
      method onContactClicked (line 65) | void onContactClicked(Contact contact);
      method onNamedayClicked (line 67) | void onNamedayClicked(Date date);
    method setSearchResultClickListener (line 72) | void setSearchResultClickListener(SearchResultClickListener l) {
    method getItemViewType (line 81) | @Override
    method loadMoreCardAt (line 96) | private boolean loadMoreCardAt(int position) {
    method namedayCardAt (line 100) | private boolean namedayCardAt(int position) {
    method containsNoResults (line 104) | private boolean containsNoResults() {
    method onCreateViewHolder (line 108) | @Override
    method onBindViewHolder (line 128) | @Override
    method isDisplayingNamedayCard (line 152) | private boolean isDisplayingNamedayCard() {
    method getItemCount (line 156) | @Override
    method shouldDisplayEmptyRow (line 164) | private boolean shouldDisplayEmptyRow() {
    method hasSearchQuery (line 168) | private boolean hasSearchQuery() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchResultContactViewHolder.java
  class SearchResultContactViewHolder (line 13) | final class SearchResultContactViewHolder extends RecyclerView.ViewHolder {
    method createFor (line 20) | public static SearchResultContactViewHolder createFor(ViewGroup parent...
    method SearchResultContactViewHolder (line 26) | private SearchResultContactViewHolder(View convertView, ImageLoader im...
    method bind (line 34) | void bind(final ContactEventViewModel viewModel, final SearchResultAda...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchResultNamedayViewHolder.java
  class SearchResultNamedayViewHolder (line 14) | final class SearchResultNamedayViewHolder extends RecyclerView.ViewHolder {
    method createFor (line 21) | static SearchResultNamedayViewHolder createFor(ViewGroup parent, DateL...
    method SearchResultNamedayViewHolder (line 27) | private SearchResultNamedayViewHolder(View convertView, LayoutInflater...
    method bind (line 35) | public void bind(NamedayCard dates, final SearchResultAdapter.SearchRe...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SearchResults.java
  class SearchResults (line 5) | final class SearchResults {
    method SearchResults (line 11) | SearchResults(String searchQuery, List<ContactEventViewModel> contacts...
    method canLoadMore (line 17) | boolean canLoadMore() {
    method getViewModels (line 21) | List<ContactEventViewModel> getViewModels() {
    method getSearchQuery (line 25) | String getSearchQuery() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/SuggstedNameViewHolder.java
  class SuggstedNameViewHolder (line 11) | final class SuggstedNameViewHolder extends RecyclerView.ViewHolder {
    method createFor (line 15) | public static SuggstedNameViewHolder createFor(ViewGroup parent) {
    method SuggstedNameViewHolder (line 21) | private SuggstedNameViewHolder(View itemView) {
    method bind (line 26) | public void bind(final String name, final NameSuggestionsAdapter.OnNam...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/search/ToggleVisibilityOnFocus.java
  class ToggleVisibilityOnFocus (line 8) | public class ToggleVisibilityOnFocus implements View.OnFocusChangeListen...
    method ToggleVisibilityOnFocus (line 11) | public ToggleVisibilityOnFocus(View view) {
    method onFocusChange (line 15) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/ClickableRingtonePreference.java
  class ClickableRingtonePreference (line 6) | public class ClickableRingtonePreference extends android.preference.Ring...
    method ClickableRingtonePreference (line 9) | public ClickableRingtonePreference(Context context, AttributeSet attrs) {
    method setOnPreferenceClickListener (line 13) | @Override
    method onClick (line 19) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/DailyReminderActivity.java
  class DailyReminderActivity (line 10) | public class DailyReminderActivity extends MementoPreferenceActivity {
    method onCreate (line 12) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/MementoThemeNameComparator.java
  class MementoThemeNameComparator (line 9) | class MementoThemeNameComparator implements Comparator<MementoTheme> {
    method MementoThemeNameComparator (line 12) | MementoThemeNameComparator(Resources resources) {
    method compare (line 16) | @Override
    method nameOf (line 21) | private String nameOf(MementoTheme theme) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/NamedayListPreference.java
  class NamedayListPreference (line 20) | public class NamedayListPreference extends ListPreference {
    method NamedayListPreference (line 25) | public NamedayListPreference(Context context, AttributeSet attrs) {
    method setEntriesAndValues (line 39) | private void setEntriesAndValues(NamedayLocale[] locales) {
    method compare (line 51) | @Override
    method setOnNamedayLocaleChangeListener (line 57) | void setOnNamedayLocaleChangeListener(final OnNamedayLocaleChangeListe...
    type OnNamedayLocaleChangeListener (line 67) | interface OnNamedayLocaleChangeListener {
      method onNamedayChanged (line 68) | boolean onNamedayChanged(NamedayLocale locale);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/OnlyGreekSupportedDialog.java
  class OnlyGreekSupportedDialog (line 11) | public class OnlyGreekSupportedDialog extends MementoDialog {
    method onCreateDialog (line 13) | @NonNull

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/ThemeSelectAdapter.java
  class ThemeSelectAdapter (line 17) | class ThemeSelectAdapter extends BaseAdapter {
    method ThemeSelectAdapter (line 22) | ThemeSelectAdapter(Comparator<MementoTheme> themeNameComparator) {
    method getView (line 28) | @Override
    method getCount (line 42) | @Override
    method getItem (line 47) | @Override
    method getItemId (line 52) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/ThemeSelectDialog.java
  class ThemeSelectDialog (line 14) | public class ThemeSelectDialog extends MementoDialog {
    method onAttach (line 18) | @Override
    method onCreateDialog (line 23) | @NonNull
    method setOnThemeSelectedListener (line 39) | public void setOnThemeSelectedListener(OnThemeSelectedListener listene...
    type OnThemeSelectedListener (line 43) | public interface OnThemeSelectedListener {
      method onThemeSelected (line 44) | void onThemeSelected(MementoTheme theme);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/ThemeViewHolder.java
  class ThemeViewHolder (line 12) | public class ThemeViewHolder {
    method ThemeViewHolder (line 19) | public ThemeViewHolder(View convertView, AttributeExtractor extractor) {
    method bind (line 26) | public void bind(MementoTheme theme) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/settings/UserSettingsFragment.java
  class UserSettingsFragment (line 33) | public final class UserSettingsFragment extends MementoPreferenceFragment {
    method onAttach (line 50) | @Override
    method onCreate (line 56) | @Override
    method reattachThemeDialogIfNeeded (line 165) | private void reattachThemeDialogIfNeeded() {
    method getLocale (line 172) | private NamedayLocale getLocale() {
    method onResume (line 176) | @Override
    method onDestroy (line 183) | @Override
    method onThemeSelected (line 191) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/support/CallForRatingPreferences.java
  class CallForRatingPreferences (line 6) | public class CallForRatingPreferences {
    method CallForRatingPreferences (line 10) | public CallForRatingPreferences(EasyPreferences preferences) {
    method hasUserRated (line 14) | boolean hasUserRated() {
    method setHasUserRated (line 18) | void setHasUserRated(boolean value) {
    method lastAskTimeAsked (line 22) | long lastAskTimeAsked() {
    method triggerNextTime (line 31) | void triggerNextTime() {
    method resetTrigger (line 35) | void resetTrigger() {
    method isTriggered (line 39) | boolean isTriggered() {
    method setLastAskTimedNow (line 43) | void setLastAskTimedNow() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/support/Emoticon.java
  type Emoticon (line 5) | public enum Emoticon {
    method Emoticon (line 11) | Emoticon(String emoji, String smiley) {
    method asText (line 16) | public String asText() {
    method supportsEmojis (line 23) | private boolean supportsEmojis() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/support/OnSupportCardClickListener.java
  type OnSupportCardClickListener (line 5) | public interface OnSupportCardClickListener {
    method onSupportCardClicked (line 7) | void onSupportCardClicked(View v);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/support/RateDialog.java
  class RateDialog (line 22) | public class RateDialog extends MementoActivity {
    method onCreate (line 30) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/theming/AttributeExtractor.java
  class AttributeExtractor (line 10) | public class AttributeExtractor {
    method extractPrimaryColorFrom (line 19) | @ColorInt
    method extractSecondaryColorFrom (line 28) | @ColorInt
    method extractDarkIconsFrom (line 37) | public boolean extractDarkIconsFrom(Context context) {
    method extractAccentColorFrom (line 45) | @ColorInt
    method extractToolbarIconColors (line 54) | @ColorInt

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/theming/DrawableTinter.java
  class DrawableTinter (line 8) | public class DrawableTinter {
    method DrawableTinter (line 11) | public DrawableTinter(AttributeExtractor extractor) {
    method tintWithAccentColor (line 15) | public Drawable tintWithAccentColor(@DrawableRes int drawableResId, Co...
    method tintWithAccentColor (line 22) | public Drawable tintWithAccentColor(Drawable drawable, Context context) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/theming/ThemeMonitor.java
  class ThemeMonitor (line 3) | public final class ThemeMonitor {
    method startMonitoring (line 8) | public static ThemeMonitor startMonitoring(ThemingPreferences preferen...
    method ThemeMonitor (line 13) | private ThemeMonitor(MementoTheme theme, ThemingPreferences preference...
    method hasThemeChanged (line 18) | public boolean hasThemeChanged() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/theming/ThemingModule.java
  class ThemingModule (line 9) | @Module
    method themer (line 12) | @Provides
    method attributeExtractor (line 17) | @Provides
    method themingPreferences (line 22) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/transition/FadeInTransition.java
  class FadeInTransition (line 6) | public final class FadeInTransition extends AutoTransition {
    method FadeInTransition (line 10) | private FadeInTransition() {
    method createTransition (line 14) | public static Transition createTransition() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/transition/FadeOutTransition.java
  class FadeOutTransition (line 6) | public final class FadeOutTransition extends AutoTransition {
    method FadeOutTransition (line 8) | private FadeOutTransition() {
    method withAction (line 18) | public static Transition withAction(TransitionListener finishingAction) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/transition/SimpleTransitionListener.java
  class SimpleTransitionListener (line 7) | public class SimpleTransitionListener implements TransitionListener {
    method onTransitionStart (line 8) | @Override
    method onTransitionPause (line 13) | @Override
    method onTransitionResume (line 18) | @Override
    method onTransitionEnd (line 23) | @Override
    method onTransitionCancel (line 28) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/DummyHideStatusBarListener.java
  class DummyHideStatusBarListener (line 5) | public final class DummyHideStatusBarListener implements AppBarLayout.On...
    method onOffsetChanged (line 7) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/HorizontalDivider.java
  class HorizontalDivider (line 10) | public class HorizontalDivider extends View {
    method HorizontalDivider (line 12) | public HorizontalDivider(Context context, AttributeSet attrs) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/LolipopHideStatusBarListener.java
  class LolipopHideStatusBarListener (line 10) | @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    method LolipopHideStatusBarListener (line 25) | public LolipopHideStatusBarListener(Window window) {
    method onOffsetChanged (line 32) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/MementoCardView.java
  class MementoCardView (line 11) | public class MementoCardView extends FrameLayout {
    method MementoCardView (line 13) | public MementoCardView(Context context, AttributeSet attrs) {
    method isAValidColor (line 26) | private boolean isAValidColor(int backgroundColor) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/ViewFader.java
  class ViewFader (line 8) | public final class ViewFader {
    method hideContentOf (line 10) | public void hideContentOf(ViewGroup viewGroup) {
    method showContent (line 16) | public void showContent(ViewGroup viewGroup) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/base/MementoDialog.java
  class MementoDialog (line 9) | public class MementoDialog extends DialogFragment {
    method getContentResolver (line 11) | protected ContentResolver getContentResolver() {
    method getThemedContext (line 15) | protected Context getThemedContext() {
    method getApplication (line 19) | protected MementoApplication getApplication() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/base/MementoFragment.java
  class MementoFragment (line 7) | public class MementoFragment extends Fragment {
    method getMementoActivity (line 11) | public MementoActivity getMementoActivity() {
    method onAttach (line 15) | @Override
    method getContentResolver (line 26) | protected ContentResolver getContentResolver() {
    method setActivityTitle (line 30) | protected void setActivityTitle(String title) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/dialog/ProgressFragmentDialog.java
  class ProgressFragmentDialog (line 15) | public class ProgressFragmentDialog extends MementoDialog {
    method onCreateDialog (line 20) | @Override
    method newInstance (line 32) | public static ProgressFragmentDialog newInstance(String message, boole...
    method onStop (line 43) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/loader/SimpleAsyncTaskLoader.java
  class SimpleAsyncTaskLoader (line 6) | @SuppressWarnings("all")
    method SimpleAsyncTaskLoader (line 9) | public SimpleAsyncTaskLoader(Context context) {
    method deliverResult (line 15) | @Override
    method releaseResources (line 40) | private void releaseResources(T oldData) {
    method onStartLoading (line 44) | @Override
    method onStopLoading (line 60) | @Override
    method onReset (line 71) | @Override
    method getCachedData (line 86) | final public T getCachedData() {
    method onUnregisterObserver (line 93) | protected void onUnregisterObserver() {
    method onCanceled (line 97) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/AndroidLetterPainter.java
  class AndroidLetterPainter (line 8) | public class AndroidLetterPainter implements LetterPainter {
    method AndroidLetterPainter (line 12) | AndroidLetterPainter(Resources resources) {
    method getVariant (line 29) | @Override
    method normalise (line 37) | private static int normalise(int variant) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/AvatarLayout.java
  class AvatarLayout (line 10) | public class AvatarLayout extends LinearLayout {
    method AvatarLayout (line 12) | public AvatarLayout(Context context) {
    method AvatarLayout (line 16) | public AvatarLayout(Context context, AttributeSet attrs) {
    method AvatarLayout (line 20) | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    method setOrientation (line 27) | @Override
    method getChildAt (line 32) | @Override
    method onLayout (line 37) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/ColorImageView.java
  class ColorImageView (line 27) | public class ColorImageView extends FrameLayout {
    method ColorImageView (line 43) | public ColorImageView(Context context, AttributeSet attrs) {
    method setLetter (line 82) | public void setLetter(String word, boolean firstChar) {
    method getImageView (line 99) | public ImageView getImageView() {
    method setCircleColorVariant (line 106) | public void setCircleColorVariant(@Size(min = 1, max = 5) int i) {
    method onDraw (line 115) | @Override
    method setLetter (line 130) | public void setLetter(String letter) {
    method setText (line 134) | public void setText(String text) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/ForegroundLinearLayout.java
  class ForegroundLinearLayout (line 36) | public class ForegroundLinearLayout extends LinearLayout {
    method ForegroundLinearLayout (line 49) | public ForegroundLinearLayout(Context context) {
    method ForegroundLinearLayout (line 53) | public ForegroundLinearLayout(Context context, AttributeSet attrs) {
    method ForegroundLinearLayout (line 57) | public ForegroundLinearLayout(Context context, AttributeSet attrs, int...
    method getForegroundGravity (line 84) | public int getForegroundGravity() {
    method setForegroundGravity (line 94) | public void setForegroundGravity(int foregroundGravity) {
    method verifyDrawable (line 115) | @Override
    method jumpDrawablesToCurrentState (line 120) | @Override
    method drawableStateChanged (line 128) | @Override
    method setForeground (line 144) | public void setForeground(Drawable drawable) {
    method getForeground (line 177) | public Drawable getForeground() {
    method onLayout (line 181) | @Override
    method onSizeChanged (line 187) | @Override
    method draw (line 193) | @Override
    method onTouchEvent (line 226) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/LogoView.java
  class LogoView (line 13) | public class LogoView extends RelativeLayout {
    method LogoView (line 15) | public LogoView(Context context, AttributeSet attrs) {
    method getVersionName (line 27) | public static String getVersionName(Context context) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/MementoToolbar.java
  class MementoToolbar (line 14) | public class MementoToolbar extends Toolbar {
    method MementoToolbar (line 18) | public MementoToolbar(Context context, @Nullable AttributeSet attrs) {
    method displayNavigationIconAsUp (line 24) | public void displayNavigationIconAsUp() {
    method displayNavigationIconAsClose (line 31) | public void displayNavigationIconAsClose() {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/SpacesItemDecoration.java
  class SpacesItemDecoration (line 7) | public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    method SpacesItemDecoration (line 12) | public SpacesItemDecoration(int space, int columns) {
    method getItemOffsets (line 17) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/ui/widget/ViewModule.java
  class ViewModule (line 10) | @Module
    method ViewModule (line 16) | public ViewModule(Resources resources) {
    method providesLetterPainter (line 20) | @Provides

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/DatePickerDialogFragment.java
  class DatePickerDialogFragment (line 15) | public final class DatePickerDialogFragment extends MementoDialog {
    method newInstance (line 23) | public static DatePickerDialogFragment newInstance(Date startingDate) {
    method onAttach (line 33) | @Override
    method onCreateDialog (line 39) | @NonNull
    method toOneIndexedMonth (line 58) | @MonthInt
    method getZeroIndexedMonth (line 64) | private int getZeroIndexedMonth(Date startingDate) {
    method getStartingDate (line 68) | private Date getStartingDate() {
    type OnDateSetListener (line 75) | public interface OnDateSetListener {
      method onDateSelected (line 76) | void onDateSelected(Date dateSelected);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/UpcomingEventsAdapter.java
  class UpcomingEventsAdapter (line 12) | public class UpcomingEventsAdapter extends RecyclerView.Adapter<Upcoming...
    method UpcomingEventsAdapter (line 19) | UpcomingEventsAdapter(UpcomingViewHolderFactory viewHolderFactory, OnU...
    method onCreateViewHolder (line 24) | @Override
    method onBindViewHolder (line 29) | @Override
    method getItemViewType (line 35) | @Override
    method getItemCount (line 42) | @Override
    method displayUpcomingEvents (line 47) | void displayUpcomingEvents(List<UpcomingRowViewModel> upcomingEventRow...
    method getItemId (line 55) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/UpcomingEventsDecorator.java
  class UpcomingEventsDecorator (line 7) | class UpcomingEventsDecorator extends RecyclerView.ItemDecoration {
    method UpcomingEventsDecorator (line 12) | UpcomingEventsDecorator(int spacingFromHeaders, int itemsInBetweenSpac...
    method getItemOffsets (line 17) | @Override
    method isAHeaderItem (line 28) | private boolean isAHeaderItem(RecyclerView.ViewHolder childViewHolder) {
    method isNotFirstItem (line 32) | private boolean isNotFirstItem(RecyclerView.ViewHolder childViewHolder) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/view/ExposedSearchToolbar.java
  class ExposedSearchToolbar (line 9) | public class ExposedSearchToolbar extends Toolbar {
    method ExposedSearchToolbar (line 11) | public ExposedSearchToolbar(Context context, AttributeSet attrs) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/view/OnUpcomingEventClickedListener.java
  type OnUpcomingEventClickedListener (line 6) | public interface OnUpcomingEventClickedListener {
    method onContactClicked (line 7) | void onContactClicked(Contact contact);
    method onNamedayClicked (line 9) | void onNamedayClicked(Date date);

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/CircularAvatarFactory.java
  class CircularAvatarFactory (line 20) | final class CircularAvatarFactory {
    method CircularAvatarFactory (line 28) | CircularAvatarFactory(ImageLoader imageLoader, Colors colors) {
    method circularAvatarFor (line 33) | Optional<Bitmap> circularAvatarFor(Contact contact, @Px int targetSize) {
    method createPaintFrom (line 56) | private Paint createPaintFrom(Bitmap avatar) {
    method createLetterAvatarFor (line 63) | Bitmap createLetterAvatarFor(DisplayName displayName, @Px int viewSize...
    method createBackgroundPaint (line 78) | private Paint createBackgroundPaint() {
    method createTextPaint (line 84) | private static Paint createTextPaint(@Px int letterSize) {
    method firstLetterOf (line 93) | private static String firstLetterOf(DisplayName displayName) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/UpcomingEventViewBinder.java
  type UpcomingEventViewBinder (line 7) | interface UpcomingEventViewBinder<T extends UpcomingRowViewModel> {
    method bind (line 9) | void bind(T viewModel);
    method getViews (line 11) | RemoteViews getViews();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/UpcomingEventsRemoteViewService.java
  class UpcomingEventsRemoteViewService (line 14) | public class UpcomingEventsRemoteViewService extends RemoteViewsService {
    method onCreate (line 20) | @Override
    method onGetViewFactory (line 27) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/UpcomingEventsScrollingAppWidgetProvider.java
  class UpcomingEventsScrollingAppWidgetProvider (line 25) | public class UpcomingEventsScrollingAppWidgetProvider extends AppWidgetP...
    method onReceive (line 31) | @Override
    method onEnabled (line 38) | @Override
    method onDisabled (line 44) | @Override
    method onUpdate (line 50) | @Override
    method showUpcomingEvents (line 61) | private void showUpcomingEvents(Context context, AppWidgetManager appW...
    method setAddEventClickListener (line 78) | private void setAddEventClickListener(Context context, RemoteViews rem...
    method setListHeaderClickListener (line 84) | private void setListHeaderClickListener(Context context, RemoteViews r...
    method setListClickListener (line 89) | private void setListClickListener(Context context, RemoteViews remoteV...
    method pendingIntentToMain (line 95) | private PendingIntent pendingIntentToMain(Context context) {
    method askForContactReadPermission (line 100) | private void askForContactReadPermission(Context context, AppWidgetMan...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/UpcomingEventsScrollingWidgetView.java
  class UpcomingEventsScrollingWidgetView (line 11) | public class UpcomingEventsScrollingWidgetView implements UpcomingEvents...
    method UpcomingEventsScrollingWidgetView (line 16) | public UpcomingEventsScrollingWidgetView(Context context, AppWidgetMan...
    method reloadUpcomingEventsView (line 21) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/list/UpcomingEventsViewsFactory.java
  class UpcomingEventsViewsFactory (line 18) | class UpcomingEventsViewsFactory implements RemoteViewsService.RemoteVie...
    method UpcomingEventsViewsFactory (line 30) | UpcomingEventsViewsFactory(String packageName,
    method onCreate (line 41) | @Override
    method onDataSetChanged (line 46) | @Override
    method aMonthFrom (line 52) | private TimePeriod aMonthFrom(Date date) {
    method getViewAt (line 56) | @Override
    method createBinderFor (line 64) | @SuppressLint("SwitchIntDef")
    method getLoadingView (line 88) | @Override
    method getCount (line 93) | @Override
    method getViewTypeCount (line 98) | @Override
    method getItemId (line 103) | @Override
    method hasStableIds (line 108) | @Override
    method onDestroy (line 113) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/SimpleOnSeekBarChangeListener.java
  class SimpleOnSeekBarChangeListener (line 5) | class SimpleOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeLi...
    method onProgressChanged (line 7) | @Override
    method onStartTrackingTouch (line 12) | @Override
    method onStopTrackingTouch (line 17) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/TodayUpcomingEventsView.java
  class TodayUpcomingEventsView (line 10) | public class TodayUpcomingEventsView implements UpcomingEventsView {
    method TodayUpcomingEventsView (line 15) | public TodayUpcomingEventsView(Context context, AppWidgetManager insta...
    method reloadUpcomingEventsView (line 20) | @Override

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/TransparencyColorCalculator.java
  class TransparencyColorCalculator (line 7) | final class TransparencyColorCalculator {
    method calculateColor (line 11) | @ColorInt
    method percentToValue (line 16) | private static int percentToValue(float opacity) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/UpcomingWidgetConfigurationPanel.java
  class UpcomingWidgetConfigurationPanel (line 17) | public class UpcomingWidgetConfigurationPanel extends ConstraintLayout {
    method UpcomingWidgetConfigurationPanel (line 25) | public UpcomingWidgetConfigurationPanel(Context context, AttributeSet ...
    method setOpacityLevel (line 60) | public void setOpacityLevel(float percentage) {
    method getOpacityLevel (line 65) | public float getOpacityLevel() {
    method getWidgetVariant (line 70) | public WidgetVariant getWidgetVariant() {
    method setWidgetVariant (line 74) | public void setWidgetVariant(WidgetVariant variant) {
    method getUserOptions (line 78) | public UserOptions getUserOptions() {
    method setListener (line 84) | public void setListener(ConfigurationListener listener) {
    type ConfigurationListener (line 88) | interface ConfigurationListener {
      method onOpacityLevelChanged (line 91) | @Override
      method onWidgetVariantSelected (line 97) | @Override
      method onApplyButtonPressed (line 102) | @Override
      method onOpacityLevelChanged (line 108) | void onOpacityLevelChanged(float percentage);
      method onWidgetVariantSelected (line 110) | void onWidgetVariantSelected(WidgetVariant variant);
      method onApplyButtonPressed (line 112) | void onApplyButtonPressed();

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/UpcomingWidgetPreviewLayout.java
  class UpcomingWidgetPreviewLayout (line 18) | public class UpcomingWidgetPreviewLayout extends FrameLayout {
    method UpcomingWidgetPreviewLayout (line 29) | @SuppressLint("SetTextI18n")
    method previewWidgetVariant (line 49) | public void previewWidgetVariant(WidgetVariant variant) {
    method updateBackgroundColor (line 55) | private void updateBackgroundColor() {
    method previewBackgroundOpacityLevel (line 61) | public void previewBackgroundOpacityLevel(float opacityLevel) {
    method setTextColor (line 66) | private void setTextColor(@ColorRes int textColorRes) {
    method setTitle (line 71) | public void setTitle(String title) {
    method setSubtitle (line 75) | public void setSubtitle(@StringRes int stringResId) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/WidgetColorCalculator.java
  class WidgetColorCalculator (line 8) | class WidgetColorCalculator {
    method WidgetColorCalculator (line 20) | WidgetColorCalculator(int baseColor) {
    method getColor (line 24) | public int getColor(Date today, Date nextEvent) {
    method getColorForDaysDifference (line 33) | private int getColorForDaysDifference(int dayDiff) {
    method getModifier (line 38) | private float getModifier(int dif) {
    method blend (line 42) | @SuppressWarnings({"MagicNumber", "LocalVariableName"}) // disable che...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/WidgetImageLoader.java
  class WidgetImageLoader (line 16) | public class WidgetImageLoader {
    method WidgetImageLoader (line 21) | public WidgetImageLoader(AppWidgetManager appWidgetManager, ImageLoade...
    method loadPicture (line 26) | void loadPicture(List<Contact> contacts, final int appWidgetId, final ...
    method tryToFetchImageFor (line 30) | private void tryToFetchImageFor(final List<Contact> contacts,

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/WidgetVariant.java
  type WidgetVariant (line 8) | public enum WidgetVariant {
    method fromId (line 18) | public static WidgetVariant fromId(int variantId) {
    method WidgetVariant (line 27) | WidgetVariant(int id, @ColorRes int textColor, @ColorRes int backgroun...
    method getId (line 33) | public int getId() {
    method getTextColor (line 37) | @ColorRes
    method getBackgroundColorResId (line 42) | @ColorRes

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/util/GreekNameUtils.java
  class GreekNameUtils (line 9) | public final class GreekNameUtils {
    method GreekNameUtils (line 11) | private GreekNameUtils() {
    method isGreekLocaleSelected (line 15) | public static boolean isGreekLocaleSelected(Context context) {
    method removeAccents (line 19) | public static String removeAccents(CharSequence title) {

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/util/NaturalLanguageUtils.java
  class NaturalLanguageUtils (line 10) | public final class NaturalLanguageUtils {
    method NaturalLanguageUtils (line 12) | private NaturalLanguageUtils() {
    method joinContacts (line 16) | public static String joinContacts(Strings strings, Collection<Contact>...
    method join (line 29) | private static String join(Strings strings, List<String> iterable, int...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/wear/WearSyncService.java
  class WearSyncService (line 25) | public class WearSyncService extends IntentService {
    method WearSyncService (line 32) | public WearSyncService() {
    method onCreate (line 36) | @Override
    method onHandleIntent (line 44) | @Override
    method fetchContactEvents (line 63) | private Optional<ContactEventsOnADate> fetchContactEvents() {
    method createDataRequest (line 72) | private PutDataRequest createDataRequest(ContactEventsOnADate contactE...
    method getContactsNameListFrom (line 79) | private ArrayList<String> getContactsNameListFrom(List<Contact> contac...

FILE: android_mobile/src/main/java/com/alexstyl/specialdates/wear/WearSyncUpcomingEventsView.java
  class WearSyncUpcomingEventsView (line 8) | public class WearSyncUpcomingEventsView implements UpcomingEventsView {
    method WearSyncUpcomingEventsView (line 12) | public WearSyncUpcomingEventsView(Context context) {
    method reloadUpcomingEventsView (line 16) | @Override

FILE: android_wear/src/main/java/com/alexstyl/specialdates/ContactEventsActivity.java
  class ContactEventsActivity (line 31) | public class ContactEventsActivity extends Activity {
    method onCreate (line 42) | @Override
    method onConnected (line 61) | @Override
    method onConnectionSuspended (line 68) | @Override
    method onConnectionFailed (line 78) | @Override
    method onDataItemsLoaded (line 94) | @Override
    method onNoDataItemsAvailable (line 99) | @Override
    method showEmptyItems (line 105) | private void showEmptyItems() {
    method onDataChanged (line 111) | @Override
    method uriIsSupported (line 124) | private boolean uriIsSupported(Uri uri) {
    method displayDataItem (line 128) | private void displayDataItem(DataItem item) {
    method formatDate (line 140) | private CharSequence formatDate(long date) {
    method onResume (line 149) | @Override
    method onPause (line 155) | @Override

FILE: android_wear/src/main/java/com/alexstyl/specialdates/ContactEventsProviderService.java
  class ContactEventsProviderService (line 29) | public class ContactEventsProviderService extends ComplicationProviderSe...
    method onComplicationUpdate (line 38) | @Override
    method createComplicationData (line 78) | private ComplicationData createComplicationData(DataItem item, int dat...
    method createComplicationData (line 86) | @TargetApi(Build.VERSION_CODES.M)
    method formatShortDate (line 113) | private CharSequence formatShortDate(long date) {
    method formatLongDate (line 125) | private CharSequence formatLongDate(long date) {
    method createContactEventsActivityIntent (line 137) | private PendingIntent createContactEventsActivityIntent() {

FILE: android_wear/src/main/java/com/alexstyl/specialdates/DataChangedListenerService.java
  class DataChangedListenerService (line 9) | public class DataChangedListenerService extends WearableListenerService {
    method onDataChanged (line 11) | @Override

FILE: android_wear/src/main/java/com/alexstyl/specialdates/WearCommunicationService.java
  class WearCommunicationService (line 14) | class WearCommunicationService {
    method WearCommunicationService (line 18) | WearCommunicationService(GoogleApiClient googleApiClient) {
    method loadDataItems (line 22) | void loadDataItems(final Callback callback) {
    method uriIsUnsupported (line 42) | private boolean uriIsUnsupported(Uri uri) {
    type Callback (line 46) | interface Callback {
      method onDataItemsLoaded (line 48) | void onDataItemsLoaded(DataItem item);
      method onNoDataItemsAvailable (line 50) | void onNoDataItemsAvailable();

FILE: memento/src/main/java/android/LruCache.java
  class LruCache (line 13) | public class LruCache<K, V> {
    method LruCache (line 33) | public LruCache(int maxSize) {
    method resize (line 46) | public void resize(int maxSize) {
    method get (line 63) | public final V get(K key) {
    method put (line 117) | public final V put(K key, V value) {
    method trimToSize (line 147) | public void trimToSize(int maxSize) {
    method remove (line 178) | public final V remove(K key) {
    method entryRemoved (line 213) | protected void entryRemoved(boolean evicted, K key, V oldValue, V newV...
    method create (line 231) | protected V create(K key) {
    method safeSizeOf (line 235) | private int safeSizeOf(K key, V value) {
    method sizeOf (line 250) | protected int sizeOf(K key, V value) {
    method evictAll (line 257) | public final void evictAll() {
    method size (line 266) | public synchronized final int size() {
    method maxSize (line 275) | public synchronized final int maxSize() {
    method hitCount (line 283) | public synchronized final int hitCount() {
    method missCount (line 291) | public synchronized final int missCount() {
    method createCount (line 298) | public synchronized final int createCount() {
    method putCount (line 305) | public synchronized final int putCount() {
    method evictionCount (line 312) | public synchronized final int evictionCount() {
    method snapshot (line 320) | public synchronized final Map<K, V> snapshot() {
    method toString (line 324) | @Override

FILE: memento/src/main/java/com/alexstyl/gsc/Index.java
  class Index (line 3) | @Deprecated
    method Index (line 12) | public Index(int length) {
    method hasEnded (line 20) | public boolean hasEnded() {
    method intValue (line 24) | public int intValue() {
    method stepUp (line 28) | public void stepUp() {
    method stepDown (line 36) | public void stepDown() {
    method hasNotStarted (line 44) | public boolean hasNotStarted() {
    method end (line 48) | public void end() {
    method setTo (line 52) | public void setTo(int position) {
    method toString (line 62) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/EventsUpdateTrigger.java
  type EventsUpdateTrigger (line 3) | public interface EventsUpdateTrigger {
    method startObserving (line 5) | void startObserving(Callback callback);
    method stopObserving (line 7) | void stopObserving();
    type Callback (line 9) | interface Callback {
      method onMonitorTriggered (line 10) | void onMonitorTriggered();

FILE: memento/src/main/java/com/alexstyl/specialdates/LabelSetter.java
  type LabelSetter (line 3) | public interface LabelSetter {
    method setLabel (line 4) | void setLabel(String text);

FILE: memento/src/main/java/com/alexstyl/specialdates/SoundWordComparator.java
  class SoundWordComparator (line 5) | public class SoundWordComparator implements WordComparator {
    method compare (line 7) | @Override
    method compareUpToPoint (line 12) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/WordComparator.java
  type WordComparator (line 3) | public interface WordComparator {
    method compare (line 5) | boolean compare(String aWord, String anOtherWord);
    method compareUpToPoint (line 7) | boolean compareUpToPoint(String aWord, String anOtherWord, int index);

FILE: memento/src/main/java/com/alexstyl/specialdates/date/DateComparator.java
  type DateComparator (line 6) | public enum DateComparator implements Comparator<Date>, Serializable {
    method compare (line 9) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/date/Months.java
  class Months (line 3) | public class Months {
    method Months (line 15) | private Months() {

FILE: memento/src/main/java/com/alexstyl/specialdates/donate/Donation.java
  type Donation (line 3) | public interface Donation {
    method getAmount (line 4) | String getAmount();
    method getIdentifier (line 6) | String getIdentifier();

FILE: memento/src/main/java/com/alexstyl/specialdates/donate/DonationCallbacks.java
  type DonationCallbacks (line 3) | public interface DonationCallbacks {
    method onDonateException (line 4) | void onDonateException(String message);
    method onDonationFinished (line 6) | void onDonationFinished(Donation donation);

FILE: memento/src/main/java/com/alexstyl/specialdates/donate/DonationService.java
  type DonationService (line 3) | public interface DonationService {
    method setup (line 4) | void setup(DonationCallbacks listener);
    method placeDonation (line 6) | void placeDonation(Donation donation, int requestCode);
    method dispose (line 8) | void dispose();
    method restoreDonations (line 10) | void restoreDonations();

FILE: memento/src/main/java/com/alexstyl/specialdates/events/bankholidays/GreekBankHolidaysCalculator.java
  class GreekBankHolidaysCalculator (line 12) | public class GreekBankHolidaysCalculator {
    method GreekBankHolidaysCalculator (line 15) | public GreekBankHolidaysCalculator(OrthodoxEasterCalculator easterCalc...
    method calculateBankholidaysForYear (line 19) | @SuppressWarnings("checkstyle:magicnumber")

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayBundle.java
  class NamedayBundle (line 8) | public class NamedayBundle {
    method NamedayBundle (line 13) | public NamedayBundle(Node namesToDate, NamedaysList dateToNames) {
    method getDatesFor (line 18) | public NameCelebrations getDatesFor(String name) {
    method getNamedaysFor (line 26) | public NamesInADate getNamedaysFor(Date date) {
    method getNames (line 30) | public ArrayList<String> getNames() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayLocale.java
  type NamedayLocale (line 3) | public enum NamedayLocale {
    method NamedayLocale (line 17) | NamedayLocale(String shortCode, boolean soundCompared) {
    method from (line 22) | public static NamedayLocale from(String displayLanguage) {
    method isComparedBySound (line 31) | public boolean isComparedBySound() {
    method getCountryCode (line 35) | public String getCountryCode() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayUserSettings.java
  type NamedayUserSettings (line 3) | public interface NamedayUserSettings {
    method setSelectedLanguage (line 4) | void setSelectedLanguage(String language);
    method getSelectedLanguage (line 6) | NamedayLocale getSelectedLanguage();
    method isEnabled (line 8) | boolean isEnabled();
    method isEnabledForContactsOnly (line 10) | boolean isEnabledForContactsOnly();
    method setEnabledForContactsOnly (line 12) | void setEnabledForContactsOnly(boolean onlyForContacts);
    method shouldLookupAllNames (line 14) | boolean shouldLookupAllNames();

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/NamedaysList.java
  class NamedaysList (line 11) | public class NamedaysList {
    method getNamedaysFor (line 16) | public NamesInADate getNamedaysFor(Date date) {
    method addNameday (line 24) | public void addNameday(Date date, String name) {
    method getOrCreateNameDateFor (line 31) | private NamesInADate getOrCreateNameDateFor(Date date) {
    method indexOf (line 42) | private int indexOf(Date date) {
    method isRecurringEvent (line 55) | private boolean isRecurringEvent(Date date) {
    method areMatching (line 59) | private boolean areMatching(Date date, Date otherDate) {
    method getNames (line 64) | public ArrayList<String> getNames() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/EasternNameday.java
  class EasternNameday (line 6) | public class EasternNameday {
    method EasternNameday (line 11) | EasternNameday(int daysToEaster,
    method getNamesCelebrating (line 17) | public List<String> getNamesCelebrating() {
    method getDateToEaster (line 21) | public int getDateToEaster() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/EasternNamedaysExtractor.java
  class EasternNamedaysExtractor (line 12) | public class EasternNamedaysExtractor {
    method EasternNamedaysExtractor (line 16) | public EasternNamedaysExtractor(JSONArray specialJSON) {
    method parse (line 20) | public List<EasternNameday> parse() {
    method extractNamedaysAsDaysFromEaster (line 24) | private List<EasternNameday> extractNamedaysAsDaysFromEaster(JSONArray...
    method getVariationsFrom (line 46) | @NonNull
    method containsNoVariations (line 56) | private boolean containsNoVariations(JSONArray variations) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/NamedayCalendar.java
  class NamedayCalendar (line 14) | public class NamedayCalendar {
    method NamedayCalendar (line 21) | public NamedayCalendar(NamedayLocale locale, NamedayBundle namedays, S...
    method getNormalNamedaysFor (line 28) | public NameCelebrations getNormalNamedaysFor(String name) {
    method getSpecialNamedaysFor (line 32) | public NameCelebrations getSpecialNamedaysFor(String name) {
    method getAllNamedaysOn (line 36) | public NamesInADate getAllNamedaysOn(Date date) {
    method getAllNames (line 45) | public ArrayList<String> getAllNames() {
    method getLocale (line 51) | public NamedayLocale getLocale() {
    method getYear (line 55) | public int getYear() {
    method getAllNamedays (line 59) | public NameCelebrations getAllNamedays(String searchQuery) {
    method getName (line 69) | private String getName(NameCelebrations names, NameCelebrations specia...

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/OrthodoxEasterCalculator.java
  class OrthodoxEasterCalculator (line 6) | public class OrthodoxEasterCalculator {
    method calculateEasterForYear (line 13) | @SuppressWarnings({"MagicNumber"})

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/CharacterNode.java
  class CharacterNode (line 11) | public class CharacterNode implements Node {
    method CharacterNode (line 19) | public CharacterNode() {
    method CharacterNode (line 23) | private CharacterNode(Character s) {
    method clear (line 28) | @Override
    method addDate (line 34) | @Override
    method addDateInternal (line 46) | private void addDateInternal(Index index, String word, Date date) {
    method getDates (line 81) | @Override
    method getDatesInternal (line 92) | private NameCelebrations getDatesInternal(Index index, String name) {
    method toString (line 120) | @Override
    method getCollator (line 135) | public static Collator getCollator() {
    method getDates (line 141) | private NameCelebrations getDates() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/GreekNamedays.java
  class GreekNamedays (line 16) | public final class GreekNamedays {
    method GreekNamedays (line 25) | private GreekNamedays(OrthodoxEasterCalculator easterCalculator, Speci...
    method from (line 30) | public static GreekNamedays from(JSONArray specialJSON, OrthodoxEaster...
    method getNamedayByDate (line 37) | NamesInADate getNamedayByDate(Date date) {
    method refreshNamedaysIfNeeded (line 45) | private void refreshNamedaysIfNeeded(int year) {
    method needsToCalculateNamedaysFor (line 51) | private boolean needsToCalculateNamedaysFor(int year) {
    method calculateNamedaysForYear (line 55) | private void calculateNamedaysForYear(int year) {
    method getNames (line 60) | public ArrayList<String> getNames() {
    method getNamedaysFor (line 66) | public NameCelebrations getNamedaysFor(String name, int year) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/GreekSpecialNamedays.java
  class GreekSpecialNamedays (line 10) | final class GreekSpecialNamedays implements SpecialNamedays {
    method from (line 14) | public static GreekSpecialNamedays from(NamedayJSON namedayJSON, Ortho...
    method GreekSpecialNamedays (line 19) | private GreekSpecialNamedays(GreekNamedays greekNamedays) {
    method getNamedayOn (line 23) | @Override
    method getAllNames (line 28) | @Override
    method getNamedaysFor (line 33) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/NamedayCalendarProvider.java
  class NamedayCalendarProvider (line 9) | public class NamedayCalendarProvider {
    method NamedayCalendarProvider (line 16) | public NamedayCalendarProvider(NamedayJSONProvider jsonProvider, Speci...
    method loadNamedayCalendarForLocale (line 21) | public NamedayCalendar loadNamedayCalendarForLocale(NamedayLocale loca...
    method hasRequestedSameCalendar (line 35) | private boolean hasRequestedSameCalendar(NamedayLocale locale, int yea...
    method getNamedayJSONFor (line 39) | private NamedayJSON getNamedayJSONFor(NamedayLocale locale) {
    method getSpecialnamedaysHandler (line 47) | private SpecialNamedays getSpecialnamedaysHandler(NamedayLocale locale...
    method getNamedayBundle (line 51) | private NamedayBundle getNamedayBundle(NamedayLocale locale, NamedayJS...
    method cacheCalendar (line 59) | private void cacheCalendar(NamedayCalendar namedayCalendar) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/NamedayJSON.java
  class NamedayJSON (line 5) | class NamedayJSON {
    method NamedayJSON (line 9) | NamedayJSON(JSONArray data, JSONArray special) {
    method getData (line 14) | JSONArray getData() {
    method getSpecial (line 18) | JSONArray getSpecial() {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/NamedayJSONParser.java
  class NamedayJSONParser (line 12) | final class NamedayJSONParser {
    method NamedayJSONParser (line 14) | private NamedayJSONParser() {
    method getNamedaysFromJSONasSounds (line 18) | static NamedayBundle getNamedaysFromJSONasSounds(NamedayJSON json) {
    method getNamedaysFrom (line 22) | static NamedayBundle getNamedaysFrom(NamedayJSON json) {
    method createBundleWith (line 26) | private static NamedayBundle createBundleWith(NamedayJSON locale, Node...
    method getNamedaysFrom (line 56) | private static Date getNamedaysFrom(String date) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/NamedayJSONProvider.java
  class NamedayJSONProvider (line 9) | public class NamedayJSONProvider {
    method NamedayJSONProvider (line 15) | public NamedayJSONProvider(NamedayJSONResourceLoader loader) {
    method getNamedayJSONFor (line 19) | NamedayJSON getNamedayJSONFor(NamedayLocale locale) throws JSONExcepti...
    method getSpecialOf (line 26) | private JSONArray getSpecialOf(JSONObject json) throws JSONException {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/Node.java
  type Node (line 6) | public interface Node {
    method addDate (line 8) | void addDate(String name, Date date);
    method getDates (line 10) | NameCelebrations getDates(String name);
    method clear (line 12) | void clear();

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/RomanianSpecialNamedays.java
  class RomanianSpecialNamedays (line 12) | final class RomanianSpecialNamedays implements SpecialNamedays {
    method from (line 16) | public static SpecialNamedays from(NamedayJSON namedayJSON, RomanianEa...
    method namesOf (line 24) | private static ArrayList<String> namesOf(List<EasternNameday> easternN...
    method RomanianSpecialNamedays (line 32) | private RomanianSpecialNamedays(RomanianNamedays namedays) {
    method getAllNames (line 36) | @Override
    method getNamedayOn (line 41) | @Override
    method getNamedaysFor (line 46) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/SpecialGreekNamedaysCalculator.java
  class SpecialGreekNamedaysCalculator (line 15) | class SpecialGreekNamedaysCalculator {
    method SpecialGreekNamedaysCalculator (line 55) | SpecialGreekNamedaysCalculator(List<EasternNameday> easternNamedays) {
    method calculateForEasterDate (line 59) | NamedayBundle calculateForEasterDate(Date easter) {
    method appendSpecialScenarios (line 76) | private void appendSpecialScenarios(Date easter, Node node, NamedaysLi...
    method addSpecialPropatorwn (line 83) | @SuppressWarnings({"MagicNumber"})
    method addSpecialMarkos (line 99) | @SuppressWarnings({"MagicNumber"})
    method addSpecialGiwrgos (line 129) | @SuppressWarnings({"MagicNumber"})
    method addSpecialChloe (line 146) | @SuppressWarnings({"MagicNumber"})
    method createDayDateFrom (line 162) | private static Date createDayDateFrom(Calendar calendar) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/SpecialNamedays.java
  type SpecialNamedays (line 9) | public interface SpecialNamedays {
    method getNamedayOn (line 11) | NamesInADate getNamedayOn(Date date);
    method getNamedaysFor (line 13) | NameCelebrations getNamedaysFor(String name, int year);
    method getAllNames (line 15) | List<String> getAllNames();

FILE: memento/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/SpecialNamedaysHandlerFactory.java
  class SpecialNamedaysHandlerFactory (line 12) | public final class SpecialNamedaysHandlerFactory {
    method SpecialNamedaysHandlerFactory (line 16) | public SpecialNamedaysHandlerFactory(OrthodoxEasterCalculator orthodox...
    method createStrategyForLocale (line 22) | SpecialNamedays createStrategyForLocale(NamedayLocale locale, NamedayJ...
    method isRomanian (line 31) | private boolean isRomanian(NamedayLocale locale) {
    method isGreekLocale (line 35) | private boolean isGreekLocale(NamedayLocale locale) {
    method getNamedayOn (line 40) | @Override
    method getNamedaysFor (line 45) | @Override
    method getAllNames (line 50) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/events/peopleevents/ClosestEventsComparator.java
  class ClosestEventsComparator (line 10) | final class ClosestEventsComparator implements Comparator<Optional<Conta...
    method compare (line 14) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/events/peopleevents/ShortDateLabelCreator.java
  class ShortDateLabelCreator (line 8) | public class ShortDateLabelCreator {
    method createLabelWithYearPreferredFor (line 14) | public String createLabelWithYearPreferredFor(Date date) {
    method createLabelWithNoYearFor (line 24) | public String createLabelWithNoYearFor(Date date) {
    method addYear (line 32) | private void addYear(Date date, StringBuilder str) {
    method addMonth (line 40) | private void addMonth(Date date, StringBuilder str) {
    method addDayOfMonth (line 48) | private void addDayOfMonth(Date date, StringBuilder str) {
    method isSingleDigit (line 56) | private boolean isSingleDigit(int number) {

FILE: memento/src/main/java/com/alexstyl/specialdates/events/peopleevents/StandardEventType.java
  type StandardEventType (line 11) | public enum StandardEventType implements EventType {
    method StandardEventType (line 21) | StandardEventType(@EventTypeId int eventTypeId) {
    method fromId (line 34) | public static StandardEventType fromId(@EventTypeId int eventTypeId) {
    method getEventName (line 41) | @Override
    method getId (line 46) | @EventTypeId

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/UserCredentials.java
  class UserCredentials (line 3) | public class UserCredentials {
    method UserCredentials (line 11) | public UserCredentials(long userID, String key, String name) {
    method getUid (line 17) | public long getUid() {
    method getKey (line 22) | public String getKey() {
    method getName (line 27) | public String getName() {
    method equals (line 31) | @Override
    method hashCode (line 52) | @Override
    method isAnnonymous (line 60) | public boolean isAnnonymous() {

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/CalendarFetcherException.java
  class CalendarFetcherException (line 3) | class CalendarFetcherException extends Exception {
    method CalendarFetcherException (line 4) | CalendarFetcherException(Exception e) {

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/CalendarLoader.java
  type CalendarLoader (line 7) | interface CalendarLoader {
    method loadFrom (line 8) | InputStream loadFrom(URL url) throws IOException;

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/ContactEventSerialiser.java
  class ContactEventSerialiser (line 15) | class ContactEventSerialiser {
    method ContactEventSerialiser (line 26) | ContactEventSerialiser(FacebookContactFactory factory, CrashAndErrorTr...
    method createEventsFrom (line 31) | List<ContactEvent> createEventsFrom(InputStream inputStream) throws IO...
    method parse (line 57) | private void parse(String line, Map<String, String> map, String value) {

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookBirthdaysProvider.java
  class FacebookBirthdaysProvider (line 10) | class FacebookBirthdaysProvider {
    method FacebookBirthdaysProvider (line 15) | FacebookBirthdaysProvider(CalendarLoader calendarLoader, ContactEventS...
    method fetchCalendarFrom (line 20) | List<ContactEvent> fetchCalendarFrom(URL url) throws CalendarFetcherEx...

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookCalendarLoader.java
  class FacebookCalendarLoader (line 7) | class FacebookCalendarLoader implements CalendarLoader {
    method loadFrom (line 8) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookContactFactory.java
  class FacebookContactFactory (line 18) | class FacebookContactFactory {
    method FacebookContactFactory (line 22) | FacebookContactFactory(DateParser parser) {
    method createContactFrom (line 26) | ContactEvent createContactFrom(Map<String, String> map) throws Invalid...
    method dateFrom (line 38) | private Date dateFrom(Map<String, String> map) throws DateParseExcepti...
    method nameFrom (line 43) | private DisplayName nameFrom(Map<String, String> map) {
    method idOf (line 49) | private long idOf(Map<String, String> map) {
    method getOrThrow (line 55) | private static String getOrThrow(Map<String, String> map, String key) {

FILE: memento/src/main/java/com/alexstyl/specialdates/facebook/friendimport/InvalidFacebookContactException.java
  class InvalidFacebookContactException (line 3) | class InvalidFacebookContactException extends Exception {
    method InvalidFacebookContactException (line 4) | InvalidFacebookContactException(Throwable cause) {

FILE: memento/src/main/java/com/alexstyl/specialdates/people/PeopleView.java
  type PeopleView (line 5) | public interface PeopleView {
    method displayPeople (line 6) | void displayPeople(List<PeopleRowViewModel> viewModels);
    method showLoading (line 8) | void showLoading();

FILE: memento/src/main/java/com/alexstyl/specialdates/people/PeopleViewHolderListener.java
  type PeopleViewHolderListener (line 5) | public interface PeopleViewHolderListener {
    method onPersonClicked (line 6) | void onPersonClicked(Contact contact);
    method onFacebookImport (line 8) | void onFacebookImport();
    method onAddContactClicked (line 10) | void onAddContactClicked();

FILE: memento/src/main/java/com/alexstyl/specialdates/search/ContactWithEvents.java
  class ContactWithEvents (line 11) | final class ContactWithEvents {
    method ContactWithEvents (line 18) | ContactWithEvents(Contact contact, List<ContactEvent> events) {
    method ContactWithEvents (line 23) | ContactWithEvents(Contact contact, ContactEvent event) {
    method getContact (line 29) | public Contact getContact() {
    method getEvents (line 33) | public List<ContactEvent> getEvents() {
    method getBirthday (line 37) | Optional<ContactEvent> getBirthday() {
    method getNamedays (line 46) | public List<ContactEvent> getNamedays() {
    method equals (line 56) | @Override
    method hashCode (line 74) | @Override

FILE: memento/src/main/java/com/alexstyl/specialdates/search/NameFilter.java
  class NameFilter (line 8) | final class NameFilter {
    method NameFilter (line 16) | NameFilter(List<String> allNames, WordComparator comparator) {
    method performFiltering (line 21) | List<String> performFiltering(CharSequence constraint) {
    method getAllNames (line 47) | List<String> getAllNames() {

FILE: memento/src/main/java/com/alexstyl/specialdates/search/PeopleEventsSearch.java
  class PeopleEventsSearch (line 12) | final class PeopleEventsSearch {
    method PeopleEventsSearch (line 17) | PeopleEventsSearch(PeopleEventsProvider peopleEventsProvider, NameMatc...
    method searchForContacts (line 22) | List<ContactWithEvents> searchForContacts(String searchQuery, int coun...

FILE: memento/src/main/java/com/alexstyl/specialdates/upcoming/MonthLabels.java
  class MonthLabels (line 9) | public class MonthLabels {
    method forLocale (line 13) | public static MonthLabels forLocale(Locale locale) {
    method MonthLabels (line 19) | MonthLabels(String[] monthLabels) {
    method getMonthOfYear (line 23) | public String getMonthOfYear(@MonthInt int monthPosition) {
    method getMonthsOfYear (line 27) | public String[] getMonthsOfYear() {

FILE: memento/src/main/java/com/alexstyl/specialdates/upcoming/widget/today/PercentToValueConverter.java
  class PercentToValueConverter (line 3) | final class PercentToValueConverter {
    method progressToPercent (line 7) | float progressToPercent(int progress) {
    method percentToProgress (line 11) | int percentToProgress(float percentage) {

FILE: memento/src/test/java/com/alexstyl/specialdates/OptionalTest.java
  class OptionalTest (line 7) | public class OptionalTest {
    method presentNotEqualToAbsent (line 9) | @Test
    method presentsAreEqual (line 15) | @Test
    method absentsAreEqual (line 20) | @Test
    method toStringPrintsTheObject (line 25) | @Test
    method absentToStringPrintsAbsent (line 31) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/contact/ContactCacheTest.java
  class ContactCacheTest (line 8) | public class ContactCacheTest {
    method createEmptyCache (line 16) | @Before
    method givenOneContactIsAdded_thenSizeIsIncreasedByOne (line 21) | @Test
    method givenOneContactIsAdded_thenSameContactIsReturned (line 30) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/contact/ContactFixture.java
  class ContactFixture (line 7) | public class ContactFixture {
    method aContact (line 11) | public static Contact aContact() {
    method aContactCalled (line 15) | public static Contact aContactCalled(String peter) {
    method with (line 19) | public static Contact with(long id, String firstName) {

FILE: memento/src/test/java/com/alexstyl/specialdates/contact/ContactTest.java
  class ContactTest (line 9) | public class ContactTest {
    method toStringReturnsTheDisplayNameRepresentation (line 13) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/contact/DisplayNameTest.java
  class DisplayNameTest (line 10) | public class DisplayNameTest {
    method givenFirstName_thenDisplayNameHasOneFirstNameAndNoLastName (line 12) | @Test
    method givenFirstAndLastName_thenFirstNameIsCorrect (line 20) | @Test
    method givenFirstAndLastName_thenLastNameIsCorrect (line 26) | @Test
    method givenFirstAndLastName_thenDisplayNameHasOneFirstAndLastName (line 32) | @Test
    method givenMultipleFirstNames_thenDisplayNameHasMultipleNamesAndLastName (line 40) | @Test
    method givenFirstNameWithSemicolumnAndLastName_thenDisplayNameHasTwoFirstNameAndLastName (line 49) | @Test
    method givenEmptyName_NoNameIsReturned (line 58) | @Test
    method givenNullName_NoNameIsReturned (line 65) | @Test
    method noName_ReturnsEmptyName (line 72) | @Test
    method allNames (line 78) | @Test
    method toStringReturnsTheFullName (line 86) | @Test
    method asList (line 93) | private static List<String> asList(Names names) {

FILE: memento/src/test/java/com/alexstyl/specialdates/date/ContactEventTest.java
  class ContactEventTest (line 17) | @RunWith(MockitoJUnitRunner.class)
    method labelForNameday (line 29) | @Test
    method labelForBirthdayWithoutYear (line 36) | @Test
    method labelForBirthdayWithYearAfterDate (line 43) | @Test
    method labelForBirthdayWithYearOnDate (line 51) | @Test
    method labelForBirthdayWithYearBeforeDate (line 59) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/events/ContactActionTest.java
  class ContactActionTest (line 19) | public class ContactActionTest {
    method testTheSameDateIsReturned (line 29) | @Test
    method testContactCorrectContactIsReturned (line 38) | @Test
    method testContactsAreCorrectlyReturned (line 50) | @Test
    method testReturnedContactsSizeIsCorrect (line 63) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/events/DateTest.java
  class DateTest (line 12) | public class DateTest {
    method whenAddingADayOfMonth_thenIncreaseNormally (line 23) | @Test
    method givenAEndOfTheYearDate_whenAddingOneDay_thenTheFirstDayOfTheNextYearIsReturned (line 32) | @Test
    method givenDateWithShortMonthAndNoYearSpecified_thenReturn29Days (line 43) | @Test
    method givenDateWithShortMonthAndCommonYear_thenReturn28Days (line 50) | @Test
    method givenDateWithShortMonthAndLeapYear_thenReturn29Days (line 57) | @Test
    method testOneDayAhead (line 64) | @Test
    method testOneYearAhead (line 71) | @Test
    method testTwoYearAhead (line 78) | @Test
    method compareFutureDayDate (line 85) | @Test
    method compareSameDayDate (line 91) | @Test
    method comparePastDayDate (line 97) | @Test
    method compareFutureDate (line 103) | @Test
    method compareSameDate (line 109) | @Test
    method comparePastDate (line 115) | @Test
    method whenComparingToSameDate_thenTheyAreEqual (line 121) | @Test
    method whenComparingToDateWithDifferentYear_thenTheyAreNotEqual (line 129) | @Test
    method throwsException_whenInvalidDateIsCreated (line 137) | @Test(expected = IllegalArgumentException.class)

FILE: memento/src/test/java/com/alexstyl/specialdates/events/ShortDateLabelCreatorTest.java
  class ShortDateLabelCreatorTest (line 11) | public class ShortDateLabelCreatorTest {
    method givenDateWithYear_whenAskingYear_thenYearIsReturned (line 15) | @Test
    method givenDateWithNoYear_whenAskingForYear_NoYearIsReturned (line 22) | @Test
    method givenDateWithNoYear_whenAskingNoYear_thenNoYearIsReturned (line 29) | @Test
    method givenDateWithYear_whenAskingForNoYear_NoYearIsReturned (line 36) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/events/StandardEventTypeTest.java
  class StandardEventTypeTest (line 13) | @RunWith(MockitoJUnitRunner.class)
    method mapsTypeBirthdayIdToBirthdayEvent (line 16) | @Test
    method mapsTypeNamedayIdToNamedayEvent (line 22) | @Test
    method throwExceptionOnInvalidId (line 28) | @Test(expected = IllegalArgumentException.class)

FILE: memento/src/test/java/com/alexstyl/specialdates/events/bankholidays/BankHolidayProviderTest.java
  class BankHolidayProviderTest (line 4) | public class BankHolidayProviderTest {

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/NamedaysListTest.java
  class NamedaysListTest (line 11) | public class NamedaysListTest {
    method setUp (line 20) | @BeforeClass
    method populateNamedays (line 25) | private static void populateNamedays() {
    method whenNoYearSpecified_thenRecurringEventIsReturned (line 35) | @Test
    method whenNoYearSpecified_thenFixedYearEventIsNotReturned (line 44) | @Test
    method whenYearSpecified_thenFixedYearEventIsReturned (line 53) | @Test
    method whenYearSpecified_thenRecurringEventIsReturned (line 62) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/OrthodoxEasterCalculatorTest.java
  class OrthodoxEasterCalculatorTest (line 15) | public class OrthodoxEasterCalculatorTest {
    method initExpectedDates (line 20) | @Before
    method addDay (line 31) | private void addDay(int year, Date date) {
    method easternDatesAreCalcualtedProperly (line 35) | @Test
    method assertThatCalendarsReferToTheSameDate (line 45) | private void assertThatCalendarsReferToTheSameDate(Date expectedDate, ...

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/RomanianNamedaysTest.java
  class RomanianNamedaysTest (line 18) | public class RomanianNamedaysTest {
    method whenCreatingRomanianNamedaysAllNamesAreReturnedCorrectly (line 22) | @Test
    method whenCreatingRomanianNamedaysDateIsCalculatedProperly (line 32) | @Test
    method buildExpectedDates (line 48) | private List<Date> buildExpectedDates() {

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/calendar/resource/CharacterNodeTest.java
  class CharacterNodeTest (line 10) | public class CharacterNodeTest {
    method addingADate_isPlacedUnderTheRightNode (line 12) | @Test
    method gettingDateFromEmptyNodeReturnsNoDates (line 22) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/calendar/resource/GreeklishParserTest.java
  class GreeklishParserTest (line 13) | public class GreeklishParserTest {
    method setUp (line 17) | @Before
    method alexandrosNamedayIsReturnedCorrectly (line 25) | @Test
    method davidNamedayIsReturnedCorrectly (line 33) | @Test
    method magdoulaNamedayIsReturnedCorrectly (line 41) | @Test
    method assertThatContainsSamedate (line 49) | private void assertThatContainsSamedate(NameCelebrations dates, NameCe...

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/calendar/resource/NamedayJSONParserTest.java
  class NamedayJSONParserTest (line 17) | public class NamedayJSONParserTest {
    method setUp (line 21) | @Before
    method returningBundleHasNames (line 29) | @Test
    method alexandrosNamedayIsReturnedCorrectly (line 35) | @Test
    method davidNamedayIsReturnedCorrectly (line 42) | @Test
    method amaliaNamedayIsReturnedCorrectly (line 49) | @Test
    method assertThatContainsDate (line 56) | private static void assertThatContainsDate(NameCelebrations celebratio...

FILE: memento/src/test/java/com/alexstyl/specialdates/events/namedays/calendar/resource/TestNamedayCalendarBuilder.java
  class TestNamedayCalendarBuilder (line 8) | public class TestNamedayCalendarBuilder {
    method forLocale (line 17) | public TestNamedayCalendarBuilder forLocale(NamedayLocale locale) {
    method forYear (line 22) | public TestNamedayCalendarBuilder forYear(int year) {
    method build (line 27) | public NamedayCalendar build() {

FILE: memento/src/test/java/com/alexstyl/specialdates/events/peopleevents/ClosestEventsComparatorTest.java
  class ClosestEventsComparatorTest (line 19) | @RunWith(MockitoJUnitRunner.class)
    method bothOptionalsReturnZero (line 24) | @Test
    method onlyAIsPresentWins (line 29) | @Test
    method onlyBIsPresentWins (line 35) | @Test
    method aWinsB (line 41) | @Test
    method bWinsA (line 48) | @Test
    method aPresentButBAbsent_thenAWins (line 55) | @Test
    method sameDate_returnsZero (line 63) | @Test
    method anOptional (line 71) | private static Optional<ContactEventsOnADate> anOptional(Date date) {
    method absent (line 75) | private static Optional<ContactEventsOnADate> absent() {

FILE: memento/src/test/java/com/alexstyl/specialdates/facebook/friendimport/FacebookBirthdaysProviderTest.java
  class FacebookBirthdaysProviderTest (line 15) | public class FacebookBirthdaysProviderTest {
    method parseMockCalendar (line 21) | @Test
    method parsingRandomURLreturnsNoEvents (line 31) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/facebook/friendimport/FacebookContactFactoryTest.java
  class FacebookContactFactoryTest (line 18) | @RunWith(MockitoJUnitRunner.class)
    method setUp (line 23) | @Before
    method name (line 28) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/facebook/friendimport/MockCalendarLoader.java
  class MockCalendarLoader (line 10) | class MockCalendarLoader implements CalendarLoader {
    method loadFrom (line 12) | @Override
    method pathToMock (line 18) | private static String pathToMock() {

FILE: memento/src/test/java/com/alexstyl/specialdates/search/ContactEventTestBuilder.java
  class ContactEventTestBuilder (line 12) | final class ContactEventTestBuilder {
    method ContactEventTestBuilder (line 18) | ContactEventTestBuilder(Contact contact) {
    method buildBirthday (line 22) | ContactEvent buildBirthday(Date date) {
    method buildNameday (line 26) | ContactEvent buildNameday(Date date) {
    method buildAnniversary (line 30) | ContactEvent buildAnniversary(Date date) {

FILE: memento/src/test/java/com/alexstyl/specialdates/search/EventLabelCreatorTest.java
  class EventLabelCreatorTest (line 22) | @RunWith(MockitoJUnitRunner.class)
    method setUp (line 28) | @Before
    method birthdayWithoutYearIsCalculatedCorrectly (line 33) | @Test
    method birthdayWithYearIsCalculatedCorrectly (line 42) | @Test
    method namedayIsCalculatedCorrectly (line 53) | @Test
    method anniversaryIsCalculatedCorrectly (line 62) | @Test
    method otherIsCalculatedCorrectly (line 71) | @Test
    method customIsCalculatedCorrectly (line 80) | @Test
    method contactEventOn (line 89) | private ContactEvent contactEventOn(Date date, EventType eventType) {

FILE: memento/src/test/java/com/alexstyl/specialdates/search/NameFilterTest.java
  class NameFilterTest (line 13) | public class NameFilterTest {
    method setUp (line 17) | @Before
    method givenTheNameInGreeklish_thenTheNameIsReturned (line 26) | @Test
    method givenPartOfTheNameInGreeklish_thenTheNameIsReturned (line 32) | @Test
    method givenTheNameInGreek_thenTheNameIsReturned (line 38) | @Test
    method givenPartOfTheNameInGreek_thenTheNameIsReturned (line 44) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/search/NameMatcherTest.java
  class NameMatcherTest (line 9) | public class NameMatcherTest {
    method testFirstLetterOfFirstName_returnsTrue (line 20) | @Test
    method testFirstLetterOfLastName_returnsTrue (line 26) | @Test
    method testFullDisplayName_returnsTrue (line 32) | @Test
    method testPartOfFullName_returnsTrue (line 38) | @Test
    method givenDisplayNameMatches (line 44) | private boolean givenDisplayNameMatches(String query) {

FILE: memento/src/test/java/com/alexstyl/specialdates/timeofday/TimeOfDayTest.java
  class TimeOfDayTest (line 11) | @RunWith(MockitoJUnitRunner.class)
    method toStringReturnsTheSpecifiedLabel (line 14) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/upcoming/MonthLabelsTest.java
  class MonthLabelsTest (line 10) | public class MonthLabelsTest {
    method setup (line 17) | @Before
    method givenTheFirstMonthOfTheYear_thenTheCorrectLabelIsReturned (line 22) | @Test
    method givenTheLastMonthOfTheYear_thenTheCorrectLabelIsReturned (line 29) | @Test
    method copyOfMonthCreatesCorrectCoppy (line 36) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/upcoming/TimePeriodTest.java
  class TimePeriodTest (line 14) | @RunWith(MockitoJUnitRunner.class)
    method dateBetweenPeriod (line 17) | @Test
    method dateOutsideOfPeriod (line 26) | @Test
    method invalidPeriodThrowsException (line 35) | @Test(expected = IllegalArgumentException.class)

FILE: memento/src/test/java/com/alexstyl/specialdates/upcoming/widget/today/PercentToValueConverterTest.java
  class PercentToValueConverterTest (line 7) | public class PercentToValueConverterTest {
    method testPercentToValue (line 17) | @Test
    method testValueToPercentage (line 26) | @Test

FILE: memento/src/test/java/com/alexstyl/specialdates/util/HashMapListTest.java
  class HashMapListTest (line 9) | public class HashMapListTest {
    method name (line 11) | @Test
Condensed preview — 903 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,060K chars).
[
  {
    "path": ".circleci/ci-scripts/accept-android-licenses.sh",
    "chars": 577,
    "preview": "#!/usr/bin/env bash\n\nexport LICENSES_PATH=\"$ANDROID_HOME/licenses\"\nexport ANDROID_SDK_LICENSE_PATH=\"$LICENSES_PATH/andro"
  },
  {
    "path": ".circleci/ci-scripts/ensure-sdkmanager.sh",
    "chars": 435,
    "preview": "#!/usr/bin/env bash\n\nexport TOOLS_BIN_PATH=\"$ANDROID_HOME/tools/bin\"\nexport SDKMANAGER_PATH=\"$TOOLS_BIN_PATH/sdkmanager\""
  },
  {
    "path": ".circleci/ci-scripts/mock-google-services.json",
    "chars": 3718,
    "preview": "{\n  \"project_info\": {\n    \"project_id\": \"mockproject-1234\",\n    \"project_number\": \"123456789000\",\n    \"name\": \"FirebaseQ"
  },
  {
    "path": ".circleci/config.yml",
    "chars": 1690,
    "preview": "version: 2\n\njobs:\n  build:\n    docker:\n      - image: circleci/android:api-27-alpha\n\n    environment:\n      ANDROID_HOME"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 2055,
    "preview": "## Ways of contributing\n\nThere are a few ways of contributing into the project:\n\n1. Bug fixes\n2. Check the [Issues page]"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 430,
    "preview": "#### Short Description\n\n_Give a brief description of what the issue is_\n\n##### Steps to reproduce\n _This is just an exam"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 299,
    "preview": "#### Description\n\n_Give a brief explanation of what is the problem/feature you are working on and what this PR contains_"
  },
  {
    "path": ".gitignore",
    "chars": 507,
    "preview": "# Built application files\n*.apk\n*.ap_\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated file"
  },
  {
    "path": "LICENSE",
    "chars": 1066,
    "preview": "MIT License\n\nCopyright (c) 2016 Alex Styl\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
  },
  {
    "path": "PEOPLE.md",
    "chars": 1747,
    "preview": "Memento Calendar could not be in the amazing shape it is today if it wasn't for the following amazing people (alphabetic"
  },
  {
    "path": "README.md",
    "chars": 4124,
    "preview": "# Archived\n\nThe repo is now archived and no new commits will take place. Thank for your support and contributions. \n\n\n# "
  },
  {
    "path": "android_common/build.gradle",
    "chars": 792,
    "preview": "apply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\napply from: '../versions.gradle'\n\nandroid {\n\n    comp"
  },
  {
    "path": "android_common/src/main/AndroidManifest.xml",
    "chars": 95,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest package=\"com.alexstyl.specialdates.common\" />\n"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/android/AndroidLogger.kt",
    "chars": 314,
    "preview": "package com.alexstyl.android\n\nimport android.util.Log\nimport com.alexstyl.Logger\n\nclass AndroidLogger : Logger {\n    ove"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/android/Version.kt",
    "chars": 604,
    "preview": "package com.alexstyl.android\n\nimport android.os.Build\n\n\nobject Version {\n\n    fun hasJellyBean(): Boolean {\n        retu"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/android/ViewVisibility.java",
    "chars": 334,
    "preview": "package com.alexstyl.android;\n\nimport android.support.annotation.IntDef;\nimport android.view.View;\n\nimport java.lang.ann"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/android/preferences/widget/TimePreference.java",
    "chars": 2659,
    "preview": "\npackage com.alexstyl.android.preferences.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/android/widget/AppWidgetId.java",
    "chars": 220,
    "preview": "package com.alexstyl.android.widget;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.RetentionPolicy"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/resources/AndroidDimensionResources.java",
    "chars": 446,
    "preview": "package com.alexstyl.resources;\n\nimport android.content.res.Resources;\nimport android.support.annotation.DimenRes;\n\nfina"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/resources/DimensionResources.java",
    "chars": 204,
    "preview": "package com.alexstyl.resources;\n\nimport android.support.annotation.DimenRes;\nimport android.support.annotation.Px;\n\npubl"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/specialdates/AndroidStrings.kt",
    "chars": 5548,
    "preview": "package com.alexstyl.specialdates\n\nimport android.content.res.Resources\nimport com.alexstyl.specialdates.common.R\nimport"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/specialdates/TextViewLabelSetter.java",
    "chars": 352,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.widget.TextView;\n\npublic class TextViewLabelSetter implements LabelSe"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/specialdates/date/IntentDateExtensions.kt",
    "chars": 898,
    "preview": "package com.alexstyl.specialdates.date\n\nimport android.content.Intent\n\nval EXTRA_DAY_OF_MONTH = \"extra:day_of_month\"\nval"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/specialdates/events/database/EventColumns.java",
    "chars": 630,
    "preview": "package com.alexstyl.specialdates.events.database;\n\npublic interface EventColumns {\n    /**\n     * A value of {@link Eve"
  },
  {
    "path": "android_common/src/main/java/com/alexstyl/specialdates/wear/SharedConstants.java",
    "chars": 359,
    "preview": "package com.alexstyl.specialdates.wear;\n\npublic final class SharedConstants {\n\n    public static final String NEXT_CONTA"
  },
  {
    "path": "android_common/src/main/res/values/colors.xml",
    "chars": 1525,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n  <color name=\"main_grey\">#eeeeee</color>\n  <color name=\"light_grey\""
  },
  {
    "path": "android_common/src/main/res/values/strings-non-translatable.xml",
    "chars": 943,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n  tools:ignore=\"Missing"
  },
  {
    "path": "android_common/src/main/res/values/strings.xml",
    "chars": 15859,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-cs/strings.xml",
    "chars": 10386,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-de/strings.xml",
    "chars": 3192,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-el/strings.xml",
    "chars": 13350,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-fr/strings.xml",
    "chars": 5331,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-it/strings.xml",
    "chars": 12776,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-lv/bools.xml",
    "chars": 108,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<bool name=\"isNamedaySupported\">true</bool>\n</resources>"
  },
  {
    "path": "android_common/src/main/res/values-lv-rLV/strings.xml",
    "chars": 12741,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-nl/strings.xml",
    "chars": 13071,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- The original name of the app is Memento Calendar. In Greek t"
  },
  {
    "path": "android_common/src/main/res/values-sk/bool.xml",
    "chars": 111,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"isNamedaySupported\">true</bool>\n</resources>"
  },
  {
    "path": "android_mobile/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "android_mobile/build.gradle",
    "chars": 4185,
    "preview": "plugins {\n    id \"io.gitlab.arturbosch.detekt\" version \"1.0.0.M13.2\"\n}\n\napply from: '../versions.gradle'\napply plugin: '"
  },
  {
    "path": "android_mobile/google_services.gradle",
    "chars": 642,
    "preview": "task copyGoogleServicesData() {\n\n    doLast {\n\n        if (!file(\"$rootDir/android_mobile/google-services.json\").exists("
  },
  {
    "path": "android_mobile/proguard-rules.pro",
    "chars": 1085,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /U"
  },
  {
    "path": "android_mobile/src/debug/AndroidManifest.xml",
    "chars": 737,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  xmlns:tool"
  },
  {
    "path": "android_mobile/src/debug/assets/mock/facebook-calendar.ics",
    "chars": 542,
    "preview": "BEGIN:VCALENDAR\r\nPRODID:-//Facebook//NONSGML Facebook Events V1.0//EN\r\nX-WR-CALNAME:Friends' Birthdays\r\nX-PUBLISHED-TTL:"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/DebugAppComponent.java",
    "chars": 1271,
    "preview": "package com.alexstyl.specialdates;\n\nimport com.alexstyl.resources.ResourcesModule;\nimport com.alexstyl.specialdates.cont"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/DebugApplication.java",
    "chars": 1079,
    "preview": "package com.alexstyl.specialdates;\n\nimport com.alexstyl.resources.ResourcesModule;\nimport com.alexstyl.specialdates.even"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/OptionalDependencies.java",
    "chars": 554,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.app.Application;\nimport android.content.Context;\n\nimport com.facebook"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugActivity.java",
    "chars": 399,
    "preview": "package com.alexstyl.specialdates.debug;\n\nimport android.os.Bundle;\n\nimport com.alexstyl.specialdates.R;\nimport com.alex"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugFragment.kt",
    "chars": 13428,
    "preview": "package com.alexstyl.specialdates.debug\n\nimport android.app.Activity\nimport android.app.DatePickerDialog\nimport android."
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugModule.java",
    "chars": 995,
    "preview": "package com.alexstyl.specialdates.debug;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.dailyreminde"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/debug/DebugPreferences.java",
    "chars": 610,
    "preview": "package com.alexstyl.specialdates.debug;\n\nimport android.content.Context;\nimport android.support.annotation.StringRes;\n\n"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/donate/DebugDonationPreferences.java",
    "chars": 879,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.EasyPrefere"
  },
  {
    "path": "android_mobile/src/debug/java/com/alexstyl/specialdates/events/peopleevents/DebugPeopleEventsUpdater.java",
    "chars": 843,
    "preview": "package com.alexstyl.specialdates.events.peopleevents;\n\nimport com.alexstyl.specialdates.events.namedays.NamedayDatabase"
  },
  {
    "path": "android_mobile/src/debug/res/layout/activity_debug.xml",
    "chars": 288,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<fragment xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  android:id"
  },
  {
    "path": "android_mobile/src/debug/res/layout/debug_activity_animations.xml",
    "chars": 509,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  xmln"
  },
  {
    "path": "android_mobile/src/debug/res/layout/debug_activity_mixing_colors.xml",
    "chars": 405,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  androi"
  },
  {
    "path": "android_mobile/src/main/AndroidManifest.xml",
    "chars": 9795,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:to"
  },
  {
    "path": "android_mobile/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl",
    "chars": 17871,
    "preview": "/*\n * Copyright (C) 2012 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android_mobile/src/main/java/android/support/v4/preference/PreferenceFragment.java",
    "chars": 10451,
    "preview": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android_mobile/src/main/java/android/support/v4/preference/PreferenceManagerCompat.java",
    "chars": 8844,
    "preview": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/android/Bitmap.kt",
    "chars": 737,
    "preview": "package com.alexstyl.android\n\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.graphics.draw"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/android/SimpleAnimatorListener.java",
    "chars": 531,
    "preview": "package com.alexstyl.android;\n\nimport android.animation.Animator;\n\npublic class SimpleAnimatorListener implements Animat"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/android/Uri.kt",
    "chars": 176,
    "preview": "package com.alexstyl.android\n\nimport android.net.Uri\nimport java.net.URI\n\nfun URI.toUri(): Uri = Uri.parse(this.toString"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/android/preferences/PreferenceKeyId.java",
    "chars": 81,
    "preview": "package com.alexstyl.android.preferences;\n\npublic @interface PreferenceKeyId {\n}\n"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/resources/AndroidColors.kt",
    "chars": 1538,
    "preview": "package com.alexstyl.resources\n\nimport android.content.Context\nimport android.support.v4.content.ContextCompat\nimport co"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/resources/ResourcesModule.java",
    "chars": 921,
    "preview": "package com.alexstyl.resources;\n\nimport android.content.Context;\nimport android.content.res.Resources;\n\nimport com.alexs"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/AndroidApplicationModule.java",
    "chars": 2329,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.app.AlarmManager;\nimport android.app.NotificationManager;\nimport andr"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/AppComponent.java",
    "chars": 5837,
    "preview": "package com.alexstyl.specialdates;\n\nimport com.alexstyl.resources.ResourcesModule;\nimport com.alexstyl.specialdates.adde"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/DeviceConfigurationUpdatedReceiver.java",
    "chars": 1081,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport and"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/EasyPreferences.java",
    "chars": 3642,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport and"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/ExternalNavigator.java",
    "chars": 5353,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.app.Activity;\nimport android.content.ActivityNotFoundException;\nimpor"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/FabricTracker.java",
    "chars": 1949,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\n\nimport c"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/JobsCreator.kt",
    "chars": 995,
    "preview": "package com.alexstyl.specialdates\n\nimport com.alexstyl.specialdates.dailyreminder.DailyReminderJob\nimport com.alexstyl.s"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/MementoApplication.java",
    "chars": 5091,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.app.AlarmManager;\nimport android.content.Context;\nimport android.supp"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/MementoConstants.kt",
    "chars": 108,
    "preview": "package com.alexstyl.specialdates\n\nobject MementoConstants {\n    var PACKAGE = BuildConfig.APPLICATION_ID\n}\n"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/SQLArgumentBuilder.java",
    "chars": 803,
    "preview": "package com.alexstyl.specialdates;\n\nimport com.alexstyl.specialdates.date.Date;\n\npublic final class SQLArgumentBuilder {"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/ShareAppIntentCreator.java",
    "chars": 667,
    "preview": "package com.alexstyl.specialdates;\n\nimport android.content.Intent;\n\npublic class ShareAppIntentCreator {\n\n    private st"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AccountData.java",
    "chars": 605,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.graphics.drawable.Drawable;\n\npublic class AccountData {\n\n   "
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AddEventActivity.kt",
    "chars": 11800,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.Manifest\nimport android.annotation.TargetApi\nimport android.a"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AddEventModule.kt",
    "chars": 2842,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.content.ContentResolver\nimport android.content.Context\nimport"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AndroidAddEventView.kt",
    "chars": 2168,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.graphics.Bitmap\nimport android.view.View\nimport com.alexstyl."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AndroidContactOperationsExecutor.kt",
    "chars": 3416,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.content.ContentProviderOperation\nimport android.content.Conte"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/AndroidEventIcons.kt",
    "chars": 713,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport com.alexstyl.specialdates.R\nimport com.alexstyl.specialdates.events.d"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactDetailsListener.java",
    "chars": 433,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport com.alexstyl.specialdates.contact.Contact;\nimport com.alexstyl.speci"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactEventViewHolder.java",
    "chars": 1499,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.view.View;\nim"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactEventsAdapter.java",
    "chars": 3343,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.support.v7.wi"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ContactSuggestionViewHolder.java",
    "chars": 1326,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.text.Editable"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/DiscardPromptDialog.java",
    "chars": 1330,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.app.Activity;\nimport android.app.Dialog;\nimport android.cont"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/EventDatePickerDialogFragment.java",
    "chars": 4487,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.app.Activity;\nimport android.app.Dialog;\nimport android.cont"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ImageIntentFactory.java",
    "chars": 872,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.provi"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/OnCameraClickedListener.java",
    "chars": 160,
    "preview": "package com.alexstyl.specialdates.addevent;\n\ninterface OnCameraClickedListener {\n    void onPictureRetakenRequested();\n "
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/OperationsFactory.kt",
    "chars": 7089,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.content.ContentProviderOperation\nimport android.provider.Cont"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToastDisplayer.kt",
    "chars": 299,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.content.Context\nimport android.widget.Toast\n\nclass ToastDispl"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundAnimator.java",
    "chars": 132,
    "preview": "package com.alexstyl.specialdates.addevent;\n\npublic interface ToolbarBackgroundAnimator {\n    void fadeOut();\n\n    void "
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundFadingAnimator.java",
    "chars": 1649,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.graphics.drawable.ColorDrawable;\nimport android.graphics.dra"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ToolbarBackgroundStubAnimator.java",
    "chars": 273,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nfinal class ToolbarBackgroundStubAnimator implements ToolbarBackgroundAnima"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/UriFilePathProvider.kt",
    "chars": 1010,
    "preview": "package com.alexstyl.specialdates.addevent\n\nimport android.content.Context\nimport android.net.Uri\nimport android.os.Envi"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/WriteableAccountsProvider.java",
    "chars": 2347,
    "preview": "package com.alexstyl.specialdates.addevent;\n\nimport android.accounts.Account;\nimport android.accounts.AccountManager;\nim"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/BottomSheetPicturesDialog.kt",
    "chars": 4867,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet\n\nimport android.app.Activity\nimport android.app.Dialog\nimport and"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/ClearImageViewHolder.java",
    "chars": 958,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.v"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/ImagePickerOptionViewHolder.kt",
    "chars": 760,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet\n\nimport android.support.v7.widget.RecyclerView\nimport android.vie"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/ImagePickerOptionsAdapter.java",
    "chars": 3126,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet;\n\nimport android.support.v7.widget.RecyclerView;\nimport android.v"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/IntentResolver.kt",
    "chars": 869,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet\n\nimport android.content.Intent\nimport android.content.pm.PackageM"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/PhotoPickerViewModel.kt",
    "chars": 305,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet\n\nimport android.content.Intent\nimport android.graphics.drawable.D"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/bottomsheet/PhotoPickerViewModelFactory.kt",
    "chars": 1499,
    "preview": "package com.alexstyl.specialdates.addevent.bottomsheet\n\nimport android.content.Intent\nimport android.content.pm.PackageM"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/AvatarPickerView.java",
    "chars": 2729,
    "preview": "package com.alexstyl.specialdates.addevent.ui;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport a"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/ContactSuggestionView.java",
    "chars": 4088,
    "preview": "package com.alexstyl.specialdates.addevent.ui;\n\nimport android.content.Context;\nimport android.support.transition.Transi"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/ContactsAdapter.java",
    "chars": 2847,
    "preview": "package com.alexstyl.specialdates.addevent.ui;\n\nimport android.support.annotation.NonNull;\nimport android.view.LayoutInf"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/DeviceContactsFilter.kt",
    "chars": 1359,
    "preview": "package com.alexstyl.specialdates.addevent.ui\n\nimport android.widget.Filter\n\nimport com.alexstyl.specialdates.addevent.C"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/addevent/ui/EventDatePicker.java",
    "chars": 5505,
    "preview": "package com.alexstyl.specialdates.addevent.ui;\n\nimport android.content.Context;\nimport android.support.transition.Transi"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/Action.java",
    "chars": 448,
    "preview": "package com.alexstyl.specialdates.analytics;\n\npublic enum Action {\n    ADD_BIRTHDAY(\"add_bday\"),\n    DAILY_REMINDER(\"rem"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/ActionWithParameters.java",
    "chars": 568,
    "preview": "package com.alexstyl.specialdates.analytics;\n\npublic final class ActionWithParameters {\n\n    private final Action action"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/AnalyticsModule.kt",
    "chars": 924,
    "preview": "package com.alexstyl.specialdates.analytics\n\nimport android.content.Context\n\nimport com.alexstyl.specialdates.common.Bui"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/CompositeAnalytics.kt",
    "chars": 3977,
    "preview": "package com.alexstyl.specialdates.analytics\n\nimport com.alexstyl.specialdates.TimeOfDay\nimport com.alexstyl.specialdates"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/FirebaseAnalyticsImpl.kt",
    "chars": 4794,
    "preview": "package com.alexstyl.specialdates.analytics\n\nimport android.os.Bundle\nimport android.support.annotation.NonNull\nimport a"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/analytics/MixPanel.kt",
    "chars": 4856,
    "preview": "package com.alexstyl.specialdates.analytics\n\nimport com.alexstyl.specialdates.TimeOfDay\nimport com.alexstyl.specialdates"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/AndroidContactFactory.kt",
    "chars": 3686,
    "preview": "package com.alexstyl.specialdates.contact\n\nimport android.content.ContentResolver\nimport android.content.ContentUris\nimp"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/AndroidContactsProviderSource.kt",
    "chars": 969,
    "preview": "package com.alexstyl.specialdates.contact\n\ninternal class AndroidContactsProviderSource(private val cache: ContactCache,"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/AndroidContactsQuery.java",
    "chars": 649,
    "preview": "package com.alexstyl.specialdates.contact;\n\nimport android.net.Uri;\nimport android.provider.ContactsContract;\nimport and"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/ContactIntentExtractor.kt",
    "chars": 1284,
    "preview": "package com.alexstyl.specialdates.contact\n\nimport android.content.Intent\nimport com.alexstyl.specialdates.CrashAndErrorT"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/ContactsModule.kt",
    "chars": 1577,
    "preview": "package com.alexstyl.specialdates.contact\n\nimport android.content.ContentResolver\nimport com.alexstyl.specialdates.Crash"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/EmptyContactSource.kt",
    "chars": 465,
    "preview": "package com.alexstyl.specialdates.contact\n\nclass EmptyContactSource(val source: Int) : ContactsProviderSource {\n\n    ove"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/contact/FacebookContactsSource.kt",
    "chars": 3650,
    "preview": "package com.alexstyl.specialdates.contact\n\nimport android.database.Cursor\nimport com.alexstyl.specialdates.contact.Conta"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/AlarmManagerCompat.java",
    "chars": 900,
    "preview": "package com.alexstyl.specialdates.dailyreminder;\n\nimport android.app.AlarmManager;\nimport android.app.PendingIntent;\n\nim"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/AndroidDailyReminderNotifier.kt",
    "chars": 9888,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport android.app.NotificationManager\nimport android.app.PendingIntent"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/AndroidDailyReminderScheduler.kt",
    "chars": 728,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport com.alexstyl.specialdates.TimeOfDay\nimport com.evernote.android."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/AndroidDailyReminderViewModelFactory.kt",
    "chars": 3937,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport android.graphics.Typeface\nimport android.text.Spannable\nimport a"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderDebugPreferences.java",
    "chars": 2027,
    "preview": "package com.alexstyl.specialdates.dailyreminder;\n\nimport android.content.Context;\nimport android.support.v4.util.Pair;\n\n"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderJob.kt",
    "chars": 565,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport com.evernote.android.job.DailyJob\n\nclass DailyReminderJob(privat"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderModule.java",
    "chars": 3473,
    "preview": "package com.alexstyl.specialdates.dailyreminder;\n\nimport android.app.NotificationManager;\nimport android.content.Context"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderOreoChannelCreator.kt",
    "chars": 3663,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport android.annotation.TargetApi\nimport android.app.NotificationChan"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/DailyReminderPreferences.kt",
    "chars": 1593,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport android.media.RingtoneManager\nimport android.net.Uri\nimport com."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/NoActions.kt",
    "chars": 794,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport com.alexstyl.specialdates.person.ContactActions\nimport java.net."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/NotificationConstants.kt",
    "chars": 640,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nimport com.alexstyl.specialdates.BuildConfig\n\nobject NotificationConsta"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/NotificationDailyReminderView.kt",
    "chars": 263,
    "preview": "package com.alexstyl.specialdates.dailyreminder\n\nclass NotificationDailyReminderView(private val notifier: DailyReminder"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/AndroidContactActionsView.kt",
    "chars": 579,
    "preview": "package com.alexstyl.specialdates.dailyreminder.actions\n\nimport com.alexstyl.specialdates.contact.Contact\nimport com.ale"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/ContactActionsModule.java",
    "chars": 912,
    "preview": "package com.alexstyl.specialdates.dailyreminder.actions;\n\nimport com.alexstyl.specialdates.CrashAndErrorTracker;\nimport "
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/ContactActionsPresenter.kt",
    "chars": 1867,
    "preview": "package com.alexstyl.specialdates.dailyreminder.actions\n\nimport com.alexstyl.specialdates.contact.Contact\nimport com.ale"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/ContactActionsView.kt",
    "chars": 288,
    "preview": "package com.alexstyl.specialdates.dailyreminder.actions\n\nimport com.alexstyl.specialdates.contact.Contact\nimport com.ale"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/dailyreminder/actions/PersonActionsActivity.kt",
    "chars": 3383,
    "preview": "package com.alexstyl.specialdates.dailyreminder.actions\n\nimport android.content.Context\nimport android.content.Intent\nim"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/date/AndroidDateLabelCreator.kt",
    "chars": 878,
    "preview": "package com.alexstyl.specialdates.date\n\nimport android.content.Context\nimport android.text.format.DateUtils\n\nclass Andro"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/date/DateModule.java",
    "chars": 527,
    "preview": "package com.alexstyl.specialdates.date;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.CrashAndError"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonation.java",
    "chars": 817,
    "preview": "package com.alexstyl.specialdates.donate;\n\nenum AndroidDonation implements Donation {\n    SKU_DONATE_1(\"1€\", \"donate_1\")"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonationConstants.java",
    "chars": 688,
    "preview": "package com.alexstyl.specialdates.donate;\n\npublic final class AndroidDonationConstants {\n\n    private AndroidDonationCon"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/AndroidDonationService.java",
    "chars": 4196,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.app.Activity;\nimport android.widget.Toast;\n\nimport com.alexsty"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonateActivity.java",
    "chars": 5745,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonateModule.java",
    "chars": 658,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.donate.util"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonatePresenter.java",
    "chars": 1337,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport com.alexstyl.specialdates.Strings;\nimport com.alexstyl.specialdates.La"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/DonationPreferences.java",
    "chars": 796,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.EasyPrefere"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/SimpleOnSeekBarChangeListener.java",
    "chars": 482,
    "preview": "package com.alexstyl.specialdates.donate;\n\nimport android.widget.SeekBar;\n\nclass SimpleOnSeekBarChangeListener implement"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabBroadcastReceiver.java",
    "chars": 2112,
    "preview": "/* Copyright (c) 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabException.java",
    "chars": 1505,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabHelper.java",
    "chars": 50052,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/IabResult.java",
    "chars": 1755,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Inventory.java",
    "chars": 3176,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Purchase.java",
    "chars": 2515,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/Security.java",
    "chars": 5019,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/donate/util/SkuDetails.java",
    "chars": 2262,
    "preview": "/* Copyright (c) 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/ContactsObserver.java",
    "chars": 1219,
    "preview": "package com.alexstyl.specialdates.events;\n\nimport android.content.ContentResolver;\nimport android.database.ContentObserv"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/PreferenceChangedEventsUpdateTrigger.java",
    "chars": 1598,
    "preview": "package com.alexstyl.specialdates.events;\n\nimport android.content.SharedPreferences;\nimport android.content.res.Resource"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/bankholidays/BankHolidaysModule.java",
    "chars": 900,
    "preview": "package com.alexstyl.specialdates.events.bankholidays;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdate"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/bankholidays/BankHolidaysPreferences.java",
    "chars": 534,
    "preview": "package com.alexstyl.specialdates.events.bankholidays;\n\nimport com.alexstyl.specialdates.EasyPreferences;\nimport com.ale"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/database/ContactColumns.java",
    "chars": 186,
    "preview": "package com.alexstyl.specialdates.events.database;\n\n@SuppressWarnings(\"all\")\ninterface ContactColumns {\n    String CONTA"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/database/DatabaseContract.java",
    "chars": 369,
    "preview": "package com.alexstyl.specialdates.events.database;\n\nimport android.provider.BaseColumns;\n\npublic final class DatabaseCon"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/database/EventSQLiteOpenHelper.kt",
    "chars": 1852,
    "preview": "package com.alexstyl.specialdates.events.database\n\nimport android.content.Context\nimport android.database.sqlite.SQLiteD"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayModule.java",
    "chars": 2508,
    "preview": "package com.alexstyl.specialdates.events.namedays;\n\nimport android.content.Context;\nimport android.content.res.Resources"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/NamedayPreferences.java",
    "chars": 1749,
    "preview": "package com.alexstyl.specialdates.events.namedays;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.Ea"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/AndroidNamedaysOnADayView.kt",
    "chars": 292,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nclass AndroidNamedaysOnADayView(private val screenAdapter: N"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/CelebratingContactViewHolder.kt",
    "chars": 1119,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.view.View\nimport android.widget.TextView\nimpo"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NameViewHolder.kt",
    "chars": 448,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.view.View\nimport android.widget.TextView\nimpo"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedayScreenViewHolder.kt",
    "chars": 380,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.support.v7.widget.RecyclerView\nimport android"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysInADayModule.java",
    "chars": 1165,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity;\n\nimport com.alexstyl.specialdates.contact.ContactsProvider;\n"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysOnADayActivity.kt",
    "chars": 3102,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.content.Context\nimport android.content.Intent"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysOnADayNavigator.kt",
    "chars": 547,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.app.Activity\nimport com.alexstyl.specialdates"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysScreenAdapter.java",
    "chars": 1856,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity;\n\nimport android.support.annotation.NonNull;\nimport android.s"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysScreenViewHolderFactory.kt",
    "chars": 1424,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity\n\nimport android.view.LayoutInflater\nimport android.view.ViewG"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/activity/NamedaysViewModelDiff.java",
    "chars": 1169,
    "preview": "package com.alexstyl.specialdates.events.namedays.activity;\n\nimport android.support.v7.util.DiffUtil;\n\nimport java.util."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/namedays/calendar/resource/AndroidJSONResourceLoader.kt",
    "chars": 1637,
    "preview": "package com.alexstyl.specialdates.events.namedays.calendar.resource\n\nimport android.content.res.Resources\nimport com.ale"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/AndroidPeopleEventsPersister.kt",
    "chars": 4664,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.content.ContentValues\nimport android.database.sqli"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/AndroidPeopleEventsProvider.kt",
    "chars": 10981,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.database.Cursor\nimport android.database.MergeCurso"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/AndroidPeopleEventsRepository.kt",
    "chars": 4261,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.content.ContentResolver\nimport android.database.Cu"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/AndroidUpcomingEventSettings.kt",
    "chars": 1164,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.content.Context\n\nimport com.alexstyl.specialdates."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/ContactEventsMarshaller.java",
    "chars": 2165,
    "preview": "package com.alexstyl.specialdates.events.peopleevents;\n\nimport android.content.ContentValues;\n\nimport com.alexstyl.speci"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/CustomEventProvider.kt",
    "chars": 1507,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.content.ContentResolver\nimport android.provider.Co"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/events/peopleevents/PeopleEventsModule.kt",
    "chars": 5499,
    "preview": "package com.alexstyl.specialdates.events.peopleevents\n\nimport android.appwidget.AppWidgetManager\nimport android.content."
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/AndroidFacebookPreferences.java",
    "chars": 1204,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nimport com.alexstyl.specialdates.EasyPreferences;\nimport com.alexstyl.speci"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookLogoutService.java",
    "chars": 2386,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nimport com.alexstyl.specialdates.events.peopleevents.UpcomingEventsViewRefr"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookModule.java",
    "chars": 560,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nimport android.content.Context;\n\nimport com.alexstyl.specialdates.EasyPrefe"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfileActivity.java",
    "chars": 4879,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.Men"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfilePresenter.java",
    "chars": 762,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nclass FacebookProfilePresenter {\n    private final FacebookLogoutService se"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/FacebookProfileView.java",
    "chars": 130,
    "preview": "package com.alexstyl.specialdates.facebook;\n\ninterface FacebookProfileView {\n    void display(UserCredentials userCreden"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/OnFacebookLogOutCallback.java",
    "chars": 109,
    "preview": "package com.alexstyl.specialdates.facebook;\n\ninterface OnFacebookLogOutCallback {\n    void onUserLogOut();\n}\n"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/ScreenOrientationLock.java",
    "chars": 1285,
    "preview": "package com.alexstyl.specialdates.facebook;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/CalendarURLCreator.java",
    "chars": 732,
    "preview": "package com.alexstyl.specialdates.facebook.friendimport;\n\nimport com.alexstyl.specialdates.CrashAndErrorTracker;\nimport "
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsIntentService.java",
    "chars": 3742,
    "preview": "package com.alexstyl.specialdates.facebook.friendimport;\n\nimport android.app.IntentService;\nimport android.app.Notificat"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsPersister.java",
    "chars": 771,
    "preview": "package com.alexstyl.specialdates.facebook.friendimport;\n\nimport com.alexstyl.specialdates.date.ContactEvent;\nimport com"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/friendimport/FacebookFriendsScheduler.java",
    "chars": 1215,
    "preview": "package com.alexstyl.specialdates.facebook.friendimport;\n\nimport android.app.AlarmManager;\nimport android.app.PendingInt"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/CookieResetter.java",
    "chars": 1963,
    "preview": "package com.alexstyl.specialdates.facebook.login;\n\nimport android.webkit.CookieManager;\nimport android.webkit.ValueCallb"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/CredentialsExtractor.java",
    "chars": 2084,
    "preview": "package com.alexstyl.specialdates.facebook.login;\n\nimport com.alexstyl.specialdates.facebook.UserCredentials;\n\nimport ja"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FBImportClient.java",
    "chars": 2324,
    "preview": "package com.alexstyl.specialdates.facebook.login;\n\nimport android.graphics.Bitmap;\nimport android.webkit.WebSettings;\nim"
  },
  {
    "path": "android_mobile/src/main/java/com/alexstyl/specialdates/facebook/login/FacebookImportView.java",
    "chars": 234,
    "preview": "package com.alexstyl.specialdates.facebook.login;\n\nimport com.alexstyl.specialdates.facebook.UserCredentials;\n\ninterface"
  }
]

// ... and 703 more files (download for full content)

About this extraction

This page contains the full source code of the alexstyl/Memento-Calendar GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 903 files (1.7 MB), approximately 487.1k tokens, and a symbol index with 1710 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!