gitextract_7hdornwr/ ├── .editorconfig ├── .github/ │ └── ISSUE_TEMPLATE/ │ └── bug-problem-report.md ├── .gitignore ├── LICENSE ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ └── release_notes.txt │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── showly_oss/ │ │ │ ├── App.kt │ │ │ ├── di/ │ │ │ │ └── module/ │ │ │ │ ├── PreferencesModule.kt │ │ │ │ ├── ServicesModule.kt │ │ │ │ └── WorkModule.kt │ │ │ ├── fcm/ │ │ │ │ └── FcmExtra.kt │ │ │ ├── ui/ │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── main/ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── MainUiState.kt │ │ │ │ │ ├── MainViewModel.kt │ │ │ │ │ ├── cases/ │ │ │ │ │ │ ├── MainAnnouncementsCase.kt │ │ │ │ │ │ ├── MainClearingCase.kt │ │ │ │ │ │ ├── MainInitialsCase.kt │ │ │ │ │ │ ├── MainModesCase.kt │ │ │ │ │ │ ├── MainRateAppCase.kt │ │ │ │ │ │ ├── MainSettingsCase.kt │ │ │ │ │ │ ├── MainTipsCase.kt │ │ │ │ │ │ ├── MainTraktCase.kt │ │ │ │ │ │ └── deeplink/ │ │ │ │ │ │ ├── ImdbDeepLinkCase.kt │ │ │ │ │ │ ├── MainDeepLinksCase.kt │ │ │ │ │ │ ├── TmdbDeepLinkCase.kt │ │ │ │ │ │ └── TraktDeepLinkCase.kt │ │ │ │ │ └── delegates/ │ │ │ │ │ └── TipsDelegate.kt │ │ │ │ └── views/ │ │ │ │ ├── BottomMenuView.kt │ │ │ │ ├── WelcomeLanguageView.kt │ │ │ │ ├── WelcomeNoteView.kt │ │ │ │ └── WhatsNewView.kt │ │ │ └── utilities/ │ │ │ └── deeplink/ │ │ │ ├── DeepLinkBundle.kt │ │ │ ├── DeepLinkResolver.kt │ │ │ ├── DeepLinkSource.kt │ │ │ └── resolvers/ │ │ │ ├── ImdbSourceResolver.kt │ │ │ ├── SourceResolver.kt │ │ │ ├── TmdbSourceResolver.kt │ │ │ └── TraktSourceResolver.kt │ │ ├── play/ │ │ │ └── release-notes/ │ │ │ └── en-GB/ │ │ │ └── default.txt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── bg_dialog.xml │ │ │ ├── ic_eye_off.xml │ │ │ ├── ic_languages.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_launcher_mono.xml │ │ │ └── selector_bottom_menu.xml │ │ ├── layout/ │ │ │ ├── activity_main.xml │ │ │ ├── view_bottom_menu.xml │ │ │ ├── view_welcome_language.xml │ │ │ ├── view_welcome_note.xml │ │ │ └── view_whats_new.xml │ │ ├── menu/ │ │ │ └── bottom_navigation_menu.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ ├── values-zh/ │ │ │ └── strings.xml │ │ └── xml/ │ │ ├── locales_config.xml │ │ └── shortcuts.xml │ └── test/ │ └── java/ │ ├── BaseMockTest.kt │ └── com/ │ └── michaldrabik/ │ └── showly_oss/ │ └── ui/ │ └── main/ │ └── cases/ │ ├── MainRateAppCaseTest.kt │ └── MainTipsCaseTest.kt ├── assets/ │ ├── codestyle.xml │ ├── graphics/ │ │ ├── video_preview_feature_graphic.xcf │ │ └── web_feature_graphic.xcf │ └── screenshots/ │ └── screenshots.xcf ├── build.gradle ├── common/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── debug/ │ │ └── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── common/ │ │ └── ConfigVariant.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── common/ │ │ ├── Config.kt │ │ ├── Mode.kt │ │ ├── di/ │ │ │ └── CommonBindingModule.kt │ │ ├── dispatchers/ │ │ │ ├── CoroutineDispatchers.kt │ │ │ └── DefaultCoroutineDispatchers.kt │ │ ├── errors/ │ │ │ ├── ErrorHelper.kt │ │ │ └── ShowlyError.kt │ │ └── extensions/ │ │ └── DateExtensions.kt │ └── release/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── common/ │ └── ConfigVariant.kt ├── common-test/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── common_test/ │ ├── MainDispatcherRule.kt │ └── UnconfinedCoroutineDispatchers.kt ├── crowdin.yml ├── data-local/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── data_local/ │ │ └── database/ │ │ └── dao/ │ │ ├── BaseDaoTest.kt │ │ ├── DiscoverShowsDaoTest.kt │ │ ├── EpisodesDaoTest.kt │ │ ├── EpisodesSyncLogDaoTest.kt │ │ ├── MyShowsDaoTest.kt │ │ ├── RecentSearchDaoTest.kt │ │ ├── RelatedShowsDaoTest.kt │ │ ├── SeasonsDaoTest.kt │ │ ├── SettingsDaoTest.kt │ │ ├── ShowImagesDaoTest.kt │ │ ├── ShowsDaoTest.kt │ │ ├── UserDaoTest.kt │ │ ├── WatchlistShowsDaoTest.kt │ │ ├── converters/ │ │ │ └── DateConverterTest.kt │ │ └── helpers/ │ │ └── TestData.kt │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── data_local/ │ ├── LocalDataSource.kt │ ├── database/ │ │ ├── AppDatabase.kt │ │ ├── converters/ │ │ │ └── DateConverter.kt │ │ ├── dao/ │ │ │ ├── ArchiveMoviesDao.kt │ │ │ ├── ArchiveShowsDao.kt │ │ │ ├── BaseDao.kt │ │ │ ├── CustomImagesDao.kt │ │ │ ├── CustomListsDao.kt │ │ │ ├── CustomListsItemsDao.kt │ │ │ ├── DiscoverMoviesDao.kt │ │ │ ├── DiscoverShowsDao.kt │ │ │ ├── EpisodeTranslationsDao.kt │ │ │ ├── EpisodesDao.kt │ │ │ ├── EpisodesSyncLogDao.kt │ │ │ ├── MovieCollectionsDao.kt │ │ │ ├── MovieCollectionsItemsDao.kt │ │ │ ├── MovieImagesDao.kt │ │ │ ├── MovieRatingsDao.kt │ │ │ ├── MovieStreamingsDao.kt │ │ │ ├── MovieTranslationsDao.kt │ │ │ ├── MoviesDao.kt │ │ │ ├── MoviesSyncLogDao.kt │ │ │ ├── MyMoviesDao.kt │ │ │ ├── MyShowsDao.kt │ │ │ ├── NewsDao.kt │ │ │ ├── PeopleCreditsDao.kt │ │ │ ├── PeopleDao.kt │ │ │ ├── PeopleImagesDao.kt │ │ │ ├── PeopleShowsMoviesDao.kt │ │ │ ├── RatingsDao.kt │ │ │ ├── RecentSearchDao.kt │ │ │ ├── RelatedMoviesDao.kt │ │ │ ├── RelatedShowsDao.kt │ │ │ ├── SeasonsDao.kt │ │ │ ├── SettingsDao.kt │ │ │ ├── ShowImagesDao.kt │ │ │ ├── ShowRatingsDao.kt │ │ │ ├── ShowStreamingsDao.kt │ │ │ ├── ShowTranslationsDao.kt │ │ │ ├── ShowsDao.kt │ │ │ ├── TraktSyncLogDao.kt │ │ │ ├── TraktSyncQueueDao.kt │ │ │ ├── TranslationsMoviesSyncLogDao.kt │ │ │ ├── TranslationsSyncLogDao.kt │ │ │ ├── UserDao.kt │ │ │ ├── WatchlistMoviesDao.kt │ │ │ └── WatchlistShowsDao.kt │ │ ├── migrations/ │ │ │ └── Migrations.kt │ │ └── model/ │ │ ├── ArchiveMovie.kt │ │ ├── ArchiveShow.kt │ │ ├── CustomImage.kt │ │ ├── CustomList.kt │ │ ├── CustomListItem.kt │ │ ├── DiscoverMovie.kt │ │ ├── DiscoverShow.kt │ │ ├── Episode.kt │ │ ├── EpisodeTranslation.kt │ │ ├── EpisodesSyncLog.kt │ │ ├── Movie.kt │ │ ├── MovieCollection.kt │ │ ├── MovieCollectionItem.kt │ │ ├── MovieImage.kt │ │ ├── MovieRatings.kt │ │ ├── MovieStreaming.kt │ │ ├── MovieTranslation.kt │ │ ├── MoviesSyncLog.kt │ │ ├── MyMovie.kt │ │ ├── MyShow.kt │ │ ├── News.kt │ │ ├── Person.kt │ │ ├── PersonCredits.kt │ │ ├── PersonImage.kt │ │ ├── PersonShowMovie.kt │ │ ├── Rating.kt │ │ ├── RecentSearch.kt │ │ ├── RelatedMovie.kt │ │ ├── RelatedShow.kt │ │ ├── Season.kt │ │ ├── Settings.kt │ │ ├── Show.kt │ │ ├── ShowImage.kt │ │ ├── ShowRatings.kt │ │ ├── ShowStreaming.kt │ │ ├── ShowTranslation.kt │ │ ├── TraktSyncLog.kt │ │ ├── TraktSyncQueue.kt │ │ ├── TranslationsMoviesSyncLog.kt │ │ ├── TranslationsSyncLog.kt │ │ ├── User.kt │ │ ├── WatchlistMovie.kt │ │ └── WatchlistShow.kt │ ├── di/ │ │ ├── LocalDataModule.kt │ │ ├── SourcesModule.kt │ │ └── StorageModule.kt │ ├── sources/ │ │ ├── ArchiveMoviesLocalDataSource.kt │ │ ├── ArchiveShowsLocalDataSource.kt │ │ ├── CustomImagesLocalDataSource.kt │ │ ├── CustomListsItemsLocalDataSource.kt │ │ ├── CustomListsLocalDataSource.kt │ │ ├── DiscoverMoviesLocalDataSource.kt │ │ ├── DiscoverShowsLocalDataSource.kt │ │ ├── EpisodeTranslationsLocalDataSource.kt │ │ ├── EpisodesLocalDataSource.kt │ │ ├── EpisodesSyncLogLocalDataSource.kt │ │ ├── MovieCollectionsItemsLocalDataSource.kt │ │ ├── MovieCollectionsLocalDataSource.kt │ │ ├── MovieImagesLocalDataSource.kt │ │ ├── MovieRatingsLocalDataSource.kt │ │ ├── MovieStreamingsLocalDataSource.kt │ │ ├── MovieTranslationsLocalDataSource.kt │ │ ├── MoviesLocalDataSource.kt │ │ ├── MoviesSyncLogLocalDataSource.kt │ │ ├── MyMoviesLocalDataSource.kt │ │ ├── MyShowsLocalDataSource.kt │ │ ├── NewsLocalDataSource.kt │ │ ├── PeopleCreditsLocalDataSource.kt │ │ ├── PeopleImagesLocalDataSource.kt │ │ ├── PeopleLocalDataSource.kt │ │ ├── PeopleShowsMoviesLocalDataSource.kt │ │ ├── RatingsLocalDataSource.kt │ │ ├── RecentSearchLocalDataSource.kt │ │ ├── RelatedMoviesLocalDataSource.kt │ │ ├── RelatedShowsLocalDataSource.kt │ │ ├── SeasonsLocalDataSource.kt │ │ ├── SettingsLocalDataSource.kt │ │ ├── ShowImagesLocalDataSource.kt │ │ ├── ShowRatingsLocalDataSource.kt │ │ ├── ShowStreamingsLocalDataSource.kt │ │ ├── ShowTranslationsLocalDataSource.kt │ │ ├── ShowsLocalDataSource.kt │ │ ├── TraktSyncLogLocalDataSource.kt │ │ ├── TraktSyncQueueLocalDataSource.kt │ │ ├── TranslationsMoviesSyncLogLocalDataSource.kt │ │ ├── TranslationsShowsSyncLogLocalDataSource.kt │ │ ├── UserLocalDataSource.kt │ │ ├── WatchlistMoviesLocalDataSource.kt │ │ └── WatchlistShowsLocalDataSource.kt │ └── utilities/ │ └── TransactionsProvider.kt ├── data-remote/ │ ├── .gitignore │ ├── build.gradle │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── data_remote/ │ ├── Config.kt │ ├── RemoteDataSource.kt │ ├── aws/ │ │ ├── AwsRemoteDataSource.kt │ │ ├── api/ │ │ │ ├── AwsApi.kt │ │ │ └── AwsService.kt │ │ └── model/ │ │ ├── AwsImage.kt │ │ └── AwsImagesList.kt │ ├── di/ │ │ └── module/ │ │ ├── AwsModule.kt │ │ ├── OkHttpModule.kt │ │ ├── OmdbModule.kt │ │ ├── PreferencesModule.kt │ │ ├── RedditModule.kt │ │ ├── RemoteDataModule.kt │ │ ├── RetrofitModule.kt │ │ ├── TmdbModule.kt │ │ └── TraktModule.kt │ ├── omdb/ │ │ ├── OmdbInterceptor.kt │ │ ├── OmdbRemoteDataSource.kt │ │ ├── api/ │ │ │ ├── OmdbApi.kt │ │ │ └── OmdbService.kt │ │ └── model/ │ │ └── OmdbResult.kt │ ├── reddit/ │ │ ├── RedditRemoteDataSource.kt │ │ ├── api/ │ │ │ ├── RedditApi.kt │ │ │ ├── RedditAuthApi.kt │ │ │ ├── RedditListingApi.kt │ │ │ └── RedditService.kt │ │ └── model/ │ │ ├── RedditAuthResponse.kt │ │ ├── RedditData.kt │ │ ├── RedditDataItem.kt │ │ ├── RedditItem.kt │ │ └── RedditResponse.kt │ ├── tmdb/ │ │ ├── TmdbInterceptor.kt │ │ ├── TmdbRemoteDataSource.kt │ │ ├── api/ │ │ │ ├── TmdbApi.kt │ │ │ └── TmdbService.kt │ │ └── model/ │ │ ├── TmdbImage.kt │ │ ├── TmdbImages.kt │ │ ├── TmdbPeople.kt │ │ ├── TmdbPerson.kt │ │ ├── TmdbStreamingCountry.kt │ │ ├── TmdbStreamingService.kt │ │ ├── TmdbStreamings.kt │ │ ├── TmdbTranslation.kt │ │ └── TmdbTranslationResponse.kt │ ├── token/ │ │ ├── TokenProvider.kt │ │ └── TraktTokenProvider.kt │ └── trakt/ │ ├── TraktRemoteDataSource.kt │ ├── api/ │ │ ├── TraktApi.kt │ │ └── service/ │ │ ├── TraktAuthService.kt │ │ ├── TraktCommentsService.kt │ │ ├── TraktMoviesService.kt │ │ ├── TraktPeopleService.kt │ │ ├── TraktSearchService.kt │ │ ├── TraktShowsService.kt │ │ ├── TraktSyncService.kt │ │ └── TraktUsersService.kt │ ├── interceptors/ │ │ ├── TraktAuthenticator.kt │ │ ├── TraktAuthorizationInterceptor.kt │ │ ├── TraktHeadersInterceptor.kt │ │ ├── TraktRefreshTokenInterceptor.kt │ │ └── TraktRetryInterceptor.kt │ └── model/ │ ├── AirTime.kt │ ├── Comment.kt │ ├── CustomList.kt │ ├── Episode.kt │ ├── HiddenItem.kt │ ├── Ids.kt │ ├── Movie.kt │ ├── MovieCollection.kt │ ├── MovieCollectionItem.kt │ ├── MovieResult.kt │ ├── OAuthResponse.kt │ ├── Person.kt │ ├── PersonCredit.kt │ ├── PersonCreditsResult.kt │ ├── RatingResultMovie.kt │ ├── RatingResultShow.kt │ ├── RatingResultValue.kt │ ├── SearchResult.kt │ ├── Season.kt │ ├── SeasonTranslation.kt │ ├── Show.kt │ ├── ShowResult.kt │ ├── SyncExportItem.kt │ ├── SyncExportRequest.kt │ ├── SyncExportResult.kt │ ├── SyncItem.kt │ ├── TraktUser.kt │ ├── Translation.kt │ ├── User.kt │ └── request/ │ ├── CommentRequest.kt │ ├── CreateListRequest.kt │ ├── OAuthRefreshRequest.kt │ ├── OAuthRequest.kt │ ├── OAuthRevokeRequest.kt │ └── RatingRequest.kt ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── repository/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── repository/ │ │ ├── CommentsRepository.kt │ │ ├── EpisodesManager.kt │ │ ├── ListsRepository.kt │ │ ├── NewsRepository.kt │ │ ├── OnHoldItemsRepository.kt │ │ ├── PeopleRepository.kt │ │ ├── PinnedItemsRepository.kt │ │ ├── RatingsRepository.kt │ │ ├── StreamingsRepository.kt │ │ ├── TranslationsRepository.kt │ │ ├── UserRedditManager.kt │ │ ├── UserTraktManager.kt │ │ ├── images/ │ │ │ ├── EpisodeImagesProvider.kt │ │ │ ├── MovieImagesProvider.kt │ │ │ ├── PeopleImagesProvider.kt │ │ │ └── ShowImagesProvider.kt │ │ ├── mappers/ │ │ │ ├── CollectionMapper.kt │ │ │ ├── CommentMapper.kt │ │ │ ├── CustomListMapper.kt │ │ │ ├── EpisodeMapper.kt │ │ │ ├── IdsMapper.kt │ │ │ ├── ImageMapper.kt │ │ │ ├── Mappers.kt │ │ │ ├── MovieMapper.kt │ │ │ ├── NewsMapper.kt │ │ │ ├── PersonMapper.kt │ │ │ ├── RatingsMapper.kt │ │ │ ├── SeasonMapper.kt │ │ │ ├── SettingsMapper.kt │ │ │ ├── ShowMapper.kt │ │ │ ├── StreamingsMapper.kt │ │ │ ├── TranslationMapper.kt │ │ │ └── UserRatingsMapper.kt │ │ ├── movies/ │ │ │ ├── DiscoverMoviesRepository.kt │ │ │ ├── HiddenMoviesRepository.kt │ │ │ ├── MovieCollectionsRepository.kt │ │ │ ├── MovieDetailsRepository.kt │ │ │ ├── MovieStreamingsRepository.kt │ │ │ ├── MoviesRepository.kt │ │ │ ├── MyMoviesRepository.kt │ │ │ ├── RelatedMoviesRepository.kt │ │ │ ├── WatchlistMoviesRepository.kt │ │ │ └── ratings/ │ │ │ ├── MoviesExternalRatingsRepository.kt │ │ │ └── MoviesRatingsRepository.kt │ │ ├── settings/ │ │ │ ├── SettingsFiltersRepository.kt │ │ │ ├── SettingsRepository.kt │ │ │ ├── SettingsSortRepository.kt │ │ │ ├── SettingsSpoilersRepository.kt │ │ │ ├── SettingsViewModeRepository.kt │ │ │ └── SettingsWidgetsRepository.kt │ │ ├── shows/ │ │ │ ├── DiscoverShowsRepository.kt │ │ │ ├── HiddenShowsRepository.kt │ │ │ ├── MyShowsRepository.kt │ │ │ ├── RelatedShowsRepository.kt │ │ │ ├── ShowDetailsRepository.kt │ │ │ ├── ShowStreamingsRepository.kt │ │ │ ├── ShowsRepository.kt │ │ │ ├── WatchlistShowsRepository.kt │ │ │ └── ratings/ │ │ │ ├── ShowsExternalRatingsRepository.kt │ │ │ └── ShowsRatingsRepository.kt │ │ └── utilities/ │ │ └── PreferencesDelegates.kt │ └── test/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── repository/ │ ├── DiscoverShowsRepositoryTest.kt │ ├── MyShowsRepositoryTest.kt │ ├── PeopleRepositoryTest.kt │ ├── RelatedShowsRepositoryTest.kt │ ├── SettingsRepositoryTest.kt │ ├── ShowDetailsRepositoryTest.kt │ ├── WatchlistShowsRepositoryTest.kt │ └── common/ │ └── BaseMockTest.kt ├── settings.gradle ├── ui-base/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_base/ │ │ ├── Analytics.kt │ │ ├── BaseAdapter.kt │ │ ├── BaseBottomSheetFragment.kt │ │ ├── BaseFragment.kt │ │ ├── BaseMovieAdapter.kt │ │ ├── Logger.kt │ │ ├── common/ │ │ │ ├── AppCountry.kt │ │ │ ├── AppScopeProvider.kt │ │ │ ├── FastLinearLayoutManager.kt │ │ │ ├── ListItem.kt │ │ │ ├── ListViewMode.kt │ │ │ ├── MovieListItem.kt │ │ │ ├── OnScrollResetListener.kt │ │ │ ├── OnSearchClickListener.kt │ │ │ ├── OnShowsMoviesSyncedListener.kt │ │ │ ├── OnTabReselectedListener.kt │ │ │ ├── OnTraktAuthorizeListener.kt │ │ │ ├── SafeOnClickListener.kt │ │ │ ├── WidgetsProvider.kt │ │ │ ├── behaviour/ │ │ │ │ ├── ScrollableViewBehaviour.kt │ │ │ │ └── SearchViewBehaviour.kt │ │ │ ├── sheets/ │ │ │ │ ├── context_menu/ │ │ │ │ │ ├── ContextMenuBottomSheet.kt │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── FinishUiEvent.kt │ │ │ │ │ │ └── RemoveTraktUiEvent.kt │ │ │ │ │ ├── movie/ │ │ │ │ │ │ ├── MovieContextMenuBottomSheet.kt │ │ │ │ │ │ ├── MovieContextMenuUiState.kt │ │ │ │ │ │ ├── MovieContextMenuViewModel.kt │ │ │ │ │ │ ├── cases/ │ │ │ │ │ │ │ ├── MovieContextMenuHiddenCase.kt │ │ │ │ │ │ │ ├── MovieContextMenuLoadItemCase.kt │ │ │ │ │ │ │ ├── MovieContextMenuMyMoviesCase.kt │ │ │ │ │ │ │ ├── MovieContextMenuPinnedCase.kt │ │ │ │ │ │ │ └── MovieContextMenuWatchlistCase.kt │ │ │ │ │ │ └── helpers/ │ │ │ │ │ │ └── MovieContextItem.kt │ │ │ │ │ └── show/ │ │ │ │ │ ├── ShowContextMenuBottomSheet.kt │ │ │ │ │ ├── ShowContextMenuUiState.kt │ │ │ │ │ ├── ShowContextMenuViewModel.kt │ │ │ │ │ ├── cases/ │ │ │ │ │ │ ├── ShowContextMenuHiddenCase.kt │ │ │ │ │ │ ├── ShowContextMenuLoadItemCase.kt │ │ │ │ │ │ ├── ShowContextMenuMyShowsCase.kt │ │ │ │ │ │ ├── ShowContextMenuOnHoldCase.kt │ │ │ │ │ │ ├── ShowContextMenuPinnedCase.kt │ │ │ │ │ │ └── ShowContextMenuWatchlistCase.kt │ │ │ │ │ └── helpers/ │ │ │ │ │ └── ShowContextItem.kt │ │ │ │ ├── links/ │ │ │ │ │ ├── LinksBottomSheet.kt │ │ │ │ │ ├── LinksViewModel.kt │ │ │ │ │ └── views/ │ │ │ │ │ └── LinkItemView.kt │ │ │ │ ├── ratings/ │ │ │ │ │ ├── RatingsBottomSheet.kt │ │ │ │ │ ├── RatingsSheetViewModel.kt │ │ │ │ │ ├── RatingsUiEvents.kt │ │ │ │ │ ├── RatingsUiState.kt │ │ │ │ │ └── cases/ │ │ │ │ │ ├── RatingsEpisodeCase.kt │ │ │ │ │ ├── RatingsMovieCase.kt │ │ │ │ │ ├── RatingsSeasonCase.kt │ │ │ │ │ └── RatingsShowCase.kt │ │ │ │ ├── remove_trakt/ │ │ │ │ │ ├── RemoveTraktBottomSheet.kt │ │ │ │ │ ├── remove_trakt_hidden/ │ │ │ │ │ │ ├── RemoveTraktHiddenBottomSheet.kt │ │ │ │ │ │ ├── RemoveTraktHiddenUiState.kt │ │ │ │ │ │ ├── RemoveTraktHiddenViewModel.kt │ │ │ │ │ │ └── cases/ │ │ │ │ │ │ └── RemoveTraktHiddenCase.kt │ │ │ │ │ ├── remove_trakt_progress/ │ │ │ │ │ │ ├── RemoveTraktProgressBottomSheet.kt │ │ │ │ │ │ ├── RemoveTraktProgressUiState.kt │ │ │ │ │ │ ├── RemoveTraktProgressViewModel.kt │ │ │ │ │ │ └── cases/ │ │ │ │ │ │ └── RemoveTraktProgressCase.kt │ │ │ │ │ └── remove_trakt_watchlist/ │ │ │ │ │ ├── RemoveTraktWatchlistBottomSheet.kt │ │ │ │ │ ├── RemoveTraktWatchlistUiState.kt │ │ │ │ │ ├── RemoveTraktWatchlistViewModel.kt │ │ │ │ │ └── cases/ │ │ │ │ │ └── RemoveTraktWatchlistCase.kt │ │ │ │ └── sort_order/ │ │ │ │ ├── SortOrderBottomSheet.kt │ │ │ │ └── views/ │ │ │ │ └── SortOrderItemView.kt │ │ │ └── views/ │ │ │ ├── EmptySearchView.kt │ │ │ ├── FoldableTextView.kt │ │ │ ├── ModeTabsView.kt │ │ │ ├── MovieView.kt │ │ │ ├── PremiumAdView.kt │ │ │ ├── RateValueView.kt │ │ │ ├── RatingsStripView.kt │ │ │ ├── ScrollableImageView.kt │ │ │ ├── ScrollableTabLayout.kt │ │ │ ├── SearchLocalView.kt │ │ │ ├── SearchView.kt │ │ │ ├── SecretTextView.kt │ │ │ ├── ShowView.kt │ │ │ └── tips/ │ │ │ ├── TipOverlayView.kt │ │ │ └── TipView.kt │ │ ├── dates/ │ │ │ ├── AppDateFormat.kt │ │ │ └── DateFormatProvider.kt │ │ ├── events/ │ │ │ ├── Event.kt │ │ │ └── EventsManager.kt │ │ ├── fcm/ │ │ │ └── NotificationChannel.kt │ │ ├── network/ │ │ │ ├── NetworkCallbackAdapter.kt │ │ │ └── NetworkStatusProvider.kt │ │ ├── notifications/ │ │ │ ├── AnnouncementManager.kt │ │ │ ├── AnnouncementWorker.kt │ │ │ └── schedulers/ │ │ │ ├── MovieAnnouncementScheduler.kt │ │ │ └── ShowAnnouncementScheduler.kt │ │ ├── sync/ │ │ │ ├── ShowsMoviesSyncWorker.kt │ │ │ └── runners/ │ │ │ ├── MoviesSyncRunner.kt │ │ │ └── ShowsSyncRunner.kt │ │ ├── trakt/ │ │ │ ├── TraktNotificationWorker.kt │ │ │ ├── TraktSyncRunner.kt │ │ │ ├── TraktSyncWorker.kt │ │ │ ├── exports/ │ │ │ │ ├── TraktExportListsRunner.kt │ │ │ │ ├── TraktExportWatchedRunner.kt │ │ │ │ └── TraktExportWatchlistRunner.kt │ │ │ ├── imports/ │ │ │ │ ├── TraktImportListsRunner.kt │ │ │ │ ├── TraktImportWatchedRunner.kt │ │ │ │ └── TraktImportWatchlistRunner.kt │ │ │ └── quicksync/ │ │ │ ├── QuickSyncManager.kt │ │ │ ├── QuickSyncWorker.kt │ │ │ └── runners/ │ │ │ ├── QuickSyncListsRunner.kt │ │ │ ├── QuickSyncRunner.kt │ │ │ └── cases/ │ │ │ ├── QuickSyncDuplicateEpisodesCase.kt │ │ │ └── QuickSyncDuplicateMoviesCase.kt │ │ ├── utilities/ │ │ │ ├── DurationPrinter.kt │ │ │ ├── FragmentViewBindingDelegate.kt │ │ │ ├── ModeHost.kt │ │ │ ├── MoviesStatusHost.kt │ │ │ ├── NavigationHost.kt │ │ │ ├── NetworkIconProvider.kt │ │ │ ├── SnackbarHost.kt │ │ │ ├── TipsHost.kt │ │ │ ├── events/ │ │ │ │ ├── Event.kt │ │ │ │ └── MessageEvent.kt │ │ │ ├── extensions/ │ │ │ │ ├── BuildExtensions.kt │ │ │ │ ├── BundleExtensions.kt │ │ │ │ ├── ContextExtensions.kt │ │ │ │ ├── Extensions.kt │ │ │ │ ├── FlowCombineExtensions.kt │ │ │ │ ├── GlideExtensions.kt │ │ │ │ ├── LayoutExtensions.kt │ │ │ │ ├── LifecycleExtensions.kt │ │ │ │ ├── SnackbarExtensions.kt │ │ │ │ ├── UiExtensions.kt │ │ │ │ ├── ViewModelExtensions.kt │ │ │ │ └── WebExtensions.kt │ │ │ └── ui/ │ │ │ └── EqualSpacingItemDecoration.kt │ │ └── viewmodel/ │ │ ├── ChannelsDelegate.kt │ │ └── DefaultChannelsDelegate.kt │ └── res/ │ ├── anim/ │ │ ├── anim_recycler_fall_down.xml │ │ ├── anim_recycler_fall_down_fast.xml │ │ ├── anim_recycler_fall_down_item.xml │ │ ├── anim_recycler_fall_down_item_fast.xml │ │ ├── anim_slide_in_from_left.xml │ │ ├── anim_slide_in_from_right.xml │ │ ├── anim_slide_out_from_left.xml │ │ └── anim_slide_out_from_right.xml │ ├── anim-ar/ │ │ ├── anim_slide_in_from_left.xml │ │ ├── anim_slide_in_from_right.xml │ │ ├── anim_slide_out_from_left.xml │ │ └── anim_slide_out_from_right.xml │ ├── color/ │ │ ├── selector_chip_background.xml │ │ ├── selector_chip_stroke.xml │ │ ├── selector_chip_text.xml │ │ ├── selector_discover_chip_background.xml │ │ ├── selector_discover_chip_text.xml │ │ ├── selector_main_button.xml │ │ └── selector_main_checkbox.xml │ ├── color-notnight/ │ │ ├── selector_chip_background.xml │ │ ├── selector_chip_stroke.xml │ │ └── selector_main_checkbox.xml │ ├── drawable/ │ │ ├── bg_badge.xml │ │ ├── bg_bottom_sheet.xml │ │ ├── bg_dialog.xml │ │ ├── bg_filters_sheet.xml │ │ ├── bg_item_menu_elevation.xml │ │ ├── bg_item_menu_placeholder.xml │ │ ├── bg_link_item.xml │ │ ├── bg_link_item_ripple.xml │ │ ├── bg_media_view_elevation.xml │ │ ├── bg_media_view_elevation_card.xml │ │ ├── bg_media_view_placeholder.xml │ │ ├── bg_media_view_ripple.xml │ │ ├── bg_premium_ad.xml │ │ ├── bg_snackbar_error.xml │ │ ├── bg_snackbar_info.xml │ │ ├── bg_sort_item_badge.xml │ │ ├── bg_text_on_surface.xml │ │ ├── bg_tip_view.xml │ │ ├── divider_item_menu.xml │ │ ├── ic_abc.xml │ │ ├── ic_amc.xml │ │ ├── ic_anim_search_to_close.xml │ │ ├── ic_arrow_alt.xml │ │ ├── ic_arrow_alt_down.xml │ │ ├── ic_arrow_alt_up.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_arrow_right.xml │ │ ├── ic_bookmark.xml │ │ ├── ic_bookmark_full.xml │ │ ├── ic_calendar.xml │ │ ├── ic_check.xml │ │ ├── ic_check_small.xml │ │ ├── ic_circle.xml │ │ ├── ic_clock.xml │ │ ├── ic_clock_compact.xml │ │ ├── ic_clock_small.xml │ │ ├── ic_close.xml │ │ ├── ic_comment.xml │ │ ├── ic_crown.xml │ │ ├── ic_crown_small.xml │ │ ├── ic_custom_image.xml │ │ ├── ic_delete.xml │ │ ├── ic_duckduck.xml │ │ ├── ic_eye.xml │ │ ├── ic_eye_no.xml │ │ ├── ic_film.xml │ │ ├── ic_giphy.xml │ │ ├── ic_github.xml │ │ ├── ic_google.xml │ │ ├── ic_history.xml │ │ ├── ic_imdb.xml │ │ ├── ic_info.xml │ │ ├── ic_insight.xml │ │ ├── ic_link.xml │ │ ├── ic_link_color.xml │ │ ├── ic_list_alt.xml │ │ ├── ic_lists.xml │ │ ├── ic_news.xml │ │ ├── ic_notification_bell.xml │ │ ├── ic_open_browser.xml │ │ ├── ic_pause.xml │ │ ├── ic_person_outline.xml │ │ ├── ic_pin.xml │ │ ├── ic_play.xml │ │ ├── ic_remove_list.xml │ │ ├── ic_search.xml │ │ ├── ic_settings.xml │ │ ├── ic_share.xml │ │ ├── ic_star.xml │ │ ├── ic_star_empty.xml │ │ ├── ic_star_small.xml │ │ ├── ic_stars_round.xml │ │ ├── ic_television.xml │ │ ├── ic_tmdb.xml │ │ ├── ic_trakt.xml │ │ ├── ic_twitter.xml │ │ ├── ic_view_grid.xml │ │ ├── ic_view_list.xml │ │ ├── ic_wikipedia.xml │ │ └── ic_youtube.xml │ ├── drawable-ar/ │ │ └── ic_arrow_back.xml │ ├── drawable-notnight/ │ │ ├── ic_github.xml │ │ └── ic_wikipedia.xml │ ├── layout/ │ │ ├── view_context_menu.xml │ │ ├── view_links.xml │ │ ├── view_links_item.xml │ │ ├── view_mode_tabs.xml │ │ ├── view_premium_ad.xml │ │ ├── view_premium_ad_list.xml │ │ ├── view_rate_sheet.xml │ │ ├── view_rate_value.xml │ │ ├── view_ratings_strip.xml │ │ ├── view_remove_trakt_hidden.xml │ │ ├── view_remove_trakt_progress.xml │ │ ├── view_remove_trakt_watchlist.xml │ │ ├── view_search.xml │ │ ├── view_search_empty.xml │ │ ├── view_search_local.xml │ │ ├── view_sort_order.xml │ │ ├── view_sort_order_item.xml │ │ ├── view_tip.xml │ │ └── view_tip_overlay.xml │ ├── layout-sw600dp/ │ │ └── view_ratings_strip.xml │ ├── values/ │ │ ├── attrs.xml │ │ ├── bool.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── misc.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-notnight/ │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── misc.xml │ │ └── styles.xml │ ├── values-notnight-v27/ │ │ └── styles.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ ├── bool.xml │ │ ├── dimens.xml │ │ └── styles.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-comments/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_comments/ │ │ ├── CommentItemDiffCallback.kt │ │ ├── CommentView.kt │ │ ├── CommentsAdapter.kt │ │ ├── fragment/ │ │ │ ├── CommentsFragment.kt │ │ │ ├── CommentsUiState.kt │ │ │ ├── CommentsViewModel.kt │ │ │ └── cases/ │ │ │ ├── DeleteCommentCase.kt │ │ │ ├── LoadCommentsCase.kt │ │ │ └── LoadRepliesCase.kt │ │ ├── post/ │ │ │ ├── PostCommentBottomSheet.kt │ │ │ ├── PostCommentUiState.kt │ │ │ └── PostCommentViewModel.kt │ │ └── utilities/ │ │ └── Extensions.kt │ └── res/ │ ├── color/ │ │ ├── selector_comment_button.xml │ │ └── selector_comment_input.xml │ ├── drawable/ │ │ ├── bg_comment_rating.xml │ │ ├── divider_comments_list.xml │ │ ├── ic_add_comment.xml │ │ ├── ic_delete.xml │ │ └── ic_reply.xml │ ├── layout/ │ │ ├── fragment_comments.xml │ │ ├── view_comment.xml │ │ └── view_post_comment.xml │ ├── layout-sw600dp/ │ │ └── view_comment.xml │ ├── values/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-discover/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_discover/ │ │ │ ├── DiscoverFragment.kt │ │ │ ├── DiscoverUiState.kt │ │ │ ├── DiscoverViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── DiscoverFiltersCase.kt │ │ │ │ ├── DiscoverShowsCase.kt │ │ │ │ └── DiscoverTwitterCase.kt │ │ │ ├── di/ │ │ │ │ └── DiscoverModule.kt │ │ │ ├── filters/ │ │ │ │ ├── feed/ │ │ │ │ │ ├── DiscoverFiltersFeedBottomSheet.kt │ │ │ │ │ ├── DiscoverFiltersFeedUiEvent.kt │ │ │ │ │ ├── DiscoverFiltersFeedUiState.kt │ │ │ │ │ └── DiscoverFiltersFeedViewModel.kt │ │ │ │ ├── genres/ │ │ │ │ │ ├── DiscoverFiltersGenresBottomSheet.kt │ │ │ │ │ ├── DiscoverFiltersGenresUiEvent.kt │ │ │ │ │ ├── DiscoverFiltersGenresUiState.kt │ │ │ │ │ └── DiscoverFiltersGenresViewModel.kt │ │ │ │ ├── networks/ │ │ │ │ │ ├── DiscoverFiltersNetworksBottomSheet.kt │ │ │ │ │ ├── DiscoverFiltersNetworksUiEvent.kt │ │ │ │ │ ├── DiscoverFiltersNetworksUiState.kt │ │ │ │ │ └── DiscoverFiltersNetworksViewModel.kt │ │ │ │ └── views/ │ │ │ │ └── DiscoverFiltersView.kt │ │ │ ├── helpers/ │ │ │ │ ├── DiscoverLayoutManagerProvider.kt │ │ │ │ └── itemtype/ │ │ │ │ ├── ImageTypeProvider.kt │ │ │ │ ├── PhoneImageTypeProvider.kt │ │ │ │ └── TabletImageTypeProvider.kt │ │ │ ├── recycler/ │ │ │ │ ├── DiscoverAdapter.kt │ │ │ │ ├── DiscoverItemDiffCallback.kt │ │ │ │ └── DiscoverListItem.kt │ │ │ └── views/ │ │ │ ├── ShowFanartView.kt │ │ │ ├── ShowPosterView.kt │ │ │ ├── ShowPremiumView.kt │ │ │ └── ShowTwitterView.kt │ │ └── res/ │ │ ├── color/ │ │ │ └── selector_filters_button.xml │ │ ├── drawable/ │ │ │ ├── bg_twitter.xml │ │ │ └── bg_twitter_cancel.xml │ │ ├── layout/ │ │ │ ├── fragment_discover.xml │ │ │ ├── view_discover_filters.xml │ │ │ ├── view_discover_filters_feed.xml │ │ │ ├── view_discover_filters_genres.xml │ │ │ ├── view_discover_filters_networks.xml │ │ │ ├── view_show_fanart.xml │ │ │ ├── view_show_poster.xml │ │ │ ├── view_show_premium.xml │ │ │ └── view_show_twitter.xml │ │ ├── values/ │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ ├── BaseMockTest.kt │ ├── TestData.kt │ └── com/ │ └── michaldrabik/ │ └── ui_discover/ │ └── DiscoverViewModelTest.kt ├── ui-discover-movies/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_discover_movies/ │ │ ├── DiscoverMoviesFragment.kt │ │ ├── DiscoverMoviesUiState.kt │ │ ├── DiscoverMoviesViewModel.kt │ │ ├── cases/ │ │ │ ├── DiscoverFiltersCase.kt │ │ │ └── DiscoverMoviesCase.kt │ │ ├── di/ │ │ │ └── DiscoverMoviesModule.kt │ │ ├── filters/ │ │ │ ├── feed/ │ │ │ │ ├── DiscoverMoviesFiltersFeedBottomSheet.kt │ │ │ │ ├── DiscoverMoviesFiltersFeedUiEvent.kt │ │ │ │ ├── DiscoverMoviesFiltersFeedUiState.kt │ │ │ │ └── DiscoverMoviesFiltersFeedViewModel.kt │ │ │ ├── genres/ │ │ │ │ ├── DiscoverMoviesFiltersGenresBottomSheet.kt │ │ │ │ ├── DiscoverMoviesFiltersGenresUiEvent.kt │ │ │ │ ├── DiscoverMoviesFiltersGenresUiState.kt │ │ │ │ └── DiscoverMoviesFiltersGenresViewModel.kt │ │ │ └── views/ │ │ │ └── DiscoverMoviesFiltersView.kt │ │ ├── helpers/ │ │ │ ├── DiscoverMoviesLayoutManagerProvider.kt │ │ │ └── itemtype/ │ │ │ ├── ImageTypeProvider.kt │ │ │ ├── PhoneImageTypeProvider.kt │ │ │ └── TabletImageTypeProvider.kt │ │ ├── recycler/ │ │ │ ├── DiscoverMovieItemDiffCallback.kt │ │ │ ├── DiscoverMovieListItem.kt │ │ │ └── DiscoverMoviesAdapter.kt │ │ └── views/ │ │ ├── MovieFanartView.kt │ │ ├── MoviePosterView.kt │ │ └── MoviePremiumView.kt │ └── res/ │ ├── layout/ │ │ ├── fragment_discover_movies.xml │ │ ├── view_discover_movies_filters.xml │ │ ├── view_discover_movies_filters_feed.xml │ │ ├── view_discover_movies_filters_genres.xml │ │ ├── view_movie_fanart.xml │ │ ├── view_movie_poster.xml │ │ └── view_movie_premium.xml │ ├── values/ │ │ └── strings.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-episodes/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_episodes/ │ │ └── details/ │ │ ├── EpisodeDetailsBottomSheet.kt │ │ ├── EpisodeDetailsUiState.kt │ │ ├── EpisodeDetailsViewModel.kt │ │ └── cases/ │ │ ├── EpisodeDetailsSeasonCase.kt │ │ └── EpisodeDetailsWatchedCase.kt │ └── res/ │ ├── color/ │ │ └── selector_comment_button.xml │ ├── drawable/ │ │ ├── bg_bottom_sheet_placeholder.xml │ │ └── divider_comments_list.xml │ ├── layout/ │ │ └── view_episode_details.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-es/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-it/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-ru/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ ├── integers.xml │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-gallery/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_gallery/ │ │ ├── custom/ │ │ │ ├── CustomImagesBottomSheet.kt │ │ │ ├── CustomImagesUiState.kt │ │ │ └── CustomImagesViewModel.kt │ │ └── fanart/ │ │ ├── ArtGalleryFragment.kt │ │ ├── ArtGalleryUiState.kt │ │ ├── ArtGalleryViewModel.kt │ │ ├── cases/ │ │ │ └── ArtLoadImagesCase.kt │ │ └── recycler/ │ │ ├── ArtGalleryAdapter.kt │ │ ├── ImageItemDiffCallback.kt │ │ └── views/ │ │ ├── ArtGalleryFanartView.kt │ │ ├── ArtGalleryPosterView.kt │ │ └── ArtGalleryUrlView.kt │ └── res/ │ ├── color/ │ │ └── selector_url_input_layout.xml │ ├── drawable/ │ │ ├── bg_custom_image_frame.xml │ │ ├── bg_delete_circle.xml │ │ ├── bg_indicator_circle.xml │ │ ├── ic_custom_image2x.xml │ │ ├── ic_delete.xml │ │ └── ic_download.xml │ ├── drawable-notnight/ │ │ └── bg_indicator_circle.xml │ ├── layout/ │ │ ├── fragment_art_gallery.xml │ │ ├── view_custom_images.xml │ │ ├── view_gallery_fanart_image.xml │ │ ├── view_gallery_poster_image.xml │ │ └── view_gallery_url_dialog.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-notnight/ │ │ └── styles.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-lists/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_lists/ │ │ ├── create/ │ │ │ ├── CreateListBottomSheet.kt │ │ │ ├── CreateListUiState.kt │ │ │ ├── CreateListViewModel.kt │ │ │ └── cases/ │ │ │ ├── CreateListCase.kt │ │ │ └── ListDetailsCase.kt │ │ ├── details/ │ │ │ ├── ListDetailsFragment.kt │ │ │ ├── ListDetailsUiEvents.kt │ │ │ ├── ListDetailsUiState.kt │ │ │ ├── ListDetailsViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── ListDetailsItemsCase.kt │ │ │ │ ├── ListDetailsMainCase.kt │ │ │ │ ├── ListDetailsSortCase.kt │ │ │ │ ├── ListDetailsTipsCase.kt │ │ │ │ ├── ListDetailsTranslationsCase.kt │ │ │ │ └── ListDetailsViewModeCase.kt │ │ │ ├── helpers/ │ │ │ │ ├── ListDetailsSorter.kt │ │ │ │ ├── ListItemDragListener.kt │ │ │ │ ├── ListItemSwipeListener.kt │ │ │ │ ├── ReorderListCallback.kt │ │ │ │ └── ReorderListCallbackAdapter.kt │ │ │ ├── recycler/ │ │ │ │ ├── ListDetailsAdapter.kt │ │ │ │ ├── ListDetailsDiffCallback.kt │ │ │ │ ├── ListDetailsItem.kt │ │ │ │ └── helpers/ │ │ │ │ ├── ListDetailsGridItemDecoration.kt │ │ │ │ ├── ListDetailsLayoutManagerProvider.kt │ │ │ │ └── ListDetailsListItemDecoration.kt │ │ │ └── views/ │ │ │ ├── ListDetailsDeleteConfirmView.kt │ │ │ ├── ListDetailsFilterView.kt │ │ │ ├── ListDetailsItemView.kt │ │ │ ├── ListDetailsMovieItemView.kt │ │ │ ├── ListDetailsShowItemView.kt │ │ │ ├── compact/ │ │ │ │ ├── ListDetailsCompactMovieItemView.kt │ │ │ │ └── ListDetailsCompactShowItemView.kt │ │ │ └── grid/ │ │ │ ├── ListDetailsGridItemView.kt │ │ │ └── ListDetailsGridTitleItemView.kt │ │ ├── lists/ │ │ │ ├── ListsFragment.kt │ │ │ ├── ListsUiState.kt │ │ │ ├── ListsViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── MainListsCase.kt │ │ │ │ └── SortOrderListsCase.kt │ │ │ ├── helpers/ │ │ │ │ ├── ListsItemImage.kt │ │ │ │ ├── ListsLayoutManagerProvider.kt │ │ │ │ └── ListsSorter.kt │ │ │ ├── recycler/ │ │ │ │ ├── ListsAdapter.kt │ │ │ │ ├── ListsItem.kt │ │ │ │ └── ListsItemDiffCallback.kt │ │ │ └── views/ │ │ │ ├── ListsFiltersView.kt │ │ │ ├── ListsItemView.kt │ │ │ └── ListsTripleImageView.kt │ │ └── manage/ │ │ ├── ManageListsBottomSheet.kt │ │ ├── ManageListsUiState.kt │ │ ├── ManageListsViewModel.kt │ │ ├── cases/ │ │ │ └── ManageListsCase.kt │ │ ├── recycler/ │ │ │ ├── ManageListsAdapter.kt │ │ │ ├── ManageListsItem.kt │ │ │ └── ManageListsItemDiffCallback.kt │ │ └── views/ │ │ └── ManageListsItemView.kt │ └── res/ │ ├── color/ │ │ ├── selector_create_list_button.xml │ │ ├── selector_create_list_input.xml │ │ ├── selector_list_chip_background.xml │ │ └── selector_list_chip_text.xml │ ├── color-notnight/ │ │ └── selector_list_chip_background.xml │ ├── drawable/ │ │ ├── bg_rank.xml │ │ ├── ic_edit.xml │ │ ├── ic_handle.xml │ │ ├── ic_list_create.xml │ │ ├── ic_more.xml │ │ └── ic_reorder.xml │ ├── layout/ │ │ ├── fragment_list_details.xml │ │ ├── fragment_lists.xml │ │ ├── layout_list_details_empty.xml │ │ ├── layout_list_details_item_grid.xml │ │ ├── layout_lists_empty.xml │ │ ├── layout_manage_lists_empty.xml │ │ ├── view_create_list.xml │ │ ├── view_list_delete_confirm.xml │ │ ├── view_list_details_filters.xml │ │ ├── view_list_details_item_grid.xml │ │ ├── view_list_details_item_grid_title.xml │ │ ├── view_list_details_movie_item.xml │ │ ├── view_list_details_movie_item_compact.xml │ │ ├── view_list_details_show_item.xml │ │ ├── view_list_details_show_item_compact.xml │ │ ├── view_lists_filters.xml │ │ ├── view_lists_item.xml │ │ ├── view_manage_lists.xml │ │ ├── view_manage_lists_item.xml │ │ └── view_triple_image.xml │ ├── menu/ │ │ └── menu_list_details.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-notnight/ │ │ └── dimens.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-model/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_model/ │ │ ├── AirTime.kt │ │ ├── CalendarMode.kt │ │ ├── Comment.kt │ │ ├── CustomList.kt │ │ ├── DiscoverFilters.kt │ │ ├── DiscoverSortOrder.kt │ │ ├── Episode.kt │ │ ├── EpisodeBundle.kt │ │ ├── Genre.kt │ │ ├── Ids.kt │ │ ├── Image.kt │ │ ├── ImageFamily.kt │ │ ├── ImageSource.kt │ │ ├── ImageStatus.kt │ │ ├── ImageType.kt │ │ ├── Movie.kt │ │ ├── MovieCollection.kt │ │ ├── MovieStatus.kt │ │ ├── MyMoviesSection.kt │ │ ├── MyShowsSection.kt │ │ ├── Network.kt │ │ ├── NewsItem.kt │ │ ├── NotificationDelay.kt │ │ ├── Person.kt │ │ ├── PersonCredit.kt │ │ ├── PremiumFeature.kt │ │ ├── ProgressNextEpisodeType.kt │ │ ├── ProgressType.kt │ │ ├── RatingState.kt │ │ ├── Ratings.kt │ │ ├── RecentSearch.kt │ │ ├── SearchResult.kt │ │ ├── Season.kt │ │ ├── SeasonBundle.kt │ │ ├── SeasonTranslation.kt │ │ ├── Settings.kt │ │ ├── Show.kt │ │ ├── ShowStatus.kt │ │ ├── SortOrder.kt │ │ ├── SortType.kt │ │ ├── SpoilersSettings.kt │ │ ├── StreamingService.kt │ │ ├── Tip.kt │ │ ├── TraktRating.kt │ │ ├── TraktSyncSchedule.kt │ │ ├── Translation.kt │ │ └── User.kt │ └── res/ │ ├── values/ │ │ └── strings.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-movie/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_movie/ │ │ ├── MovieDetailsFragment.kt │ │ ├── MovieDetailsUiEvents.kt │ │ ├── MovieDetailsUiState.kt │ │ ├── MovieDetailsViewModel.kt │ │ ├── cases/ │ │ │ ├── MovieDetailsHiddenCase.kt │ │ │ ├── MovieDetailsListsCase.kt │ │ │ ├── MovieDetailsMainCase.kt │ │ │ ├── MovieDetailsMyMoviesCase.kt │ │ │ ├── MovieDetailsTranslationCase.kt │ │ │ └── MovieDetailsWatchlistCase.kt │ │ ├── helpers/ │ │ │ ├── MovieDetailsMeta.kt │ │ │ └── MovieLink.kt │ │ ├── sections/ │ │ │ ├── collections/ │ │ │ │ ├── details/ │ │ │ │ │ ├── MovieDetailsCollectionBottomSheet.kt │ │ │ │ │ ├── MovieDetailsCollectionUiState.kt │ │ │ │ │ ├── MovieDetailsCollectionViewModel.kt │ │ │ │ │ ├── cases/ │ │ │ │ │ │ ├── MovieDetailsCollectionDetailsCase.kt │ │ │ │ │ │ ├── MovieDetailsCollectionImagesCase.kt │ │ │ │ │ │ ├── MovieDetailsCollectionMoviesCase.kt │ │ │ │ │ │ └── MovieDetailsCollectionTranslationsCase.kt │ │ │ │ │ └── recycler/ │ │ │ │ │ ├── MovieDetailsCollectionAdapter.kt │ │ │ │ │ ├── MovieDetailsCollectionItem.kt │ │ │ │ │ ├── MovieDetailsCollectionItemDiffCallback.kt │ │ │ │ │ └── views/ │ │ │ │ │ ├── MovieDetailsCollectionHeaderView.kt │ │ │ │ │ ├── MovieDetailsCollectionItemView.kt │ │ │ │ │ └── MovieDetailsCollectionLoadingView.kt │ │ │ │ └── list/ │ │ │ │ ├── MovieDetailsCollectionsFragment.kt │ │ │ │ ├── MovieDetailsCollectionsUiState.kt │ │ │ │ ├── MovieDetailsCollectionsViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── MovieDetailsCollectionsCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── MovieCollectionAdapter.kt │ │ │ │ ├── MovieCollectionDiffCallback.kt │ │ │ │ └── MovieCollectionItemView.kt │ │ │ ├── people/ │ │ │ │ ├── MovieDetailsPeopleFragment.kt │ │ │ │ ├── MovieDetailsPeopleUiState.kt │ │ │ │ ├── MovieDetailsPeopleViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── MovieDetailsPeopleCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── ActorView.kt │ │ │ │ └── ActorsAdapter.kt │ │ │ ├── ratings/ │ │ │ │ ├── MovieDetailsRatingsFragment.kt │ │ │ │ ├── MovieDetailsRatingsUiState.kt │ │ │ │ ├── MovieDetailsRatingsViewModel.kt │ │ │ │ └── cases/ │ │ │ │ ├── MovieDetailsRatingCase.kt │ │ │ │ └── MovieDetailsRatingSpoilersCase.kt │ │ │ ├── related/ │ │ │ │ ├── MovieDetailsRelatedFragment.kt │ │ │ │ ├── MovieDetailsRelatedUiState.kt │ │ │ │ ├── MovieDetailsRelatedViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── MovieDetailsRelatedCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── RelatedItemDiffCallback.kt │ │ │ │ ├── RelatedListItem.kt │ │ │ │ ├── RelatedMovieAdapter.kt │ │ │ │ └── RelatedMovieView.kt │ │ │ └── streamings/ │ │ │ ├── MovieDetailsStreamingsFragment.kt │ │ │ ├── MovieDetailsStreamingsUiState.kt │ │ │ ├── MovieDetailsStreamingsViewModel.kt │ │ │ └── cases/ │ │ │ └── MovieDetailsStreamingCase.kt │ │ └── views/ │ │ └── AddToMoviesButton.kt │ └── res/ │ ├── drawable/ │ │ ├── bg_check_ripple.xml │ │ ├── bg_collection.xml │ │ ├── bg_collection_ripple.xml │ │ ├── bg_rank.xml │ │ └── divider_horizontal_list.xml │ ├── layout/ │ │ ├── fragment_movie_details.xml │ │ ├── fragment_movie_details_collection.xml │ │ ├── fragment_movie_details_people.xml │ │ ├── fragment_movie_details_ratings.xml │ │ ├── fragment_movie_details_related.xml │ │ ├── fragment_movie_details_streamings.xml │ │ ├── view_actor_movie.xml │ │ ├── view_add_to_movies_button.xml │ │ ├── view_movie_collection.xml │ │ ├── view_movie_collection_details.xml │ │ ├── view_movie_collection_items_list.xml │ │ ├── view_movie_collection_list_header.xml │ │ ├── view_movie_collection_list_item.xml │ │ ├── view_movie_collection_list_loading.xml │ │ └── view_related_movie.xml │ ├── layout-sw600dp/ │ │ ├── fragment_movie_details.xml │ │ ├── fragment_movie_details_collection.xml │ │ ├── fragment_movie_details_people.xml │ │ ├── fragment_movie_details_related.xml │ │ ├── fragment_movie_details_streamings.xml │ │ └── view_movie_collection.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-my-movies/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_my_movies/ │ │ ├── common/ │ │ │ ├── helpers/ │ │ │ │ ├── CollectionItemFilter.kt │ │ │ │ └── CollectionItemSorter.kt │ │ │ ├── layout/ │ │ │ │ ├── CollectionMovieGridItemDecoration.kt │ │ │ │ ├── CollectionMovieLayoutManagerProvider.kt │ │ │ │ └── CollectionMovieListItemDecoration.kt │ │ │ ├── recycler/ │ │ │ │ ├── CollectionAdapter.kt │ │ │ │ ├── CollectionItemDiffCallback.kt │ │ │ │ └── CollectionListItem.kt │ │ │ └── views/ │ │ │ ├── CollectionMovieCompactView.kt │ │ │ ├── CollectionMovieFiltersView.kt │ │ │ ├── CollectionMovieGridTitleView.kt │ │ │ ├── CollectionMovieGridView.kt │ │ │ └── CollectionMovieView.kt │ │ ├── filters/ │ │ │ ├── CollectionFiltersOrigin.kt │ │ │ ├── CollectionFiltersUiEvent.kt │ │ │ └── genre/ │ │ │ ├── CollectionFiltersGenreBottomSheet.kt │ │ │ ├── CollectionFiltersGenreUiState.kt │ │ │ └── CollectionFiltersGenreViewModel.kt │ │ ├── hidden/ │ │ │ ├── HiddenFragment.kt │ │ │ ├── HiddenUiState.kt │ │ │ ├── HiddenViewModel.kt │ │ │ └── cases/ │ │ │ ├── HiddenLoadMoviesCase.kt │ │ │ ├── HiddenRatingsCase.kt │ │ │ ├── HiddenSortOrderCase.kt │ │ │ └── HiddenViewModeCase.kt │ │ ├── main/ │ │ │ ├── FollowedMoviesFragment.kt │ │ │ ├── FollowedMoviesUiEvent.kt │ │ │ ├── FollowedMoviesUiState.kt │ │ │ ├── FollowedMoviesViewModel.kt │ │ │ └── FollowedPagesAdapter.kt │ │ ├── mymovies/ │ │ │ ├── MyMoviesFragment.kt │ │ │ ├── MyMoviesUiState.kt │ │ │ ├── MyMoviesViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── MyMoviesLoadCase.kt │ │ │ │ ├── MyMoviesRatingsCase.kt │ │ │ │ ├── MyMoviesSortingCase.kt │ │ │ │ └── MyMoviesViewModeCase.kt │ │ │ ├── helpers/ │ │ │ │ └── MyMoviesSorter.kt │ │ │ ├── recycler/ │ │ │ │ ├── MyMoviesAdapter.kt │ │ │ │ ├── MyMoviesItem.kt │ │ │ │ ├── MyMoviesItemDiffCallback.kt │ │ │ │ └── MyMoviesLayoutManagerProvider.kt │ │ │ ├── utilities/ │ │ │ │ ├── MyMoviesGridItemDecoration.kt │ │ │ │ └── MyMoviesListItemDecoration.kt │ │ │ └── views/ │ │ │ ├── MyMovieAllCompactView.kt │ │ │ ├── MyMovieAllGridTitleView.kt │ │ │ ├── MyMovieAllGridView.kt │ │ │ ├── MyMovieAllView.kt │ │ │ ├── MyMovieFanartView.kt │ │ │ ├── MyMovieHeaderView.kt │ │ │ └── MyMoviesRecentsView.kt │ │ └── watchlist/ │ │ ├── WatchlistFragment.kt │ │ ├── WatchlistUiState.kt │ │ ├── WatchlistViewModel.kt │ │ ├── cases/ │ │ │ ├── WatchlistFiltersCase.kt │ │ │ ├── WatchlistLoadMoviesCase.kt │ │ │ ├── WatchlistRatingsCase.kt │ │ │ ├── WatchlistSortOrderCase.kt │ │ │ └── WatchlistViewModeCase.kt │ │ └── recycler/ │ │ └── WatchlistListItem.kt │ └── res/ │ ├── drawable/ │ │ ├── divider_my_movies_fanart.xml │ │ └── divider_my_movies_horizontal.xml │ ├── layout/ │ │ ├── fragment_followed_movies.xml │ │ ├── fragment_hidden_movies.xml │ │ ├── fragment_my_movies.xml │ │ ├── fragment_watchlist_movies.xml │ │ ├── layout_hidden_empty.xml │ │ ├── layout_my_movies_empty.xml │ │ ├── layout_watchlist_movies_empty.xml │ │ ├── view_collection_movie.xml │ │ ├── view_collection_movie_compact.xml │ │ ├── view_collection_movie_grid.xml │ │ ├── view_collection_movie_grid_title.xml │ │ ├── view_filters_genres.xml │ │ ├── view_movies_filters.xml │ │ ├── view_my_movies_all.xml │ │ ├── view_my_movies_fanart.xml │ │ ├── view_my_movies_header.xml │ │ └── view_my_movies_recents.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-de/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-my-shows/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_my_shows/ │ │ ├── common/ │ │ │ ├── filters/ │ │ │ │ ├── CollectionFiltersOrigin.kt │ │ │ │ ├── CollectionFiltersUiEvent.kt │ │ │ │ ├── genre/ │ │ │ │ │ ├── CollectionFiltersGenreBottomSheet.kt │ │ │ │ │ ├── CollectionFiltersGenreUiState.kt │ │ │ │ │ └── CollectionFiltersGenreViewModel.kt │ │ │ │ └── network/ │ │ │ │ ├── CollectionFiltersNetworkBottomSheet.kt │ │ │ │ ├── CollectionFiltersNetworkUiState.kt │ │ │ │ └── CollectionFiltersNetworkViewModel.kt │ │ │ ├── layout/ │ │ │ │ ├── CollectionShowGridItemDecoration.kt │ │ │ │ ├── CollectionShowLayoutManagerProvider.kt │ │ │ │ └── CollectionShowListItemDecoration.kt │ │ │ ├── recycler/ │ │ │ │ ├── CollectionAdapter.kt │ │ │ │ ├── CollectionItemDiffCallback.kt │ │ │ │ └── CollectionListItem.kt │ │ │ └── views/ │ │ │ ├── CollectionShowCompactView.kt │ │ │ ├── CollectionShowFiltersView.kt │ │ │ ├── CollectionShowGridTitleView.kt │ │ │ ├── CollectionShowGridView.kt │ │ │ └── CollectionShowView.kt │ │ ├── hidden/ │ │ │ ├── HiddenFragment.kt │ │ │ ├── HiddenUiState.kt │ │ │ ├── HiddenViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── HiddenLoadShowsCase.kt │ │ │ │ ├── HiddenRatingsCase.kt │ │ │ │ ├── HiddenSortOrderCase.kt │ │ │ │ ├── HiddenTranslationsCase.kt │ │ │ │ └── HiddenViewModeCase.kt │ │ │ └── helpers/ │ │ │ └── HiddenItemSorter.kt │ │ ├── main/ │ │ │ ├── FollowedPagesAdapter.kt │ │ │ ├── FollowedShowsFragment.kt │ │ │ ├── FollowedShowsUiEvent.kt │ │ │ ├── FollowedShowsUiState.kt │ │ │ └── FollowedShowsViewModel.kt │ │ ├── myshows/ │ │ │ ├── MyShowsFragment.kt │ │ │ ├── MyShowsUiState.kt │ │ │ ├── MyShowsViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── MyShowsLoadShowsCase.kt │ │ │ │ ├── MyShowsRatingsCase.kt │ │ │ │ ├── MyShowsSortingCase.kt │ │ │ │ ├── MyShowsTranslationsCase.kt │ │ │ │ └── MyShowsViewModeCase.kt │ │ │ ├── filters/ │ │ │ │ ├── MyShowsFiltersBottomSheet.kt │ │ │ │ ├── MyShowsFiltersUiEvent.kt │ │ │ │ ├── MyShowsFiltersUiState.kt │ │ │ │ ├── MyShowsFiltersViewModel.kt │ │ │ │ └── views/ │ │ │ │ └── MyShowsFilterItemView.kt │ │ │ ├── helpers/ │ │ │ │ └── MyShowsItemSorter.kt │ │ │ ├── recycler/ │ │ │ │ ├── MyShowsAdapter.kt │ │ │ │ ├── MyShowsItem.kt │ │ │ │ ├── MyShowsItemDiffCallback.kt │ │ │ │ └── MyShowsLayoutManagerProvider.kt │ │ │ └── views/ │ │ │ ├── MyShowAllCompactView.kt │ │ │ ├── MyShowAllView.kt │ │ │ ├── MyShowFanartView.kt │ │ │ ├── MyShowGridTitleView.kt │ │ │ ├── MyShowGridView.kt │ │ │ ├── MyShowHeaderView.kt │ │ │ └── MyShowsRecentsView.kt │ │ ├── utilities/ │ │ │ ├── MyShowsGridItemDecoration.kt │ │ │ └── MyShowsListItemDecoration.kt │ │ └── watchlist/ │ │ ├── WatchlistFragment.kt │ │ ├── WatchlistUiState.kt │ │ ├── WatchlistViewModel.kt │ │ ├── cases/ │ │ │ ├── WatchlistFiltersCase.kt │ │ │ ├── WatchlistLoadShowsCase.kt │ │ │ ├── WatchlistRatingsCase.kt │ │ │ ├── WatchlistSortOrderCase.kt │ │ │ ├── WatchlistTranslationsCase.kt │ │ │ └── WatchlistViewModeCase.kt │ │ └── helpers/ │ │ ├── WatchlistItemFilter.kt │ │ └── WatchlistItemSorter.kt │ └── res/ │ ├── layout/ │ │ ├── fragment_followed_shows.xml │ │ ├── fragment_hidden.xml │ │ ├── fragment_my_shows.xml │ │ ├── fragment_watchlist.xml │ │ ├── layout_archive_empty.xml │ │ ├── layout_my_shows_empty.xml │ │ ├── layout_watchlist_empty.xml │ │ ├── view_collection_show.xml │ │ ├── view_collection_show_compact.xml │ │ ├── view_collection_show_grid.xml │ │ ├── view_collection_show_grid_title.xml │ │ ├── view_filters_genres.xml │ │ ├── view_filters_networks.xml │ │ ├── view_my_shows_fanart.xml │ │ ├── view_my_shows_header.xml │ │ ├── view_my_shows_recents.xml │ │ ├── view_my_shows_type_filter_item.xml │ │ ├── view_my_shows_type_filters.xml │ │ └── view_shows_filters.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-de/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-navigation/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com.michaldrabik.ui_navigation.java/ │ │ └── NavigationArgs.kt │ └── res/ │ ├── anim/ │ │ ├── anim_fade_in.xml │ │ ├── anim_fade_out.xml │ │ ├── anim_in_from_left.xml │ │ ├── anim_in_from_right.xml │ │ ├── anim_out_from_left.xml │ │ └── anim_out_from_right.xml │ ├── anim-ar/ │ │ ├── anim_in_from_left.xml │ │ ├── anim_in_from_right.xml │ │ ├── anim_out_from_left.xml │ │ └── anim_out_from_right.xml │ └── navigation/ │ └── navigation_graph.xml ├── ui-news/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_news/ │ │ │ ├── NewsFragment.kt │ │ │ ├── NewsUiState.kt │ │ │ ├── NewsViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── NewsFiltersCase.kt │ │ │ │ ├── NewsLoadItemsCase.kt │ │ │ │ └── NewsViewTypeCase.kt │ │ │ ├── providers/ │ │ │ │ └── NewsLayoutManagerProvider.kt │ │ │ ├── recycler/ │ │ │ │ ├── NewsAdapter.kt │ │ │ │ ├── NewsListItem.kt │ │ │ │ └── NewsListItemDiffCallback.kt │ │ │ └── views/ │ │ │ ├── NewsFiltersView.kt │ │ │ ├── NewsHeaderView.kt │ │ │ └── item/ │ │ │ ├── NewsItemCardView.kt │ │ │ ├── NewsItemRowView.kt │ │ │ └── NewsItemViewType.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── bg_news_card_view_elevation.xml │ │ │ ├── bg_news_card_view_placeholder.xml │ │ │ ├── bg_play_circle.xml │ │ │ ├── divider_news.xml │ │ │ ├── ic_play_arrow.xml │ │ │ ├── ic_view_cards.xml │ │ │ └── iv_view_list.xml │ │ ├── layout/ │ │ │ ├── fragment_news.xml │ │ │ ├── layout_news_empty.xml │ │ │ ├── view_news_filters.xml │ │ │ ├── view_news_header.xml │ │ │ ├── view_news_item.xml │ │ │ └── view_news_item_card.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── ui_news/ │ └── ExampleUnitTest.kt ├── ui-people/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_people/ │ │ │ ├── details/ │ │ │ │ ├── PersonDetailsArgs.kt │ │ │ │ ├── PersonDetailsBottomSheet.kt │ │ │ │ ├── PersonDetailsUiEvent.kt │ │ │ │ ├── PersonDetailsUiState.kt │ │ │ │ ├── PersonDetailsViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ ├── PersonDetailsCreditsCase.kt │ │ │ │ │ ├── PersonDetailsImagesCase.kt │ │ │ │ │ ├── PersonDetailsLoadCase.kt │ │ │ │ │ └── PersonDetailsTranslationsCase.kt │ │ │ │ ├── links/ │ │ │ │ │ └── PersonLinksBottomSheet.kt │ │ │ │ └── recycler/ │ │ │ │ ├── PersonDetailsAdapter.kt │ │ │ │ ├── PersonDetailsItem.kt │ │ │ │ ├── PersonDetailsItemDiffCallback.kt │ │ │ │ └── views/ │ │ │ │ ├── PersonDetailsBioView.kt │ │ │ │ ├── PersonDetailsCreditsItemView.kt │ │ │ │ ├── PersonDetailsFiltersView.kt │ │ │ │ ├── PersonDetailsHeaderView.kt │ │ │ │ ├── PersonDetailsInfoView.kt │ │ │ │ └── PersonDetailsLoadingView.kt │ │ │ ├── gallery/ │ │ │ │ ├── PersonGalleryFragment.kt │ │ │ │ ├── PersonGalleryUiState.kt │ │ │ │ ├── PersonGalleryViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── PersonGalleryImagesCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── ImageItemDiffCallback.kt │ │ │ │ ├── PersonGalleryAdapter.kt │ │ │ │ └── views/ │ │ │ │ └── PersonGalleryImageView.kt │ │ │ └── list/ │ │ │ ├── PeopleListBottomSheet.kt │ │ │ ├── PeopleListUiState.kt │ │ │ ├── PeopleListViewModel.kt │ │ │ ├── cases/ │ │ │ │ └── PeopleListItemsCase.kt │ │ │ └── recycler/ │ │ │ ├── PeopleItemDiffCallback.kt │ │ │ ├── PeopleListAdapter.kt │ │ │ ├── PeopleListItem.kt │ │ │ └── views/ │ │ │ ├── PeopleListHeaderView.kt │ │ │ └── PeopleListItemView.kt │ │ └── res/ │ │ ├── color/ │ │ │ ├── selector_search_chip_background.xml │ │ │ └── selector_search_chip_text.xml │ │ ├── drawable/ │ │ │ ├── bg_indicator_circle.xml │ │ │ ├── bg_person_image_elevation.xml │ │ │ └── bg_person_placeholder.xml │ │ ├── drawable-notnight/ │ │ │ └── bg_indicator_circle.xml │ │ ├── layout/ │ │ │ ├── fragment_person_gallery.xml │ │ │ ├── view_people_list.xml │ │ │ ├── view_people_list_header.xml │ │ │ ├── view_people_list_item.xml │ │ │ ├── view_person_details.xml │ │ │ ├── view_person_details_bio.xml │ │ │ ├── view_person_details_credits_item.xml │ │ │ ├── view_person_details_filters.xml │ │ │ ├── view_person_details_header.xml │ │ │ ├── view_person_details_info.xml │ │ │ ├── view_person_details_loading.xml │ │ │ ├── view_person_gallery_image.xml │ │ │ └── view_person_links.xml │ │ ├── layout-sw600dp/ │ │ │ └── view_person_details_credits_item.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── ui_people/ │ └── ExampleUnitTest.kt ├── ui-premium/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_premium/ │ │ ├── PremiumFragment.kt │ │ ├── PremiumUiEvent.kt │ │ ├── PremiumUiState.kt │ │ ├── PremiumViewModel.kt │ │ └── views/ │ │ └── PurchaseItemView.kt │ └── res/ │ ├── drawable/ │ │ ├── divider_purchase_items.xml │ │ ├── ic_flash.xml │ │ ├── ic_genie.xml │ │ ├── ic_homer.xml │ │ ├── ic_spongebob.xml │ │ ├── ic_walter_white.xml │ │ ├── ic_yoda.xml │ │ └── ic_zoidberg.xml │ ├── layout/ │ │ ├── fragment_premium.xml │ │ └── view_purchase_item.xml │ ├── values/ │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-progress/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_progress/ │ │ ├── calendar/ │ │ │ ├── CalendarFragment.kt │ │ │ ├── CalendarUiState.kt │ │ │ ├── CalendarViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── CalendarRatingsCase.kt │ │ │ │ └── items/ │ │ │ │ ├── CalendarFutureCase.kt │ │ │ │ ├── CalendarItemsCase.kt │ │ │ │ └── CalendarRecentsCase.kt │ │ │ ├── helpers/ │ │ │ │ ├── WatchlistAppender.kt │ │ │ │ ├── filters/ │ │ │ │ │ ├── CalendarFilter.kt │ │ │ │ │ ├── CalendarFutureFilter.kt │ │ │ │ │ └── CalendarRecentsFilter.kt │ │ │ │ └── groupers/ │ │ │ │ ├── CalendarFutureGrouper.kt │ │ │ │ ├── CalendarGrouper.kt │ │ │ │ └── CalendarRecentsGrouper.kt │ │ │ ├── recycler/ │ │ │ │ ├── CalendarAdapter.kt │ │ │ │ ├── CalendarItemDiffCallback.kt │ │ │ │ └── CalendarListItem.kt │ │ │ └── views/ │ │ │ ├── CalendarHeaderView.kt │ │ │ └── CalendarItemView.kt │ │ ├── helpers/ │ │ │ ├── ProgressItemsSorter.kt │ │ │ ├── ProgressLayoutManagerProvider.kt │ │ │ ├── TopOverscrollAdapter.kt │ │ │ └── TranslationsBundle.kt │ │ ├── main/ │ │ │ ├── ProgressMainFragment.kt │ │ │ ├── ProgressMainUiEvents.kt │ │ │ ├── ProgressMainUiState.kt │ │ │ ├── ProgressMainViewModel.kt │ │ │ ├── adapters/ │ │ │ │ └── ProgressMainAdapter.kt │ │ │ └── cases/ │ │ │ └── ProgressMainEpisodesCase.kt │ │ └── progress/ │ │ ├── ProgressFragment.kt │ │ ├── ProgressUiState.kt │ │ ├── ProgressViewModel.kt │ │ ├── cases/ │ │ │ ├── ProgressFiltersCase.kt │ │ │ ├── ProgressHeadersCase.kt │ │ │ ├── ProgressItemsCase.kt │ │ │ ├── ProgressRatingsCase.kt │ │ │ └── ProgressSortOrderCase.kt │ │ ├── recycler/ │ │ │ ├── ProgressAdapter.kt │ │ │ ├── ProgressItemDiffCallback.kt │ │ │ └── ProgressListItem.kt │ │ └── views/ │ │ ├── ProgressFiltersView.kt │ │ ├── ProgressHeaderView.kt │ │ └── ProgressItemView.kt │ └── res/ │ ├── layout/ │ │ ├── fragment_calendar.xml │ │ ├── fragment_progress.xml │ │ ├── fragment_progress_main.xml │ │ ├── layout_calendar_empty.xml │ │ ├── layout_progress_empty.xml │ │ ├── layout_recents_empty.xml │ │ ├── view_calendar_header.xml │ │ ├── view_calendar_item.xml │ │ ├── view_progress_filters.xml │ │ ├── view_progress_header.xml │ │ └── view_progress_item.xml │ ├── values/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-ar/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-de/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-pt/ │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-progress-movies/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_progress_movies/ │ │ │ ├── calendar/ │ │ │ │ ├── CalendarMoviesFragment.kt │ │ │ │ ├── CalendarMoviesUiState.kt │ │ │ │ ├── CalendarMoviesViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ ├── CalendarMoviesRatingsCase.kt │ │ │ │ │ └── items/ │ │ │ │ │ ├── CalendarMoviesFutureCase.kt │ │ │ │ │ ├── CalendarMoviesItemsCase.kt │ │ │ │ │ └── CalendarMoviesRecentsCase.kt │ │ │ │ ├── helpers/ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ ├── CalendarFilter.kt │ │ │ │ │ │ ├── CalendarFutureFilter.kt │ │ │ │ │ │ └── CalendarRecentsFilter.kt │ │ │ │ │ ├── groupers/ │ │ │ │ │ │ ├── CalendarFutureGrouper.kt │ │ │ │ │ │ ├── CalendarGrouper.kt │ │ │ │ │ │ └── CalendarRecentsGrouper.kt │ │ │ │ │ └── sorter/ │ │ │ │ │ ├── CalendarFutureSorter.kt │ │ │ │ │ ├── CalendarRecentsSorter.kt │ │ │ │ │ └── CalendarSorter.kt │ │ │ │ ├── recycler/ │ │ │ │ │ ├── CalendarMovieItemDiffCallback.kt │ │ │ │ │ ├── CalendarMovieListItem.kt │ │ │ │ │ └── CalendarMoviesAdapter.kt │ │ │ │ └── views/ │ │ │ │ ├── CalendarMoviesHeaderView.kt │ │ │ │ └── CalendarMoviesItemView.kt │ │ │ ├── helpers/ │ │ │ │ ├── ProgressMoviesItemsSorter.kt │ │ │ │ ├── ProgressMoviesLayoutManagerProvider.kt │ │ │ │ └── TopOverscrollAdapter.kt │ │ │ ├── main/ │ │ │ │ ├── ProgressMoviesMainAdapter.kt │ │ │ │ ├── ProgressMoviesMainFragment.kt │ │ │ │ ├── ProgressMoviesMainUiEvents.kt │ │ │ │ ├── ProgressMoviesMainUiState.kt │ │ │ │ ├── ProgressMoviesMainViewModel.kt │ │ │ │ └── cases/ │ │ │ │ └── ProgressMoviesMainCase.kt │ │ │ └── progress/ │ │ │ ├── ProgressMoviesFragment.kt │ │ │ ├── ProgressMoviesUiState.kt │ │ │ ├── ProgressMoviesViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── ProgressMoviesItemsCase.kt │ │ │ │ ├── ProgressMoviesPinnedCase.kt │ │ │ │ └── ProgressMoviesSortCase.kt │ │ │ ├── recycler/ │ │ │ │ ├── ProgressMovieItemDiffCallback.kt │ │ │ │ ├── ProgressMovieListItem.kt │ │ │ │ └── ProgressMoviesAdapter.kt │ │ │ └── views/ │ │ │ ├── ProgressMoviesFiltersView.kt │ │ │ └── ProgressMoviesItemView.kt │ │ └── res/ │ │ ├── layout/ │ │ │ ├── fragment_calendar_movies.xml │ │ │ ├── fragment_progress_main_movies.xml │ │ │ ├── fragment_progress_movies.xml │ │ │ ├── layout_calendar_movies_future_empty.xml │ │ │ ├── layout_calendar_movies_recents_empty.xml │ │ │ ├── layout_progress_movies_empty.xml │ │ │ ├── view_calendar_movies_header.xml │ │ │ ├── view_progress_movies_calendar_item.xml │ │ │ ├── view_progress_movies_filters.xml │ │ │ └── view_progress_movies_main_item.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── ui_progress_movies/ │ ├── BaseMockTest.kt │ ├── calendar/ │ │ ├── CalendarMoviesViewModelTest.kt │ │ ├── cases/ │ │ │ └── CalendarMoviesRatingsCaseTest.kt │ │ └── helpers/ │ │ ├── filters/ │ │ │ ├── CalendarFutureFilterTest.kt │ │ │ └── CalendarRecentsFilterTest.kt │ │ ├── groupers/ │ │ │ ├── CalendarFutureGrouperTest.kt │ │ │ └── CalendarRecentsGrouperTest.kt │ │ └── sorter/ │ │ ├── CalendarFutureSorterTest.kt │ │ └── CalendarRecentsSorterTest.kt │ ├── main/ │ │ ├── ProgressMoviesMainViewModelTest.kt │ │ └── cases/ │ │ └── ProgressMoviesMainCaseTest.kt │ └── progress/ │ ├── ProgressMoviesViewModelTest.kt │ └── cases/ │ ├── ProgressMoviesItemsCaseTest.kt │ ├── ProgressMoviesPinnedCaseTest.kt │ └── ProgressMoviesSortCaseTest.kt ├── ui-search/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_search/ │ │ │ ├── SearchFragment.kt │ │ │ ├── SearchUiState.kt │ │ │ ├── SearchViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── SearchFiltersCase.kt │ │ │ │ ├── SearchInvalidateItemCase.kt │ │ │ │ ├── SearchQueryCase.kt │ │ │ │ ├── SearchRecentsCase.kt │ │ │ │ ├── SearchSortingCase.kt │ │ │ │ ├── SearchSuggestionsCase.kt │ │ │ │ └── SearchTranslationsCase.kt │ │ │ ├── recycler/ │ │ │ │ ├── SearchAdapter.kt │ │ │ │ ├── SearchItemDiffCallback.kt │ │ │ │ ├── SearchListItem.kt │ │ │ │ └── suggestions/ │ │ │ │ ├── SuggestionAdapter.kt │ │ │ │ └── SuggestionItemDiffCallback.kt │ │ │ ├── utilities/ │ │ │ │ ├── SearchLayoutManagerProvider.kt │ │ │ │ ├── SearchOptions.kt │ │ │ │ └── TextWatcherAdapter.kt │ │ │ └── views/ │ │ │ ├── InitialSearchView.kt │ │ │ ├── RecentSearchView.kt │ │ │ ├── SearchFiltersView.kt │ │ │ ├── SearchItemView.kt │ │ │ └── SearchSuggestionView.kt │ │ └── res/ │ │ ├── color/ │ │ │ ├── selector_search_chip_background.xml │ │ │ └── selector_search_chip_text.xml │ │ ├── color-notnight/ │ │ │ └── selector_search_chip_background.xml │ │ ├── drawable/ │ │ │ └── bg_suggestions.xml │ │ ├── layout/ │ │ │ ├── fragment_search.xml │ │ │ ├── view_search_filters.xml │ │ │ ├── view_search_initial.xml │ │ │ ├── view_search_recent.xml │ │ │ ├── view_show_search.xml │ │ │ └── view_suggestion_search.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com.michaldrabik.ui_search/ │ ├── BaseMockTest.kt │ ├── SearchViewModelTest.kt │ ├── cases/ │ │ ├── SearchFiltersCaseTest.kt │ │ ├── SearchQueryCaseTest.kt │ │ ├── SearchRecentsCaseTest.kt │ │ ├── SearchSortingCaseTest.kt │ │ ├── SearchSuggestionsCaseTest.kt │ │ └── SearchTranslationsCaseTest.kt │ └── helpers/ │ └── TestData.kt ├── ui-settings/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_settings/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_settings/ │ │ │ ├── SettingsFragment.kt │ │ │ ├── SettingsUiState.kt │ │ │ ├── SettingsViewModel.kt │ │ │ ├── helpers/ │ │ │ │ ├── AppLanguage.kt │ │ │ │ ├── AppTheme.kt │ │ │ │ └── WidgetTransparency.kt │ │ │ └── sections/ │ │ │ ├── general/ │ │ │ │ ├── SettingsGeneralFragment.kt │ │ │ │ ├── SettingsGeneralUiState.kt │ │ │ │ ├── SettingsGeneralViewModel.kt │ │ │ │ └── cases/ │ │ │ │ ├── SettingsGeneralMainCase.kt │ │ │ │ ├── SettingsGeneralStreamingsCase.kt │ │ │ │ └── SettingsGeneralThemesCase.kt │ │ │ ├── misc/ │ │ │ │ ├── SettingsMiscFragment.kt │ │ │ │ ├── SettingsMiscUiState.kt │ │ │ │ ├── SettingsMiscViewModel.kt │ │ │ │ └── cases/ │ │ │ │ ├── SettingsMiscCacheCase.kt │ │ │ │ └── SettingsMiscUserCase.kt │ │ │ ├── notifications/ │ │ │ │ ├── SettingsNotificationsFragment.kt │ │ │ │ ├── SettingsNotificationsUiEvent.kt │ │ │ │ ├── SettingsNotificationsUiState.kt │ │ │ │ ├── SettingsNotificationsViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── SettingsNotificationsMainCase.kt │ │ │ │ └── views/ │ │ │ │ └── NotificationsRationaleView.kt │ │ │ ├── spoilers/ │ │ │ │ ├── SettingsSpoilersFragment.kt │ │ │ │ ├── SettingsSpoilersUiState.kt │ │ │ │ ├── SettingsSpoilersViewModel.kt │ │ │ │ ├── episodes/ │ │ │ │ │ ├── SpoilersEpisodesBottomSheet.kt │ │ │ │ │ ├── SpoilersEpisodesUiState.kt │ │ │ │ │ └── SpoilersEpisodesViewModel.kt │ │ │ │ ├── helpers/ │ │ │ │ │ └── SettingsSpoilersHelper.kt │ │ │ │ ├── movies/ │ │ │ │ │ ├── SpoilersMoviesBottomSheet.kt │ │ │ │ │ ├── SpoilersMoviesUiState.kt │ │ │ │ │ └── SpoilersMoviesViewModel.kt │ │ │ │ └── shows/ │ │ │ │ ├── SpoilersShowsBottomSheet.kt │ │ │ │ ├── SpoilersShowsUiState.kt │ │ │ │ └── SpoilersShowsViewModel.kt │ │ │ ├── trakt/ │ │ │ │ ├── SettingsTraktFragment.kt │ │ │ │ ├── SettingsTraktUiEvent.kt │ │ │ │ ├── SettingsTraktUiState.kt │ │ │ │ ├── SettingsTraktViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ ├── SettingsRatingsCase.kt │ │ │ │ │ ├── SettingsTraktCase.kt │ │ │ │ │ └── SettingsTraktMainCase.kt │ │ │ │ └── views/ │ │ │ │ └── TraktNotificationsRationaleView.kt │ │ │ └── widgets/ │ │ │ ├── SettingsWidgetsFragment.kt │ │ │ ├── SettingsWidgetsUiState.kt │ │ │ ├── SettingsWidgetsViewModel.kt │ │ │ └── cases/ │ │ │ ├── SettingsWidgetsMainCase.kt │ │ │ └── SettingsWidgetsThemesCase.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ └── bg_premium_ad.xml │ │ ├── layout/ │ │ │ ├── fragment_settings.xml │ │ │ ├── fragment_settings_general.xml │ │ │ ├── fragment_settings_misc.xml │ │ │ ├── fragment_settings_notifications.xml │ │ │ ├── fragment_settings_spoilers.xml │ │ │ ├── fragment_settings_trakt.xml │ │ │ ├── fragment_settings_widgets.xml │ │ │ ├── sheet_spoilers_episodes.xml │ │ │ ├── sheet_spoilers_movies.xml │ │ │ ├── sheet_spoilers_shows.xml │ │ │ ├── view_notifications_rationale.xml │ │ │ └── view_trakt_notifications_rationale.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ ├── dimens.xml │ │ │ └── styles.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── michaldrabik/ │ └── ui_settings/ │ └── ExampleUnitTest.kt ├── ui-show/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_show/ │ │ ├── ShowDetailsFragment.kt │ │ ├── ShowDetailsUiEvents.kt │ │ ├── ShowDetailsUiState.kt │ │ ├── ShowDetailsViewModel.kt │ │ ├── cases/ │ │ │ ├── ShowDetailsHiddenCase.kt │ │ │ ├── ShowDetailsListsCase.kt │ │ │ ├── ShowDetailsMainCase.kt │ │ │ ├── ShowDetailsMyShowsCase.kt │ │ │ ├── ShowDetailsTranslationCase.kt │ │ │ └── ShowDetailsWatchlistCase.kt │ │ ├── episodes/ │ │ │ ├── ShowDetailsEpisodesFragment.kt │ │ │ ├── ShowDetailsEpisodesUiEvents.kt │ │ │ ├── ShowDetailsEpisodesUiState.kt │ │ │ ├── ShowDetailsEpisodesViewModel.kt │ │ │ ├── cases/ │ │ │ │ ├── EpisodesAnnouncementsCase.kt │ │ │ │ ├── EpisodesLoadShowCase.kt │ │ │ │ ├── EpisodesMarkWatchedCase.kt │ │ │ │ ├── EpisodesRatingCase.kt │ │ │ │ ├── EpisodesSetEpisodeWatchedCase.kt │ │ │ │ ├── EpisodesSetSeasonWatchedCase.kt │ │ │ │ └── EpisodesTranslationCase.kt │ │ │ └── recycler/ │ │ │ ├── EpisodeListItem.kt │ │ │ ├── EpisodeListItemDiffCallback.kt │ │ │ ├── EpisodeView.kt │ │ │ └── EpisodesAdapter.kt │ │ ├── helpers/ │ │ │ └── ShowDetailsMeta.kt │ │ ├── quicksetup/ │ │ │ ├── QuickSetupAdapter.kt │ │ │ ├── QuickSetupItemDiffCallback.kt │ │ │ ├── QuickSetupListItem.kt │ │ │ ├── QuickSetupView.kt │ │ │ └── views/ │ │ │ ├── QuickSetupHeaderView.kt │ │ │ └── QuickSetupItemView.kt │ │ ├── sections/ │ │ │ ├── nextepisode/ │ │ │ │ ├── ShowDetailsNextEpisodeFragment.kt │ │ │ │ ├── ShowDetailsNextEpisodeUiState.kt │ │ │ │ ├── ShowDetailsNextEpisodeViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ ├── ShowDetailsNextEpisodeCase.kt │ │ │ │ │ ├── ShowDetailsTranslationCase.kt │ │ │ │ │ └── ShowDetailsWatchedCase.kt │ │ │ │ └── helpers/ │ │ │ │ └── NextEpisodeBundle.kt │ │ │ ├── people/ │ │ │ │ ├── ShowDetailsPeopleFragment.kt │ │ │ │ ├── ShowDetailsPeopleUiState.kt │ │ │ │ ├── ShowDetailsPeopleViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── ShowDetailsPeopleCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── ActorView.kt │ │ │ │ └── ActorsAdapter.kt │ │ │ ├── ratings/ │ │ │ │ ├── ShowDetailsRatingsFragment.kt │ │ │ │ ├── ShowDetailsRatingsUiState.kt │ │ │ │ ├── ShowDetailsRatingsViewModel.kt │ │ │ │ ├── ShowLink.kt │ │ │ │ └── cases/ │ │ │ │ ├── ShowDetailsRatingCase.kt │ │ │ │ └── ShowDetailsRatingSpoilersCase.kt │ │ │ ├── related/ │ │ │ │ ├── ShowDetailsRelatedFragment.kt │ │ │ │ ├── ShowDetailsRelatedUiState.kt │ │ │ │ ├── ShowDetailsRelatedViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ └── ShowDetailsRelatedCase.kt │ │ │ │ └── recycler/ │ │ │ │ ├── RelatedItemDiffCallback.kt │ │ │ │ ├── RelatedListItem.kt │ │ │ │ ├── RelatedShowAdapter.kt │ │ │ │ └── RelatedShowView.kt │ │ │ ├── seasons/ │ │ │ │ ├── ShowDetailsSeasonsFragment.kt │ │ │ │ ├── ShowDetailsSeasonsUiEvents.kt │ │ │ │ ├── ShowDetailsSeasonsUiState.kt │ │ │ │ ├── ShowDetailsSeasonsViewModel.kt │ │ │ │ ├── cases/ │ │ │ │ │ ├── ShowDetailsLoadSeasonsCase.kt │ │ │ │ │ ├── ShowDetailsQuickProgressCase.kt │ │ │ │ │ └── ShowDetailsWatchedSeasonCase.kt │ │ │ │ ├── helpers/ │ │ │ │ │ ├── SeasonsBundle.kt │ │ │ │ │ └── SeasonsCache.kt │ │ │ │ └── recycler/ │ │ │ │ ├── SeasonListItem.kt │ │ │ │ ├── SeasonListItemDiffCallback.kt │ │ │ │ ├── SeasonView.kt │ │ │ │ ├── SeasonsAdapter.kt │ │ │ │ └── helpers/ │ │ │ │ ├── SeasonsGridItemDecoration.kt │ │ │ │ └── SeasonsLayoutManagerProvider.kt │ │ │ └── streamings/ │ │ │ ├── ShowDetailsStreamingsFragment.kt │ │ │ ├── ShowDetailsStreamingsUiState.kt │ │ │ ├── ShowDetailsStreamingsViewModel.kt │ │ │ └── cases/ │ │ │ └── ShowDetailsStreamingCase.kt │ │ └── views/ │ │ └── AddToShowsButton.kt │ └── res/ │ ├── drawable/ │ │ ├── divider_horizontal_list.xml │ │ ├── ic_arrow_right.xml │ │ ├── ic_locked.xml │ │ ├── ic_quick_setup.xml │ │ └── ic_unlocked.xml │ ├── drawable-ar/ │ │ └── ic_arrow_right.xml │ ├── layout/ │ │ ├── fragment_show_details.xml │ │ ├── fragment_show_details_episodes.xml │ │ ├── fragment_show_details_next_episode.xml │ │ ├── fragment_show_details_people.xml │ │ ├── fragment_show_details_ratings.xml │ │ ├── fragment_show_details_related.xml │ │ ├── fragment_show_details_seasons.xml │ │ ├── fragment_show_details_streamings.xml │ │ ├── view_actor.xml │ │ ├── view_add_to_shows_button.xml │ │ ├── view_episode.xml │ │ ├── view_quick_setup.xml │ │ ├── view_quick_setup_header.xml │ │ ├── view_quick_setup_item.xml │ │ ├── view_related_show.xml │ │ └── view_season.xml │ ├── layout-sw600dp/ │ │ ├── fragment_show_details.xml │ │ ├── fragment_show_details_next_episode.xml │ │ ├── fragment_show_details_people.xml │ │ ├── fragment_show_details_related.xml │ │ ├── fragment_show_details_seasons.xml │ │ └── view_season.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-fi/ │ │ └── strings.xml │ ├── values-fr/ │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-pt/ │ │ ├── dimens.xml │ │ └── strings.xml │ ├── values-ru/ │ │ └── strings.xml │ ├── values-sw600dp/ │ │ └── dimens.xml │ ├── values-tr/ │ │ └── strings.xml │ ├── values-uk/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── values-zh/ │ └── strings.xml ├── ui-statistics/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_statistics/ │ │ │ ├── StatisticsFragment.kt │ │ │ ├── StatisticsUiState.kt │ │ │ ├── StatisticsViewModel.kt │ │ │ ├── cases/ │ │ │ │ └── StatisticsLoadRatingsCase.kt │ │ │ └── views/ │ │ │ ├── StatisticsTopGenresView.kt │ │ │ ├── StatisticsTotalEpisodesView.kt │ │ │ ├── StatisticsTotalTimeSpentView.kt │ │ │ ├── mostWatched/ │ │ │ │ ├── StatisticsMostWatchedItem.kt │ │ │ │ ├── StatisticsMostWatchedItemView.kt │ │ │ │ ├── StatisticsMostWatchedShowsView.kt │ │ │ │ └── recycler/ │ │ │ │ ├── MostWatchedAdapter.kt │ │ │ │ └── MostWatchedItemDiffCallback.kt │ │ │ └── ratings/ │ │ │ ├── StatisticsRateItemView.kt │ │ │ ├── StatisticsRatingsView.kt │ │ │ └── recycler/ │ │ │ ├── StatisticsRatingItem.kt │ │ │ ├── StatisticsRatingsAdapter.kt │ │ │ └── StatisticsRatingsDiffCallback.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── divider_statistics_most_watched.xml │ │ │ └── divider_statistics_ratings.xml │ │ ├── layout/ │ │ │ ├── fragment_statistics.xml │ │ │ ├── layout_statistics_empty.xml │ │ │ ├── view_statistics_card_most_watched_shows.xml │ │ │ ├── view_statistics_card_ratings.xml │ │ │ ├── view_statistics_card_top_genre.xml │ │ │ ├── view_statistics_card_total_episodes.xml │ │ │ ├── view_statistics_card_total_time.xml │ │ │ ├── view_statistics_most_watched_item.xml │ │ │ └── view_statistics_rate_item.xml │ │ ├── layout-sw600dp/ │ │ │ └── fragment_statistics.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-notnight/ │ │ │ └── dimens.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ ├── BaseMockTest.kt │ ├── TestData.kt │ └── com/ │ └── michaldrabik/ │ └── ui_statistics/ │ ├── StatisticsViewModelTest.kt │ └── cases/ │ └── StatisticsLoadRatingsCaseTest.kt ├── ui-statistics-movies/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_statistics_movies/ │ │ │ ├── StatisticsMoviesFragment.kt │ │ │ ├── StatisticsMoviesUiState.kt │ │ │ ├── StatisticsMoviesViewModel.kt │ │ │ ├── cases/ │ │ │ │ └── StatisticsMoviesLoadRatingsCase.kt │ │ │ └── views/ │ │ │ ├── StatisticsMoviesTopGenresView.kt │ │ │ ├── StatisticsMoviesTotalMoviesView.kt │ │ │ ├── StatisticsMoviesTotalTimeSpentView.kt │ │ │ └── ratings/ │ │ │ ├── StatisticsMoviesRateItemView.kt │ │ │ ├── StatisticsMoviesRatingsView.kt │ │ │ └── recycler/ │ │ │ ├── StatisticsMoviesRatingItem.kt │ │ │ ├── StatisticsMoviesRatingsAdapter.kt │ │ │ └── StatisticsMoviesRatingsDiffCallback.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ └── divider_statistics_ratings.xml │ │ ├── layout/ │ │ │ ├── fragment_statistics_movies.xml │ │ │ ├── layout_statistics_movies_empty.xml │ │ │ ├── view_statistics_movies_card_ratings.xml │ │ │ ├── view_statistics_movies_card_top_genre.xml │ │ │ ├── view_statistics_movies_card_total_movies.xml │ │ │ ├── view_statistics_movies_card_total_time.xml │ │ │ └── view_statistics_movies_rate_item.xml │ │ ├── layout-sw600dp/ │ │ │ └── fragment_statistics_movies.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-notnight/ │ │ │ └── dimens.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ ├── BaseMockTest.kt │ └── com/ │ └── michaldrabik/ │ └── ui_statistics_movies/ │ ├── StatisticsMoviesViewModelTest.kt │ └── cases/ │ └── StatisticsMoviesLoadRatingsCaseTest.kt ├── ui-streamings/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_streamings/ │ │ ├── recycler/ │ │ │ ├── StreamingAdapter.kt │ │ │ └── StreamingItemDiffCallback.kt │ │ └── views/ │ │ └── StreamingView.kt │ └── res/ │ ├── drawable/ │ │ ├── bg_streaming.xml │ │ └── bg_streaming_ripple.xml │ ├── layout/ │ │ └── view_streaming.xml │ ├── layout-sw600dp/ │ │ └── view_streaming.xml │ ├── values/ │ │ └── dimens.xml │ └── values-sw600dp/ │ └── dimens.xml ├── ui-trakt-sync/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── michaldrabik/ │ │ │ └── ui_trakt_sync/ │ │ │ ├── TraktSyncFragment.kt │ │ │ ├── TraktSyncUiEvent.kt │ │ │ ├── TraktSyncUiState.kt │ │ │ ├── TraktSyncViewModel.kt │ │ │ ├── cases/ │ │ │ │ └── TraktSyncRatingsCase.kt │ │ │ └── views/ │ │ │ └── NotificationsRationaleView.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ └── ic_sync.xml │ │ ├── layout/ │ │ │ ├── fragment_trakt_sync.xml │ │ │ └── view_trakt_notifications_rationale.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── values-ar/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sw600dp/ │ │ │ └── dimens.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ └── test/ │ └── java/ │ ├── BaseMockTest.kt │ └── com/ │ └── michaldrabik/ │ └── ui_trakt_sync/ │ └── TraktSyncViewModelTest.kt ├── ui-widgets/ │ ├── .gitignore │ ├── build.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── michaldrabik/ │ │ └── ui_widgets/ │ │ ├── BaseWidgetProvider.kt │ │ ├── calendar/ │ │ │ ├── CalendarWidgetProvider.kt │ │ │ ├── CalendarWidgetService.kt │ │ │ └── CalendarWidgetViewsFactory.kt │ │ ├── calendar_movies/ │ │ │ ├── CalendarMoviesWidgetProvider.kt │ │ │ ├── CalendarMoviesWidgetService.kt │ │ │ └── CalendarMoviesWidgetViewsFactory.kt │ │ ├── progress/ │ │ │ ├── ProgressWidgetEpisodeCheckService.kt │ │ │ ├── ProgressWidgetProvider.kt │ │ │ ├── ProgressWidgetService.kt │ │ │ └── ProgressWidgetViewsFactory.kt │ │ ├── progress_movies/ │ │ │ ├── ProgressMoviesWidgetCheckService.kt │ │ │ ├── ProgressMoviesWidgetProvider.kt │ │ │ ├── ProgressMoviesWidgetService.kt │ │ │ └── ProgressMoviesWidgetViewsFactory.kt │ │ └── search/ │ │ └── SearchWidgetProvider.kt │ └── res/ │ ├── drawable/ │ │ ├── bg_widget.xml │ │ ├── bg_widget_0.xml │ │ ├── bg_widget_25.xml │ │ ├── bg_widget_50.xml │ │ ├── bg_widget_75.xml │ │ ├── bg_widget_check_button.xml │ │ ├── bg_widget_media_view_elevation.xml │ │ ├── bg_widget_search.xml │ │ └── bg_widget_toolbar.xml │ ├── layout/ │ │ ├── layout_widget_calendar.xml │ │ ├── layout_widget_calendar_item.xml │ │ ├── layout_widget_header.xml │ │ ├── layout_widget_movies_calendar.xml │ │ ├── layout_widget_movies_calendar_item.xml │ │ ├── layout_widget_movies_progress.xml │ │ ├── layout_widget_movies_progress_item.xml │ │ ├── layout_widget_progress.xml │ │ ├── layout_widget_progress_item.xml │ │ ├── widget_calendar_day.xml │ │ ├── widget_calendar_item_day.xml │ │ ├── widget_calendar_item_night.xml │ │ ├── widget_calendar_night.xml │ │ ├── widget_header_day.xml │ │ ├── widget_header_night.xml │ │ ├── widget_loading_item.xml │ │ ├── widget_movies_calendar_day.xml │ │ ├── widget_movies_calendar_item_day.xml │ │ ├── widget_movies_calendar_item_night.xml │ │ ├── widget_movies_calendar_night.xml │ │ ├── widget_movies_progress_day.xml │ │ ├── widget_movies_progress_item_day.xml │ │ ├── widget_movies_progress_item_night.xml │ │ ├── widget_movies_progress_night.xml │ │ ├── widget_progress_day.xml │ │ ├── widget_progress_item_day.xml │ │ ├── widget_progress_item_night.xml │ │ ├── widget_progress_night.xml │ │ └── widget_search.xml │ ├── values/ │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-ar/ │ │ └── strings.xml │ ├── values-de/ │ │ └── strings.xml │ ├── values-es/ │ │ └── strings.xml │ ├── values-it/ │ │ └── strings.xml │ ├── values-pl/ │ │ └── strings.xml │ ├── values-vi/ │ │ └── strings.xml │ └── xml/ │ ├── calendar_movies_widgets_provider.xml │ ├── calendar_widgets_provider.xml │ ├── progress_movies_widgets_provider.xml │ ├── progress_widgets_provider.xml │ └── search_widgets_provider.xml └── versions.gradle