├── .gitignore
├── .idea
├── .gitignore
├── .name
├── compiler.xml
├── gradle.xml
├── kotlinc.xml
├── misc.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── java
│ └── com
│ │ └── mrntlu
│ │ └── projectconsumer
│ │ ├── HiltApplication.kt
│ │ ├── MainActivity.kt
│ │ ├── adapters
│ │ ├── AnimeRecommendationsAdapter.kt
│ │ ├── AnimeRelationContentAdapter.kt
│ │ ├── AnimeRelationsAdapter.kt
│ │ ├── BaseGridPaginationAdapter.kt
│ │ ├── CalendarAdapter.kt
│ │ ├── ConsumeLaterAdapter.kt
│ │ ├── ConsumeLaterPreviewAdapter.kt
│ │ ├── ContentAdapter.kt
│ │ ├── DetailsAdapter.kt
│ │ ├── DiaryAdapter.kt
│ │ ├── DiffUtilCallback.kt
│ │ ├── DiscoverAdapter.kt
│ │ ├── FilterAdapter.kt
│ │ ├── FriendsAdapter.kt
│ │ ├── GamePlatformAdapter.kt
│ │ ├── GameRelationsAdapter.kt
│ │ ├── GenreAdapter.kt
│ │ ├── LegendContentAdapter.kt
│ │ ├── LikeUserStackAdapter.kt
│ │ ├── NameUrlAdapter.kt
│ │ ├── PremiumAdapter.kt
│ │ ├── PreviewAdapter.kt
│ │ ├── ProfileImageAdapter.kt
│ │ ├── RecommendationsAdapter.kt
│ │ ├── RequestsAdapter.kt
│ │ ├── ReviewAdapter.kt
│ │ ├── ReviewPreviewAdapter.kt
│ │ ├── ReviewWithContentAdapter.kt
│ │ ├── SeasonAdapter.kt
│ │ ├── StreamingAdapter.kt
│ │ ├── SuggestionsAdapter.kt
│ │ ├── UserListAdapter.kt
│ │ ├── decorations
│ │ │ ├── BulletItemDecoration.kt
│ │ │ ├── LinearHorizontalSpacingDecoration.kt
│ │ │ └── OverlapDecoration.kt
│ │ └── viewholders
│ │ │ ├── EmptyHorizontalViewHolder.kt
│ │ │ ├── EmptyViewHolder.kt
│ │ │ ├── ErrorViewHolder.kt
│ │ │ ├── LoadingViewHolder.kt
│ │ │ ├── PaginationExhaustViewHolder.kt
│ │ │ ├── PaginationLoadingViewHolder.kt
│ │ │ └── PreviewErrorViewHolder.kt
│ │ ├── di
│ │ ├── HiltModule.kt
│ │ └── SingletonModule.kt
│ │ ├── interfaces
│ │ ├── AISuggestionsInteraction.kt
│ │ ├── BaseViewHolderInterfaces.kt
│ │ ├── ConnectivityObserver.kt
│ │ ├── ConsumeLaterInteraction.kt
│ │ ├── ContentModel.kt
│ │ ├── DetailsModel.kt
│ │ ├── DiffUtilComparison.kt
│ │ ├── DiscoverOnBottomSheet.kt
│ │ ├── EntityMapper.kt
│ │ ├── FriendRequestInteraction.kt
│ │ ├── Interaction.kt
│ │ ├── OnBottomSheetClosed.kt
│ │ ├── ReviewInteraction.kt
│ │ ├── UserListContentModel.kt
│ │ ├── UserListInteraction.kt
│ │ └── UserListModel.kt
│ │ ├── models
│ │ ├── auth
│ │ │ ├── BasicUserInfo.kt
│ │ │ ├── FriendRequest.kt
│ │ │ ├── UserInfo.kt
│ │ │ ├── UserInfoCommon.kt
│ │ │ └── retrofit
│ │ │ │ ├── AnswerFriendRequestBody.kt
│ │ │ │ ├── ForgotPasswordBody.kt
│ │ │ │ ├── GoogleLoginBody.kt
│ │ │ │ ├── LoginBody.kt
│ │ │ │ ├── LoginResponse.kt
│ │ │ │ ├── RegisterBody.kt
│ │ │ │ ├── UpdateFCMTokenBody.kt
│ │ │ │ ├── UpdateMembershipBody.kt
│ │ │ │ ├── UpdateNotification.kt
│ │ │ │ ├── UpdatePassword.kt
│ │ │ │ ├── UpdateUserImageBody.kt
│ │ │ │ └── UpdateUsernameBody.kt
│ │ ├── common
│ │ │ ├── AISuggestion.kt
│ │ │ ├── AISuggestionResponse.kt
│ │ │ ├── Actor.kt
│ │ │ ├── BackendRequestMapper.kt
│ │ │ ├── CalendarUI.kt
│ │ │ ├── DetailsUI.kt
│ │ │ ├── GamePlatformUI.kt
│ │ │ ├── GenreUI.kt
│ │ │ ├── LogsUI.kt
│ │ │ ├── ProductionAndCompany.kt
│ │ │ ├── Recommendation.kt
│ │ │ ├── ReviewSummary.kt
│ │ │ ├── Streaming.kt
│ │ │ ├── StreamingPlatform.kt
│ │ │ ├── Trailer.kt
│ │ │ ├── Translation.kt
│ │ │ ├── entity
│ │ │ │ ├── Converters.kt
│ │ │ │ └── TranslationEntity.kt
│ │ │ └── retrofit
│ │ │ │ ├── DataNullableResponse.kt
│ │ │ │ ├── DataPaginationResponse.kt
│ │ │ │ ├── DataResponse.kt
│ │ │ │ ├── DataSearchPaginationResponse.kt
│ │ │ │ ├── DayOfWeekResponse.kt
│ │ │ │ ├── ErrorResponse.kt
│ │ │ │ ├── IDBody.kt
│ │ │ │ ├── MessageResponse.kt
│ │ │ │ ├── PaginationResponse.kt
│ │ │ │ └── PreviewResponse.kt
│ │ └── main
│ │ │ ├── anime
│ │ │ ├── Anime.kt
│ │ │ ├── AnimeAirDate.kt
│ │ │ ├── AnimeCharacter.kt
│ │ │ ├── AnimeDetails.kt
│ │ │ ├── AnimeGenre.kt
│ │ │ ├── AnimeNameURL.kt
│ │ │ ├── AnimeRecommendation.kt
│ │ │ ├── AnimeRelation.kt
│ │ │ ├── entity
│ │ │ │ ├── AnimeEntity.kt
│ │ │ │ └── AnimeTypeConverters.kt
│ │ │ └── mapper
│ │ │ │ └── AnimeEntityMapper.kt
│ │ │ ├── game
│ │ │ ├── Game.kt
│ │ │ ├── GameDetails.kt
│ │ │ ├── GameDetailsRelation.kt
│ │ │ ├── GameMetacriticScorePlatform.kt
│ │ │ ├── GameRelation.kt
│ │ │ ├── GameStore.kt
│ │ │ ├── entity
│ │ │ │ ├── GameEntity.kt
│ │ │ │ └── GameTypeConverters.kt
│ │ │ └── mapper
│ │ │ │ └── GameEntityMapper.kt
│ │ │ ├── movie
│ │ │ ├── Movie.kt
│ │ │ ├── MovieDetails.kt
│ │ │ ├── entity
│ │ │ │ ├── MovieEntity.kt
│ │ │ │ └── MovieTypeConverters.kt
│ │ │ └── mapper
│ │ │ │ └── MovieEntityMapper.kt
│ │ │ ├── review
│ │ │ ├── Author.kt
│ │ │ ├── Review.kt
│ │ │ ├── ReviewDetails.kt
│ │ │ ├── ReviewWithContent.kt
│ │ │ └── retrofit
│ │ │ │ ├── ReviewBody.kt
│ │ │ │ └── UpdateReviewBody.kt
│ │ │ ├── tv
│ │ │ ├── Network.kt
│ │ │ ├── Season.kt
│ │ │ ├── TVSeries.kt
│ │ │ ├── TVSeriesDetails.kt
│ │ │ ├── entity
│ │ │ │ ├── NetworkEntity.kt
│ │ │ │ ├── TVSeriesEntity.kt
│ │ │ │ └── TVSeriesTypeConverters.kt
│ │ │ └── mapper
│ │ │ │ └── TVSeriesEntityMapper.kt
│ │ │ ├── userInteraction
│ │ │ ├── ConsumeLater.kt
│ │ │ ├── ConsumeLaterResponse.kt
│ │ │ ├── entity
│ │ │ │ ├── ConsumeLaterEntity.kt
│ │ │ │ └── ConsumeLaterTypeConverters.kt
│ │ │ ├── mapper
│ │ │ │ └── UserInteractionEntityMapper.kt
│ │ │ └── retrofit
│ │ │ │ ├── ConsumeLaterBody.kt
│ │ │ │ └── MarkConsumeLaterBody.kt
│ │ │ └── userList
│ │ │ ├── AnimeList.kt
│ │ │ ├── AnimeWatchList.kt
│ │ │ ├── GameList.kt
│ │ │ ├── GamePlayList.kt
│ │ │ ├── Log.kt
│ │ │ ├── LogsByDate.kt
│ │ │ ├── MovieList.kt
│ │ │ ├── MovieWatchList.kt
│ │ │ ├── TVSeriesList.kt
│ │ │ ├── TVSeriesWatchList.kt
│ │ │ ├── UserList.kt
│ │ │ └── retrofit
│ │ │ ├── AnimeWatchListBody.kt
│ │ │ ├── DeleteUserListBody.kt
│ │ │ ├── GamePlayListBody.kt
│ │ │ ├── IncrementTVSeriesListBody.kt
│ │ │ ├── MovieWatchListBody.kt
│ │ │ ├── TVWatchListBody.kt
│ │ │ ├── UpdateAnimeWatchListBody.kt
│ │ │ ├── UpdateGamePlayListBody.kt
│ │ │ ├── UpdateMovieWatchListBody.kt
│ │ │ └── UpdateTVWatchListBody.kt
│ │ ├── repository
│ │ ├── AISuggestionsRepository.kt
│ │ ├── AnimePreviewRepository.kt
│ │ ├── AnimeRepository.kt
│ │ ├── AuthRepository.kt
│ │ ├── GamePreviewRepository.kt
│ │ ├── GameRepository.kt
│ │ ├── MoviePreviewRepository.kt
│ │ ├── MovieRepository.kt
│ │ ├── PreviewRepository.kt
│ │ ├── ReviewRepository.kt
│ │ ├── TVPreviewRepository.kt
│ │ ├── TVRepository.kt
│ │ ├── UserInteractionRepository.kt
│ │ ├── UserListRepository.kt
│ │ └── UserRepository.kt
│ │ ├── service
│ │ ├── AuthAuthenticator.kt
│ │ ├── AuthInterceptor.kt
│ │ ├── TokenManager.kt
│ │ ├── notification
│ │ │ └── FirebaseMessagingService.kt
│ │ ├── retrofit
│ │ │ ├── AISuggestionApiService.kt
│ │ │ ├── AnimeApiService.kt
│ │ │ ├── AuthApiService.kt
│ │ │ ├── GameApiService.kt
│ │ │ ├── MovieApiService.kt
│ │ │ ├── PreviewApiService.kt
│ │ │ ├── ReviewApiService.kt
│ │ │ ├── TVSeriesApiService.kt
│ │ │ ├── UserApiService.kt
│ │ │ ├── UserInteractionApiService.kt
│ │ │ └── UserListApiService.kt
│ │ └── room
│ │ │ ├── AnimeDao.kt
│ │ │ ├── CacheDatabase.kt
│ │ │ ├── GameDao.kt
│ │ │ ├── MovieDao.kt
│ │ │ ├── TVSeriesDao.kt
│ │ │ └── UserInteractionDao.kt
│ │ ├── ui
│ │ ├── BaseDayOfWeekFragment.kt
│ │ ├── BaseDetailsFragment.kt
│ │ ├── BaseFragment.kt
│ │ ├── BaseListFragment.kt
│ │ ├── BaseProfileFragment.kt
│ │ ├── anime
│ │ │ ├── AnimeDetailsFragment.kt
│ │ │ └── AnimeListFragment.kt
│ │ ├── auth
│ │ │ ├── AuthFragment.kt
│ │ │ ├── ForgotPasswordBottomSheet.kt
│ │ │ └── RegisterFragment.kt
│ │ ├── common
│ │ │ ├── AnimeDayOfWeekFragment.kt
│ │ │ ├── BoardingBottomSheet.kt
│ │ │ ├── ChangeLayoutBottomSheet.kt
│ │ │ ├── ChangeTabLayoutBottomSheet.kt
│ │ │ ├── ConsumeLaterFragment.kt
│ │ │ ├── HomeFragment.kt
│ │ │ ├── ImageFragment.kt
│ │ │ ├── PolicyFragment.kt
│ │ │ ├── PremiumBottomSheet.kt
│ │ │ ├── SearchFragment.kt
│ │ │ ├── SettingsFragment.kt
│ │ │ ├── TVSeriesDayOfWeekFragment.kt
│ │ │ └── TrailerFragment.kt
│ │ ├── compose
│ │ │ ├── LoadingShimmer.kt
│ │ │ ├── PaginationLoadingShimmer.kt
│ │ │ └── ShimmerBrush.kt
│ │ ├── dialog
│ │ │ ├── LoadingDialog.kt
│ │ │ └── SuccessDialog.kt
│ │ ├── discover
│ │ │ ├── AISuggestionsFragment.kt
│ │ │ ├── DiscoverBottomSheet.kt
│ │ │ └── DiscoverListFragment.kt
│ │ ├── game
│ │ │ ├── GameDetailsFragment.kt
│ │ │ └── GameListFragment.kt
│ │ ├── movie
│ │ │ ├── MovieDetailsFragment.kt
│ │ │ └── MovieListFragment.kt
│ │ ├── profile
│ │ │ ├── DiaryFragment.kt
│ │ │ ├── ProfileDisplayFragment.kt
│ │ │ ├── ProfileEditBottomSheet.kt
│ │ │ ├── ProfileFragment.kt
│ │ │ ├── UserListBottomSheet.kt
│ │ │ └── UserListFragment.kt
│ │ ├── review
│ │ │ ├── ReviewCreateFragment.kt
│ │ │ ├── ReviewDetailsFragment.kt
│ │ │ ├── ReviewFragment.kt
│ │ │ └── ReviewListUserFragment.kt
│ │ ├── social
│ │ │ ├── AddFriendBottomSheet.kt
│ │ │ ├── RequestsFragment.kt
│ │ │ └── SocialHubFragment.kt
│ │ └── tv
│ │ │ ├── TVSeriesDetailsFragment.kt
│ │ │ └── TVSeriesListFragment.kt
│ │ ├── utils
│ │ ├── Extensions.kt
│ │ ├── FetchType.kt
│ │ ├── MessageBoxType.kt
│ │ ├── NetworkBoundResource.kt
│ │ ├── NetworkConnectivityObserver.kt
│ │ ├── NetworkListResponse.kt
│ │ ├── NetworkResponse.kt
│ │ ├── NetworkResponseFlow.kt
│ │ ├── Operation.kt
│ │ ├── Orientation.kt
│ │ ├── RecyclerViewEnum.kt
│ │ ├── SafeClickListener.kt
│ │ └── Utils.kt
│ │ └── viewmodels
│ │ ├── auth
│ │ ├── LoginViewModel.kt
│ │ └── RegisterViewModel.kt
│ │ ├── main
│ │ ├── anime
│ │ │ ├── AnimeDetailsViewModel.kt
│ │ │ ├── AnimePreviewViewModel.kt
│ │ │ └── AnimeViewModel.kt
│ │ ├── common
│ │ │ ├── AISuggestionsConsumeLaterViewModel.kt
│ │ │ ├── AISuggestionsViewModel.kt
│ │ │ ├── DayOfWeekViewModel.kt
│ │ │ ├── DetailsConsumeLaterViewModel.kt
│ │ │ ├── PreviewViewModel.kt
│ │ │ └── SettingsViewModel.kt
│ │ ├── discover
│ │ │ ├── DiscoverListViewModel.kt
│ │ │ └── SearchViewModel.kt
│ │ ├── game
│ │ │ ├── GameDetailsViewModel.kt
│ │ │ ├── GamePreviewViewModel.kt
│ │ │ └── GameViewModel.kt
│ │ ├── movie
│ │ │ ├── MovieDetailsViewModel.kt
│ │ │ ├── MoviePreviewViewModel.kt
│ │ │ └── MovieViewModel.kt
│ │ ├── profile
│ │ │ ├── ConsumeLaterViewModel.kt
│ │ │ ├── DiaryViewModel.kt
│ │ │ ├── ProfileDisplayViewModel.kt
│ │ │ ├── ProfileViewModel.kt
│ │ │ ├── UserListBottomSheetViewModel.kt
│ │ │ └── UserListViewModel.kt
│ │ ├── review
│ │ │ ├── ReviewCreateViewModel.kt
│ │ │ ├── ReviewDetailsViewModel.kt
│ │ │ ├── ReviewListUserViewModel.kt
│ │ │ └── ReviewViewModel.kt
│ │ ├── social
│ │ │ ├── RequestsViewModel.kt
│ │ │ └── SocialHubViewModel.kt
│ │ └── tv
│ │ │ ├── TVDetailsViewModel.kt
│ │ │ ├── TVPreviewViewModel.kt
│ │ │ └── TVSeriesViewModel.kt
│ │ └── shared
│ │ ├── ActivitySharedViewModel.kt
│ │ ├── HomeDiscoverSharedViewModel.kt
│ │ └── UserSharedViewModel.kt
│ └── res
│ ├── anim
│ ├── slide_in_left.xml
│ ├── slide_in_right.xml
│ ├── slide_out_left.xml
│ └── slide_out_right.xml
│ ├── color
│ └── tab_text_selector.xml
│ ├── drawable
│ ├── bottom_nav_background.xml
│ ├── bottom_nav_selector.xml
│ ├── bottom_nav_text_selector.xml
│ ├── custom_popup_background.xml
│ ├── highlight_bg.xml
│ ├── home_24.xml
│ ├── home_filled_24.xml
│ ├── ic_add.xml
│ ├── ic_ai.xml
│ ├── ic_anime.xml
│ ├── ic_arrow.xml
│ ├── ic_arrow_back_24.xml
│ ├── ic_arrow_right_24.xml
│ ├── ic_arrow_settings.xml
│ ├── ic_bookmark.xml
│ ├── ic_bookmark_filled.xml
│ ├── ic_cancel.xml
│ ├── ic_circle_12.xml
│ ├── ic_company_75.xml
│ ├── ic_content_type_24.xml
│ ├── ic_country.xml
│ ├── ic_day_24.xml
│ ├── ic_delete.xml
│ ├── ic_diary.xml
│ ├── ic_edit.xml
│ ├── ic_explore.xml
│ ├── ic_explore_outlined.xml
│ ├── ic_feedback.xml
│ ├── ic_filter_48.xml
│ ├── ic_finish_24.xml
│ ├── ic_friend_request.xml
│ ├── ic_game_24.xml
│ ├── ic_google.xml
│ ├── ic_grid.xml
│ ├── ic_heart.xml
│ ├── ic_home.xml
│ ├── ic_home_outline.xml
│ ├── ic_info_24.xml
│ ├── ic_language.xml
│ ├── ic_launcher_dark.xml
│ ├── ic_launcher_foreground.xml
│ ├── ic_launcher_light.xml
│ ├── ic_launcher_logo.xml
│ ├── ic_like.xml
│ ├── ic_like_outline.xml
│ ├── ic_list.xml
│ ├── ic_log.xml
│ ├── ic_login_24.xml
│ ├── ic_logout_24.xml
│ ├── ic_mail.xml
│ ├── ic_more.xml
│ ├── ic_night_24.xml
│ ├── ic_no_internet_24.xml
│ ├── ic_notification_off.xml
│ ├── ic_notification_off_24.xml
│ ├── ic_notification_on_24.xml
│ ├── ic_people.xml
│ ├── ic_person_64.xml
│ ├── ic_person_75.xml
│ ├── ic_person_bottom.xml
│ ├── ic_person_outlined.xml
│ ├── ic_play.xml
│ ├── ic_rate.xml
│ ├── ic_refresh.xml
│ ├── ic_remove.xml
│ ├── ic_remove_heart.xml
│ ├── ic_restore.xml
│ ├── ic_round_check.xml
│ ├── ic_search.xml
│ ├── ic_settings_64.xml
│ ├── ic_settings_outlined.xml
│ ├── ic_share.xml
│ ├── ic_sort_48.xml
│ ├── ic_star_36.xml
│ ├── ic_star_48.xml
│ ├── ic_storage.xml
│ ├── ic_tab_24.xml
│ ├── ic_thumb.xml
│ ├── ic_time_24.xml
│ ├── ic_trash.xml
│ ├── ic_tv.xml
│ ├── ic_x.xml
│ ├── linux.xml
│ ├── nintendo.xml
│ ├── nintendo_switch.xml
│ ├── notification_switch_thumb.xml
│ ├── notification_switch_track.xml
│ ├── ps4.xml
│ ├── ps5.xml
│ ├── selector_discover.xml
│ ├── selector_home.xml
│ ├── selector_person.xml
│ ├── selector_settings.xml
│ ├── steam.xml
│ ├── switch_thumb_notification_off.xml
│ ├── switch_thumb_notification_on.xml
│ ├── tab_background.xml
│ ├── tab_background_selector.xml
│ ├── tab_selected_background.xml
│ ├── theme_switch_thumb.xml
│ ├── theme_switch_track.xml
│ ├── top_rounded_corners.xml
│ └── xbox.xml
│ ├── layout
│ ├── activity_main.xml
│ ├── cell_anime_relation.xml
│ ├── cell_anime_relation_content.xml
│ ├── cell_calendar.xml
│ ├── cell_carousel.xml
│ ├── cell_carousel_error.xml
│ ├── cell_carousel_shimmer.xml
│ ├── cell_consume_later.xml
│ ├── cell_consume_later_empty.xml
│ ├── cell_consume_later_loading.xml
│ ├── cell_consume_later_preview.xml
│ ├── cell_content_alt.xml
│ ├── cell_content_alt_loading.xml
│ ├── cell_details.xml
│ ├── cell_diary.xml
│ ├── cell_diary_header.xml
│ ├── cell_empty.xml
│ ├── cell_empty_horizontal.xml
│ ├── cell_error.xml
│ ├── cell_filter.xml
│ ├── cell_friend.xml
│ ├── cell_friend_loading.xml
│ ├── cell_friend_request.xml
│ ├── cell_friend_request_loading.xml
│ ├── cell_genre.xml
│ ├── cell_grid.xml
│ ├── cell_legend_content.xml
│ ├── cell_loading.xml
│ ├── cell_name_url.xml
│ ├── cell_pagination_exhaust.xml
│ ├── cell_pagination_loading.xml
│ ├── cell_premium.xml
│ ├── cell_preview_error.xml
│ ├── cell_preview_item.xml
│ ├── cell_profile_image.xml
│ ├── cell_review.xml
│ ├── cell_review_content.xml
│ ├── cell_review_content_loading.xml
│ ├── cell_review_content_preview.xml
│ ├── cell_review_loading.xml
│ ├── cell_season.xml
│ ├── cell_status_tab_layout.xml
│ ├── cell_streaming.xml
│ ├── cell_streaming_empty.xml
│ ├── cell_suggestion.xml
│ ├── cell_suggestion_error.xml
│ ├── cell_suggestion_loading.xml
│ ├── cell_user_list.xml
│ ├── cell_user_list_loading.xml
│ ├── cell_user_stack.xml
│ ├── fragment_ai_suggestions.xml
│ ├── fragment_anime_details.xml
│ ├── fragment_auth.xml
│ ├── fragment_diary.xml
│ ├── fragment_game_details.xml
│ ├── fragment_home.xml
│ ├── fragment_image.xml
│ ├── fragment_list.xml
│ ├── fragment_movie_details.xml
│ ├── fragment_policy.xml
│ ├── fragment_preview.xml
│ ├── fragment_profile.xml
│ ├── fragment_profile_display.xml
│ ├── fragment_register.xml
│ ├── fragment_review.xml
│ ├── fragment_review_create.xml
│ ├── fragment_review_details.xml
│ ├── fragment_search.xml
│ ├── fragment_settings.xml
│ ├── fragment_social_hub.xml
│ ├── fragment_trailer.xml
│ ├── fragment_tv_details.xml
│ ├── fragment_user_list.xml
│ ├── layout_boarding.xml
│ ├── layout_change_layout.xml
│ ├── layout_change_tab_layout.xml
│ ├── layout_discover_bottom_sheet.xml
│ ├── layout_edit_profile_bottom_sheet.xml
│ ├── layout_forgot_password.xml
│ ├── layout_loading_dialog.xml
│ ├── layout_premium.xml
│ ├── layout_response_status_bottom_sheet.xml
│ ├── layout_review_summary.xml
│ ├── layout_score_dialog.xml
│ ├── layout_shimmer_anime_details.xml
│ ├── layout_shimmer_game_details.xml
│ ├── layout_shimmer_movie_details.xml
│ ├── layout_shimmer_profile.xml
│ ├── layout_shimmer_profile_display.xml
│ ├── layout_shimmer_review_details.xml
│ ├── layout_shimmer_review_summary.xml
│ ├── layout_success_dialog.xml
│ ├── layout_tab.xml
│ ├── layout_tab_title.xml
│ ├── layout_user_interaction.xml
│ ├── layout_user_list_bottom_sheet.xml
│ ├── layout_user_list_edit_bottom_sheet.xml
│ ├── layout_user_list_view_bottom_sheet.xml
│ ├── settings_click_tile.xml
│ └── settings_info_tile.xml
│ ├── menu
│ ├── ai_suggestions_menu.xml
│ ├── bottom_nav_auth_menu.xml
│ ├── bottom_nav_menu.xml
│ ├── consume_later_item_menu.xml
│ ├── details_share_menu.xml
│ ├── filter_consume_later_menu.xml
│ ├── profile_display_menu.xml
│ ├── profile_menu.xml
│ ├── search_toolbar_menu.xml
│ ├── social_hub_menu.xml
│ ├── sort_dual_menu.xml
│ ├── sort_extra_menu.xml
│ ├── sort_menu.xml
│ ├── sort_toolbar_menu.xml
│ ├── user_list_item_menu.xml
│ └── user_list_menu.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.webp
│ ├── ic_launcher_foreground.webp
│ └── ic_launcher_round.webp
│ ├── mipmap-mdpi
│ ├── ic_launcher.webp
│ ├── ic_launcher_foreground.webp
│ └── ic_launcher_round.webp
│ ├── mipmap-xhdpi
│ ├── ic_launcher.webp
│ ├── ic_launcher_foreground.webp
│ └── ic_launcher_round.webp
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.webp
│ ├── ic_launcher_foreground.webp
│ └── ic_launcher_round.webp
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.webp
│ ├── ic_launcher_foreground.webp
│ └── ic_launcher_round.webp
│ ├── navigation
│ └── mobile_navigation.xml
│ ├── raw
│ ├── ai_error.json
│ ├── ai_loading.json
│ ├── bookmark.json
│ ├── bookmark_night.json
│ ├── discover.json
│ ├── empty.json
│ ├── empty_horizontal.json
│ ├── error.json
│ ├── error_small.json
│ ├── like.json
│ ├── like_night.json
│ ├── loading.json
│ ├── no_social.json
│ ├── notification_empty.json
│ ├── premium.json
│ └── success.json
│ ├── values-night
│ ├── splash.xml
│ └── themes.xml
│ ├── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── ic_launcher_background.xml
│ ├── splash.xml
│ ├── strings.xml
│ └── themes.xml
│ └── xml
│ ├── backup_rules.xml
│ └── data_extraction_rules.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | /.idea/codeStyles
11 |
12 | .DS_Store
13 | /build
14 | /captures
15 | .externalNativeBuild
16 | .cxx
17 | local.properties
18 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | Project Consumer
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
19 |
20 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | # API Key
2 | /src/main/java/com/mrntlu/projectconsumer/utils/Constants.kt
3 |
4 | # Gradle files
5 | .gradle/
6 | build/
7 |
8 | # Local configuration file (sdk path, etc)
9 | local.properties
10 |
11 | # Log/OS Files
12 | *.log
13 |
14 | # Android Studio generated files and folders
15 | captures/
16 | .externalNativeBuild/
17 | .cxx/
18 | *.apk
19 | output.json
20 |
21 | # IntelliJ
22 | *.iml
23 | .idea/
24 | misc.xml
25 | deploymentTargetDropDown.xml
26 | render.experimental.xml
27 |
28 | # Keystore files
29 | *.jks
30 | *.keystore
31 |
32 | # Android Profiling
33 | *.hprof\
34 |
35 | google-services.json
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/DiffUtilCallback.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters
2 |
3 | import androidx.recyclerview.widget.DiffUtil
4 | import com.mrntlu.projectconsumer.interfaces.DiffUtilComparison
5 |
6 | class DiffUtilCallback>(
7 | private val oldList: List,
8 | private val newList: List,
9 | ): DiffUtil.Callback() {
10 | override fun getOldListSize() = oldList.size
11 |
12 | override fun getNewListSize() = newList.size
13 |
14 | override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
15 | return oldList[oldItemPosition].areItemsTheSame(newList[newItemPosition])
16 | }
17 |
18 | override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
19 | return oldList[oldItemPosition].areContentsTheSame(newList[newItemPosition])
20 | }
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/GenreAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.recyclerview.widget.RecyclerView
6 | import com.mrntlu.projectconsumer.databinding.CellGenreBinding
7 | import com.mrntlu.projectconsumer.utils.setSafeOnClickListener
8 |
9 | class GenreAdapter(
10 | private val genreList: List,
11 | private val onClick: (Int) -> Unit,
12 | ): RecyclerView.Adapter() {
13 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
14 | return ItemHolder(CellGenreBinding.inflate(LayoutInflater.from(parent.context), parent, false))
15 | }
16 |
17 | override fun getItemCount() = genreList.size
18 |
19 | override fun onBindViewHolder(holder: ItemHolder, position: Int) {
20 | val genre = genreList[position]
21 |
22 | holder.binding.genreTV.text = genre
23 |
24 | holder.binding.root.setSafeOnClickListener {
25 | onClick(position)
26 | }
27 | }
28 |
29 | inner class ItemHolder(
30 | val binding: CellGenreBinding
31 | ): RecyclerView.ViewHolder(binding.root)
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/decorations/LinearHorizontalSpacingDecoration.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.decorations
2 |
3 | import android.graphics.Rect
4 | import android.view.View
5 | import androidx.annotation.Px
6 | import androidx.recyclerview.widget.RecyclerView
7 |
8 | class LinearHorizontalSpacingDecoration(@Px private val innerSpacing: Int) :
9 | RecyclerView.ItemDecoration() {
10 |
11 | override fun getItemOffsets(
12 | outRect: Rect,
13 | view: View,
14 | parent: RecyclerView,
15 | state: RecyclerView.State
16 | ) {
17 | super.getItemOffsets(outRect, view, parent, state)
18 |
19 | val itemPosition = parent.getChildAdapterPosition(view)
20 |
21 | outRect.left = if (itemPosition == 0) 0 else innerSpacing / 2
22 | outRect.right = if (itemPosition == state.itemCount - 1) 0 else innerSpacing / 2
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/decorations/OverlapDecoration.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.decorations
2 |
3 | import android.graphics.Rect
4 | import android.view.View
5 | import androidx.recyclerview.widget.RecyclerView
6 | import androidx.recyclerview.widget.RecyclerView.ItemDecoration
7 |
8 | class OverlapDecoration : ItemDecoration() {
9 |
10 | override fun getItemOffsets(
11 | outRect: Rect,
12 | view: View,
13 | parent: RecyclerView,
14 | state: RecyclerView.State
15 | ) {
16 | super.getItemOffsets(outRect, view, parent, state)
17 | val itemPosition = parent.getChildAdapterPosition(view)
18 | if (itemPosition == 0) {
19 | outRect.set(0, 0, 0, 0)
20 | } else {
21 | outRect.set(overlap, 0, 0, 0)
22 | }
23 | }
24 |
25 | companion object {
26 | private const val overlap = -32
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/EmptyHorizontalViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.mrntlu.projectconsumer.databinding.CellEmptyHorizontalBinding
5 | import com.mrntlu.projectconsumer.utils.dpToPx
6 |
7 | class EmptyHorizontalViewHolder(
8 | private val binding: CellEmptyHorizontalBinding
9 | ): RecyclerView.ViewHolder(binding.root) {
10 | fun setHeight(heightInDp: Float) {
11 | val height = binding.root.context.dpToPx(heightInDp)
12 |
13 | val layoutParams = binding.root.layoutParams
14 | layoutParams.height = height
15 | binding.root.layoutParams = layoutParams
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/EmptyViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.mrntlu.projectconsumer.databinding.CellEmptyBinding
5 |
6 | class EmptyViewHolder(
7 | private val binding: CellEmptyBinding
8 | ): RecyclerView.ViewHolder(binding.root) {
9 | fun changeLottieAnimation(newAnimation: Int) {
10 | binding.emptyLottieAnimation.setAnimation(newAnimation)
11 | }
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/ErrorViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.mrntlu.projectconsumer.databinding.CellErrorBinding
5 | import com.mrntlu.projectconsumer.interfaces.ErrorViewHolderBind
6 | import com.mrntlu.projectconsumer.interfaces.Interaction
7 | import com.mrntlu.projectconsumer.utils.setVisibilityByCondition
8 |
9 | class ErrorViewHolder(
10 | private val binding: CellErrorBinding,
11 | ): RecyclerView.ViewHolder(binding.root), ErrorViewHolderBind {
12 | override fun bind(errorMessage: String?, interaction: Interaction, shouldHideCancelButton: Boolean) {
13 | binding.errorText.text = errorMessage
14 |
15 | binding.refreshButton.setOnClickListener { interaction.onErrorRefreshPressed() }
16 | binding.cancelButton.setOnClickListener { interaction.onCancelPressed() }
17 | binding.cancelButton.setVisibilityByCondition(shouldHideCancelButton)
18 | }
19 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/PaginationExhaustViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.mrntlu.projectconsumer.databinding.CellPaginationExhaustBinding
5 | import com.mrntlu.projectconsumer.interfaces.Interaction
6 | import com.mrntlu.projectconsumer.interfaces.PaginationExhaustViewHolderBind
7 | import com.mrntlu.projectconsumer.models.main.movie.Movie
8 |
9 | class PaginationExhaustViewHolder(
10 | private val binding: CellPaginationExhaustBinding
11 | ): RecyclerView.ViewHolder(binding.root), PaginationExhaustViewHolderBind {
12 | override fun bind(interaction: Interaction) {
13 | binding.backToTopButton.setOnClickListener { interaction.onExhaustButtonPressed() }
14 | }
15 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/PaginationLoadingViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.compose.ui.platform.ViewCompositionStrategy
4 | import androidx.recyclerview.widget.RecyclerView
5 | import com.mrntlu.projectconsumer.databinding.CellPaginationLoadingBinding
6 | import com.mrntlu.projectconsumer.interfaces.PaginationLoadingViewHolderBind
7 | import com.mrntlu.projectconsumer.ui.compose.PaginationLoadingShimmer
8 | import com.mrntlu.projectconsumer.utils.Constants
9 |
10 | class PaginationLoadingViewHolder(private val binding: CellPaginationLoadingBinding): RecyclerView.ViewHolder(binding.root), PaginationLoadingViewHolderBind {
11 | override fun bind(gridCount: Int, aspectRatio: Float?, isDarkTheme: Boolean) {
12 | binding.paginationLoadingComposeView.apply {
13 | setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
14 | setContent {
15 | PaginationLoadingShimmer(
16 | gridCount = gridCount,
17 | aspectRatio = aspectRatio ?: Constants.DEFAULT_RATIO,
18 | isDarkTheme = isDarkTheme
19 | )
20 | }
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/adapters/viewholders/PreviewErrorViewHolder.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.adapters.viewholders
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.mrntlu.projectconsumer.databinding.CellPreviewErrorBinding
5 | import com.mrntlu.projectconsumer.interfaces.ErrorViewHolderBind
6 | import com.mrntlu.projectconsumer.interfaces.Interaction
7 |
8 | class PreviewErrorViewHolder(
9 | private val binding: CellPreviewErrorBinding,
10 | ): RecyclerView.ViewHolder(binding.root), ErrorViewHolderBind {
11 | override fun bind(errorMessage: String?, interaction: Interaction, shouldHideCancelButton: Boolean) {
12 | binding.errorText.text = errorMessage
13 |
14 | binding.refreshButton.setOnClickListener { interaction.onErrorRefreshPressed() }
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/AISuggestionsInteraction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.common.AISuggestion
4 |
5 | interface AISuggestionsInteraction: Interaction {
6 | fun onAddToListPressed(item: AISuggestion, position: Int)
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/BaseViewHolderInterfaces.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface ItemViewHolderBind {
4 | fun bind(item: T, position: Int, interaction: Interaction)
5 | }
6 |
7 | interface ErrorViewHolderBind {
8 | fun bind(errorMessage: String?, interaction: Interaction, shouldHideCancelButton: Boolean = false)
9 | }
10 |
11 | interface LoadingViewHolderBind {
12 | fun bind(aspectRatio: Float?, isDarkTheme: Boolean, isPreview: Boolean)
13 | }
14 |
15 | interface PaginationLoadingViewHolderBind {
16 | fun bind(gridCount: Int, aspectRatio: Float?, isDarkTheme: Boolean)
17 | }
18 |
19 | interface PaginationExhaustViewHolderBind {
20 | fun bind(interaction: Interaction)
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/ConnectivityObserver.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import kotlinx.coroutines.flow.Flow
4 |
5 | interface ConnectivityObserver {
6 | fun observe(): Flow
7 |
8 | enum class Status {
9 | Available, Unavailable, Lost
10 | }
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/ConsumeLaterInteraction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.main.userInteraction.ConsumeLaterResponse
4 |
5 | interface ConsumeLaterInteraction: Interaction {
6 | fun onDeletePressed(item: ConsumeLaterResponse, position: Int)
7 | fun onAddToListPressed(item: ConsumeLaterResponse, position: Int)
8 | fun onDiscoverButtonPressed()
9 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/ContentModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.main.anime.AnimeAirDate
4 |
5 | abstract class ContentModel: DiffUtilComparison {
6 | abstract val id: String
7 | abstract val imageURL: String
8 | abstract val title: String
9 | abstract val titleOriginal: String
10 | abstract val description: String
11 | abstract val score: Float
12 | abstract val releaseDate: String?
13 | abstract val episodes: Int?
14 | abstract val totalSeasons: Int?
15 | abstract val length: Int?
16 | abstract val aired: AnimeAirDate?
17 |
18 | override fun areItemsTheSame(newItem: ContentModel): Boolean {
19 | return id == newItem.id
20 | }
21 |
22 | override fun areContentsTheSame(newItem: ContentModel): Boolean {
23 | return when {
24 | id != newItem.id -> false
25 | imageURL != newItem.imageURL -> false
26 | title != newItem.title -> false
27 | titleOriginal != newItem.titleOriginal -> false
28 | else -> true
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/DetailsModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.main.userInteraction.ConsumeLater
4 |
5 | abstract class DetailsModel {
6 | abstract var watchList: WatchList?
7 | abstract var consumeLater: ConsumeLater?
8 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/DiffUtilComparison.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface DiffUtilComparison {
4 | fun areItemsTheSame(newItem: Model): Boolean
5 |
6 | fun areContentsTheSame(newItem: Model): Boolean
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/DiscoverOnBottomSheet.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface DiscoverOnBottomSheet {
4 | fun onApply(
5 | genre: String?,
6 | status: String?,
7 | sort: String,
8 | from: Int?,
9 | to: Int?,
10 | animeTheme: String?,
11 | animeDemographics: String?,
12 | gameTBA: Boolean?,
13 | gamePlatform: String?,
14 | )
15 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/EntityMapper.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface EntityMapper {
4 |
5 | fun asEntity(
6 | model: Model, tag: String, page: Int,
7 | ): Entity
8 |
9 | fun asModel(entity: Entity): Model
10 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/FriendRequestInteraction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.auth.FriendRequest
4 |
5 | interface FriendRequestInteraction: Interaction {
6 | fun onAcceptClicked(item: FriendRequest, position: Int)
7 | fun onIgnoreClicked(item: FriendRequest, position: Int)
8 | fun onDenyClicked(item: FriendRequest, position: Int)
9 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/Interaction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface Interaction {
4 | fun onItemSelected(item: T, position: Int)
5 |
6 | fun onErrorRefreshPressed()
7 | fun onCancelPressed()
8 | fun onExhaustButtonPressed()
9 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/OnBottomSheetClosed.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | interface OnBottomSheetClosed {
4 | fun onSuccess(data: UserListModel?, operation: BottomSheetOperation)
5 | }
6 |
7 | enum class BottomSheetOperation {
8 | INSERT,
9 | UPDATE,
10 | DELETE
11 | }
12 |
13 | enum class BottomSheetState {
14 | VIEW,
15 | EDIT,
16 | SUCCESS,
17 | FAILURE,
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/ReviewInteraction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.main.review.Review
4 | import com.mrntlu.projectconsumer.models.main.review.ReviewWithContent
5 |
6 | interface ReviewInteraction: Interaction {
7 | fun onEditClicked(item: Review, position: Int)
8 | fun onDeleteClicked(item: Review, position: Int)
9 | fun onLikeClicked(item: Review, position: Int)
10 | fun onProfileClicked(item: Review, position: Int)
11 | }
12 |
13 | interface ReviewWithContentInteraction: Interaction {
14 | fun onEditClicked(item: ReviewWithContent, position: Int)
15 | fun onDeleteClicked(item: ReviewWithContent, position: Int)
16 | fun onLikeClicked(item: ReviewWithContent, position: Int)
17 | fun onContentClicked(item: ReviewWithContent, position: Int)
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/interfaces/UserListInteraction.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.interfaces
2 |
3 | import com.mrntlu.projectconsumer.models.main.userList.UserList
4 | import com.mrntlu.projectconsumer.utils.Constants
5 |
6 | interface UserListInteraction: Interaction {
7 | fun onDeletePressed(item: UserList, contentType: Constants.ContentType, position: Int)
8 | fun onUpdatePressed(item: UserList, contentType: Constants.ContentType, position: Int)
9 | fun onDetailsPressed(item: UserList, contentType: Constants.ContentType, position: Int)
10 | fun onEpisodeIncrementPressed(item: UserList, contentType: Constants.ContentType, position: Int)
11 | fun onSeasonIncrementPressed(item: UserList, contentType: Constants.ContentType, position: Int)
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/BasicUserInfo.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class BasicUserInfo(
6 | @SerializedName("fcm_token")
7 | val fcmToken: String,
8 |
9 | @SerializedName("is_oauth")
10 | val isOAuth: Boolean,
11 |
12 | @SerializedName("is_premium")
13 | val isPremium: Boolean,
14 |
15 | @SerializedName("membership_type")
16 | val membershipType: Int,
17 |
18 | @SerializedName("oauth_type")
19 | val oauthType: Int?,
20 |
21 | @SerializedName("can_change_username")
22 | var canChangeUsername: Boolean,
23 |
24 | @SerializedName("app_notification")
25 | val appNotification: Notification,
26 |
27 | val email: String,
28 | val image: String?,
29 | val username: String
30 | )
31 |
32 | data class Notification(
33 | @SerializedName("friend_request")
34 | var friendRequest: Boolean,
35 |
36 | @SerializedName("review_likes")
37 | var reviewLikes: Boolean
38 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/FriendRequest.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.DiffUtilComparison
5 | import com.mrntlu.projectconsumer.models.main.review.Author
6 |
7 | data class FriendRequest(
8 | @SerializedName("_id")
9 | val id: String,
10 |
11 | @SerializedName("is_ignored")
12 | val isIgnored: Boolean,
13 |
14 | @SerializedName("created_at")
15 | val createdAt: String,
16 |
17 | val sender: Author,
18 | val receiver: Author,
19 | ): DiffUtilComparison {
20 | override fun areItemsTheSame(newItem: FriendRequest): Boolean {
21 | return id == newItem.id
22 | }
23 |
24 | override fun areContentsTheSame(newItem: FriendRequest): Boolean {
25 | return when {
26 | id != newItem.id -> false
27 | isIgnored != newItem.isIgnored -> false
28 | sender.id != newItem.sender.id -> false
29 | receiver.id != newItem.receiver.id -> false
30 | else -> true
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/UserInfoCommon.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.ContentModel
5 | import com.mrntlu.projectconsumer.models.main.anime.AnimeAirDate
6 |
7 | data class UserInfoCommon(
8 | @SerializedName("_id")
9 | override val id: String,
10 |
11 | @SerializedName("image_url")
12 | override val imageURL: String,
13 |
14 | @SerializedName("title_en")
15 | override val title: String,
16 |
17 | @SerializedName("title_original")
18 | override val titleOriginal: String,
19 |
20 | @SerializedName("times_finished")
21 | val timesFinished: Int,
22 |
23 | @SerializedName("content_type")
24 | val contentType: String,
25 |
26 | @SerializedName("hours_played")
27 | val hoursPlayed: Long?,
28 |
29 | override val description: String = "",
30 | override val score: Float = 0f,
31 | override val releaseDate: String? = null,
32 | override val episodes: Int? = null,
33 | override val totalSeasons: Int? = null,
34 | override val length: Int? = null,
35 | override val aired: AnimeAirDate? = null,
36 | ): ContentModel()
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/AnswerFriendRequestBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | data class AnswerFriendRequestBody(
4 | val id: String,
5 | val answer: Int,
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/ForgotPasswordBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ForgotPasswordBody(
6 | @SerializedName("email_address")
7 | private val email: String
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/GoogleLoginBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class GoogleLoginBody(
6 | val token: String,
7 |
8 | val image: String,
9 |
10 | @SerializedName("fcm_token")
11 | val fcmToken: String,
12 | )
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/LoginBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class LoginBody(
6 | @SerializedName("email_address")
7 | val email: String,
8 |
9 | @SerializedName("fcm_token")
10 | val fcmToken: String?,
11 |
12 | val password: String
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/LoginResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class LoginResponse(
6 | @SerializedName("access_token")
7 | val token: String,
8 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/RegisterBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class RegisterBody(
6 | @SerializedName("email_address")
7 | val email: String,
8 |
9 | @SerializedName("fcm_token")
10 | val fcmToken: String,
11 |
12 | val username: String,
13 | val password: String,
14 | val image: String,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdateFCMTokenBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateFCMTokenBody(
6 | @SerializedName("fcm_token")
7 | val fcmToken: String,
8 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdateMembershipBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateMembershipBody(
6 | @SerializedName("is_premium")
7 | val isPremium: Boolean,
8 |
9 | @SerializedName("membership_type")
10 | val membershipType: Int
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdateNotification.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateNotification(
6 | @SerializedName("friend_request")
7 | val friendRequest: Boolean,
8 |
9 | @SerializedName("review_likes")
10 | val reviewLikes: Boolean,
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdatePassword.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdatePassword(
6 | @SerializedName("old_password")
7 | val oldPassword: String,
8 |
9 | @SerializedName("new_password")
10 | val newPassword: String,
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdateUserImageBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | data class UpdateUserImageBody(
4 | val image: String,
5 | )
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/auth/retrofit/UpdateUsernameBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.auth.retrofit
2 |
3 | data class UpdateUsernameBody(
4 | val username: String
5 | )
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/AISuggestionResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class AISuggestionResponse(
6 | val suggestions: List,
7 |
8 | @SerializedName("created_at")
9 | val createdAt: String,
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/Actor.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class Actor(
9 | @SerializedName("tmdb_id")
10 | val tmdbID: String,
11 |
12 | val name: String,
13 | val image: String?,
14 | val character: String,
15 | ) : Parcelable {
16 | constructor(): this("", "", "", "")
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/BackendRequestMapper.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | data class BackendRequestMapper(
4 | val name: String,
5 | val request: String,
6 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/CalendarUI.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import java.time.LocalDate
4 |
5 | data class CalendarUI(
6 | val date: LocalDate,
7 | val count: Int,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/DetailsUI.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | data class DetailsUI(
4 | val title: String,
5 | val image: String,
6 | val subTitle: String,
7 | )
8 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/GamePlatformUI.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | data class GamePlatformUI(
4 | val requestMapper: BackendRequestMapper,
5 | val image: Int,
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/GenreUI.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | data class GenreUI(
4 | val genre: String,
5 | val image: String
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/LogsUI.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import com.mrntlu.projectconsumer.models.main.userList.Log
4 |
5 | data class LogsUI(
6 | val log: Log,
7 | val isHeader: Boolean,
8 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/ProductionAndCompany.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class ProductionAndCompany(
9 | val logo: String?,
10 | val name: String,
11 | @SerializedName("origin_country")
12 | val originCountry: String
13 | ) : Parcelable {
14 | constructor(): this("", "", "")
15 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/Recommendation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class Recommendation(
9 | val description: String,
10 |
11 | @SerializedName("tmdb_id")
12 | val tmdbID: String,
13 |
14 | @SerializedName("title_en")
15 | val title: String,
16 |
17 | @SerializedName("title_original")
18 | val titleOriginal: String,
19 |
20 | @SerializedName("release_date")
21 | val releaseDate: String,
22 |
23 | @SerializedName("image_url")
24 | val imageURL: String,
25 | ) : Parcelable
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/ReviewSummary.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import com.mrntlu.projectconsumer.models.main.review.Review
6 | import kotlinx.parcelize.Parcelize
7 |
8 | @Parcelize
9 | data class ReviewSummary(
10 | val review: Review?,
11 |
12 | @SerializedName("avg_star")
13 | val averageStar: Float,
14 |
15 | @SerializedName("total_votes")
16 | val totalVotes: Int,
17 |
18 | @SerializedName("is_reviewed")
19 | val isReviewed: Boolean,
20 |
21 | @SerializedName("star_counts")
22 | val starCounts: StarCounts,
23 | ): Parcelable {
24 | constructor(): this(null, 0f, 0, false, StarCounts())
25 | }
26 |
27 | @Parcelize
28 | data class StarCounts(
29 | @SerializedName("one_star")
30 | val oneStar: Int,
31 |
32 | @SerializedName("two_star")
33 | val twoStar: Int,
34 |
35 | @SerializedName("three_star")
36 | val threeStar: Int,
37 |
38 | @SerializedName("four_star")
39 | val fourStar: Int,
40 |
41 | @SerializedName("five_star")
42 | val fiveStar: Int,
43 | ): Parcelable {
44 | constructor(): this(0, 0, 0, 0, 0)
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/Streaming.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class Streaming(
6 | @SerializedName("buy_options")
7 | val buyOptions: List?,
8 | @SerializedName("country_code")
9 | val countryCode: String,
10 | @SerializedName("rent_options")
11 | val rentOptions: List?,
12 | @SerializedName("streaming_platforms")
13 | val streamingPlatforms: List?
14 | ) {
15 | constructor(): this(listOf(), "", listOf(), listOf())
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/StreamingPlatform.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class StreamingPlatform(
8 | val logo: String,
9 | val name: String
10 | ) : Parcelable {
11 | constructor(): this("", "")
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/Trailer.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class Trailer(
8 | val name: String,
9 | val key: String,
10 | val type: String,
11 | ): Parcelable {
12 | constructor(): this("", "", "")
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/Translation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class Translation(
9 | @SerializedName("lan_code")
10 | val lanCode: String,
11 | @SerializedName("lan_name")
12 | val lanName: String,
13 | @SerializedName("lan_name_en")
14 | val lanNameEn: String,
15 | val title: String,
16 | val description: String,
17 | ) : Parcelable {
18 | constructor(): this("","","","","")
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/entity/TranslationEntity.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.entity
2 |
3 | import androidx.room.ColumnInfo
4 |
5 | data class TranslationEntity(
6 | @ColumnInfo("lan_code")
7 | val lanCode: String,
8 | @ColumnInfo("lan_name")
9 | val lanName: String,
10 | @ColumnInfo("lan_name_en")
11 | val lanNameEn: String,
12 | val title: String,
13 | val description: String,
14 | ) {
15 | constructor(): this("","","","","")
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/DataNullableResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class DataNullableResponse(
4 | val data: T?
5 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/DataPaginationResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class DataPaginationResponse(
4 | val data: List,
5 | val pagination: PaginationResponse
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/DataResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class DataResponse(
4 | val data: T
5 | )
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/DataSearchPaginationResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class DataSearchPaginationResponse(
4 | val data: List?,
5 | val pagination: PaginationResponse
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/DayOfWeekResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class DayOfWeekResponse(
6 | val data: List,
7 |
8 | @SerializedName("day_of_week")
9 | val dayOfWeek: Int,
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/ErrorResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ErrorResponse(
6 | val code: Int,
7 | val message: String
8 | )
9 |
10 | data class ErrorAltResponse(
11 | @SerializedName("error")
12 | val error: String
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/IDBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class IDBody(
4 | val id: String
5 | )
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/MessageResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class MessageResponse(
4 | val message: String,
5 | )
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/PaginationResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | data class PaginationResponse(
4 | val next: Int,
5 | val page: Int,
6 | val perPage: Int,
7 | val prev: Int,
8 | val total: Int,
9 | val totalPage: Int
10 | ) {
11 | constructor(): this(0,0,0,0,0,0)
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/common/retrofit/PreviewResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.common.retrofit
2 |
3 | import com.mrntlu.projectconsumer.models.main.anime.Anime
4 | import com.mrntlu.projectconsumer.models.main.game.Game
5 | import com.mrntlu.projectconsumer.models.main.movie.Movie
6 | import com.mrntlu.projectconsumer.models.main.tv.TVSeries
7 |
8 | data class PreviewResponse(
9 | val upcoming: List,
10 | val popular: List,
11 | val top: List,
12 | val extra: List?,
13 | )
14 |
15 | data class Preview(
16 | val movie: PreviewResponse,
17 | val tv: PreviewResponse,
18 | val anime: PreviewResponse,
19 | val game: PreviewResponse,
20 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeAirDate.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class AnimeAirDate(
9 | val from: String?,
10 | val to: String?,
11 |
12 | @SerializedName("from_day")
13 | val fromDay: Int?,
14 |
15 | @SerializedName("from_month")
16 | val fromMonth: Int?,
17 |
18 | @SerializedName("from_year")
19 | val fromYear: Int?,
20 |
21 | @SerializedName("to_day")
22 | val toDay: Int?,
23 |
24 | @SerializedName("to_month")
25 | val toMonth: Int?,
26 |
27 | @SerializedName("to_year")
28 | val toYear: Int?,
29 | ) : Parcelable {
30 | constructor(): this(
31 | "", "", 0, 0, 0, 0, 0, 0
32 | )
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeCharacter.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class AnimeCharacter(
9 | val name: String,
10 | val role: String,
11 | val image: String,
12 |
13 | @SerializedName("mal_id")
14 | val malID: Int,
15 | ) : Parcelable
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeGenre.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class AnimeGenre(
8 | val name: String,
9 | val url: String,
10 | ) : Parcelable
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeNameURL.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class AnimeNameURL(
8 | val name: String,
9 | val url: String,
10 | ) : Parcelable
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeRecommendation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class AnimeRecommendation(
9 | val title: String,
10 |
11 | @SerializedName("mal_id")
12 | val malID: Int,
13 |
14 | @SerializedName("image_url")
15 | val imageURL: String,
16 | ) : Parcelable
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/anime/AnimeRelation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.anime
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class AnimeRelation(
9 | @SerializedName("_id")
10 | val id: String,
11 |
12 | @SerializedName("mal_id")
13 | val malID: Int,
14 |
15 | @SerializedName("anime_id")
16 | val animeID: String,
17 |
18 | @SerializedName("image_url")
19 | val imageURL: String,
20 |
21 | @SerializedName("title_en")
22 | val titleEn: String,
23 |
24 | @SerializedName("title_original")
25 | val titleOriginal: String,
26 |
27 | val relation: String,
28 | val type: String,
29 | ) : Parcelable
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/game/GameDetailsRelation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.game
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class GameDetailsRelation(
6 | @SerializedName("_id")
7 | val id: String,
8 | val platforms: List,
9 |
10 | @SerializedName("title")
11 | val title: String,
12 |
13 | @SerializedName("title_original")
14 | val titleOriginal: String,
15 |
16 | @SerializedName("rawg_id")
17 | val rawgID: Int,
18 |
19 | @SerializedName("release_date")
20 | val releaseDate: String?,
21 |
22 | @SerializedName("image_url")
23 | val imageURL: String,
24 | )
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/game/GameMetacriticScorePlatform.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.game
2 |
3 | import android.os.Parcelable
4 | import kotlinx.parcelize.Parcelize
5 |
6 | @Parcelize
7 | data class GameMetacriticScorePlatform(
8 | val score: Float,
9 | val platform: String,
10 | ) : Parcelable
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/game/GameRelation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.game
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class GameRelation(
9 | val name: String,
10 |
11 | @SerializedName("release_date")
12 | val releaseDate: String,
13 |
14 | @SerializedName("rawg_id")
15 | val rawgID: Int,
16 | ) : Parcelable
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/game/GameStore.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.game
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import kotlinx.parcelize.Parcelize
6 |
7 | @Parcelize
8 | data class GameStore(
9 | val url: String,
10 |
11 | @SerializedName("store_id")
12 | val storeId: Int,
13 | ) : Parcelable
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/movie/entity/MovieTypeConverters.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.movie.entity
2 |
3 | import androidx.room.TypeConverter
4 | import com.google.gson.Gson
5 | import com.google.gson.reflect.TypeToken
6 | import com.mrntlu.projectconsumer.models.common.Streaming
7 |
8 | class MovieTypeConverters {
9 | private val gson = Gson()
10 |
11 | @TypeConverter
12 | fun fromStreamingList(streamingList: List?): String {
13 | return gson.toJson(streamingList)
14 | }
15 |
16 | @TypeConverter
17 | fun toStreamingList(streamingList: String?): List? {
18 | if (streamingList != null) {
19 | val streaming = object : TypeToken>() {}.type
20 | return gson.fromJson(streamingList, streaming)
21 | }
22 | return emptyList()
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/review/Author.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.review
2 |
3 | import android.os.Parcelable
4 | import com.google.gson.annotations.SerializedName
5 | import com.mrntlu.projectconsumer.interfaces.DiffUtilComparison
6 | import kotlinx.parcelize.Parcelize
7 |
8 | @Parcelize
9 | data class Author(
10 | val image: String,
11 | val username: String,
12 | val email: String,
13 |
14 | @SerializedName("_id")
15 | val id: String,
16 |
17 | @SerializedName("is_premium")
18 | val isPremium: Boolean,
19 | ): Parcelable, DiffUtilComparison {
20 | constructor(): this("", "", "", "", false)
21 |
22 | override fun areItemsTheSame(newItem: Author): Boolean {
23 | return id == newItem.id
24 | }
25 |
26 | override fun areContentsTheSame(newItem: Author): Boolean {
27 | return when {
28 | id != newItem.id -> false
29 | image != newItem.image -> false
30 | else -> true
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/review/retrofit/ReviewBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.review.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ReviewBody(
6 | @SerializedName("content_id")
7 | val contentId: String,
8 |
9 | @SerializedName("content_external_id")
10 | val contentExternalId: String?,
11 |
12 | @SerializedName("content_external_int_id")
13 | val contentExternalIntId: Int?,
14 |
15 | @SerializedName("content_type")
16 | val contentType: String,
17 |
18 | @SerializedName("is_spoiler")
19 | val isSpoiler: Boolean,
20 |
21 | val star: Int,
22 | val review: String,
23 | )
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/review/retrofit/UpdateReviewBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.review.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateReviewBody(
6 | val id: String,
7 | val review: String?,
8 | val star: Int?,
9 |
10 | @SerializedName("is_spoiler")
11 | val isSpoiler: Boolean?,
12 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/tv/Network.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.tv
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class Network(
6 | val logo: String?,
7 | val name: String,
8 |
9 | @SerializedName("origin_country")
10 | val originCountry: String?
11 | ) {
12 | constructor(): this("", "", "")
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/tv/Season.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.tv
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class Season(
6 | val name: String,
7 |
8 | @SerializedName("air_date")
9 | val airDate: String,
10 |
11 | @SerializedName("episode_count")
12 | val episodeCount: Int,
13 |
14 | @SerializedName("image_url")
15 | val imageURL: String,
16 |
17 | @SerializedName("season_num")
18 | val seasonNum: Int
19 | ) {
20 | constructor(): this("", "", 0, "", 0)
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/tv/entity/NetworkEntity.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.tv.entity
2 |
3 | import androidx.room.ColumnInfo
4 |
5 | data class NetworkEntity(
6 | val logo: String?,
7 | val name: String,
8 |
9 | @ColumnInfo("origin_country")
10 | val originCountry: String?
11 | ) {
12 | constructor(): this("", "", "")
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/tv/entity/TVSeriesTypeConverters.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.tv.entity
2 |
3 | import androidx.room.TypeConverter
4 | import com.google.gson.Gson
5 | import com.google.gson.reflect.TypeToken
6 | import com.mrntlu.projectconsumer.models.main.tv.Season
7 |
8 | class TVSeriesTypeConverters {
9 | @TypeConverter
10 | fun fromNetworkList(networks: List?): String {
11 | return Gson().toJson(networks)
12 | }
13 |
14 | @TypeConverter
15 | fun toNetworkList(networks: String?): List? {
16 | if (networks != null) {
17 | val network = object : TypeToken>() {}.type
18 | return Gson().fromJson(networks, network)
19 | }
20 | return emptyList()
21 | }
22 |
23 | @TypeConverter
24 | fun fromSeasonList(seasons: List?): String {
25 | return Gson().toJson(seasons)
26 | }
27 |
28 | @TypeConverter
29 | fun toSeasonList(seasons: String?): List? {
30 | if (seasons != null) {
31 | val season = object : TypeToken>() {}.type
32 | return Gson().fromJson(seasons, season)
33 | }
34 | return emptyList()
35 | }
36 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userInteraction/ConsumeLater.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userInteraction
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ConsumeLater(
6 | @SerializedName("_id")
7 | val id: String,
8 |
9 | @SerializedName("user_id")
10 | val userID: String,
11 |
12 | @SerializedName("content_id")
13 | val contentID: String,
14 |
15 | @SerializedName("content_external_id")
16 | val contentExternalID: String,
17 |
18 | @SerializedName("content_external_int_id")
19 | val contentExternalIntID: Int,
20 |
21 | @SerializedName("content_type")
22 | val contentType: String,
23 |
24 | @SerializedName("self_note")
25 | val selfNote: String
26 | )
27 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userInteraction/entity/ConsumeLaterTypeConverters.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userInteraction.entity
2 |
3 | import androidx.room.TypeConverter
4 | import com.google.gson.Gson
5 |
6 | class ConsumeLaterTypeConverters {
7 | @TypeConverter
8 | fun fromConsumeLaterContent(consumeLaterContentEntity: ConsumeLaterContentEntity): String {
9 | return Gson().toJson(consumeLaterContentEntity)
10 | }
11 |
12 | @TypeConverter
13 | fun toConsumeLaterContent(consumeLaterContent: String): ConsumeLaterContentEntity {
14 | return Gson().fromJson(consumeLaterContent, ConsumeLaterContentEntity::class.java)
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userInteraction/retrofit/ConsumeLaterBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userInteraction.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class ConsumeLaterBody(
6 | @SerializedName("content_id")
7 | val contentId: String,
8 |
9 | @SerializedName("content_external_id")
10 | val contentExternalId: String?,
11 |
12 | @SerializedName("content_external_int_id")
13 | val contentExternalIntId: Int?,
14 |
15 | @SerializedName("content_type")
16 | val contentType: String,
17 |
18 | @SerializedName("self_note")
19 | val selfNote: String?,
20 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userInteraction/retrofit/MarkConsumeLaterBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userInteraction.retrofit
2 |
3 | data class MarkConsumeLaterBody(
4 | val id: String,
5 | val score: Int?,
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/AnimeWatchList.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.UserListModel
5 |
6 | data class AnimeWatchList(
7 | @SerializedName("_id")
8 | override val id: String,
9 |
10 | @SerializedName("anime_id")
11 | override val contentId: String,
12 |
13 | @SerializedName("anime_mal_id")
14 | override val contentExternalId: String,
15 |
16 | @SerializedName("watched_episodes")
17 | override val mainAttribute: Int,
18 |
19 | @SerializedName("times_finished")
20 | override val timesFinished: Int,
21 |
22 | @SerializedName("status")
23 | override val contentStatus: String,
24 |
25 | @SerializedName("created_at")
26 | override val createdAt: String,
27 |
28 | override val score: Int?,
29 |
30 | override val subAttribute: Int? = null,
31 | ): UserListModel()
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/GamePlayList.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.UserListModel
5 |
6 | data class GamePlayList(
7 | @SerializedName("_id")
8 | override val id: String,
9 |
10 | @SerializedName("game_id")
11 | override val contentId: String,
12 |
13 | @SerializedName("game_rawg_id")
14 | override val contentExternalId: String,
15 |
16 | @SerializedName("times_finished")
17 | override val timesFinished: Int,
18 |
19 | @SerializedName("hours_played")
20 | override val mainAttribute: Int?,
21 |
22 | @SerializedName("status")
23 | override val contentStatus: String,
24 |
25 | @SerializedName("created_at")
26 | override val createdAt: String,
27 |
28 | override val score: Int?,
29 |
30 | override val subAttribute: Int? = null,
31 | ): UserListModel()
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/Log.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class Log(
6 | @SerializedName("content_id")
7 | val contentId: String,
8 |
9 | @SerializedName("content_image")
10 | val contentImage: String,
11 |
12 | @SerializedName("content_title")
13 | val contentTitle: String,
14 |
15 | @SerializedName("content_type")
16 | val contentType: String,
17 |
18 | @SerializedName("created_at")
19 | val createdAt: String,
20 |
21 | @SerializedName("log_action")
22 | val logAction: String,
23 |
24 | @SerializedName("log_action_details")
25 | val logActionDetails: String,
26 |
27 | @SerializedName("log_type")
28 | val logType: String,
29 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/LogsByDate.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | data class LogsByDate(
4 | val date: String,
5 | val count: Int,
6 | val data: List,
7 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/MovieWatchList.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.UserListModel
5 |
6 | data class MovieWatchList(
7 | @SerializedName("_id")
8 | override val id: String,
9 |
10 | @SerializedName("movie_id")
11 | override val contentId: String,
12 |
13 | @SerializedName("movie_tmdb_id")
14 | override val contentExternalId: String,
15 |
16 | @SerializedName("times_finished")
17 | override val timesFinished: Int,
18 |
19 | @SerializedName("status")
20 | override val contentStatus: String,
21 |
22 | @SerializedName("created_at")
23 | override val createdAt: String,
24 |
25 | override val score: Int?,
26 |
27 | override val mainAttribute: Int? = null,
28 | override val subAttribute: Int? = null,
29 | ): UserListModel()
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/TVSeriesWatchList.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 | import com.mrntlu.projectconsumer.interfaces.UserListModel
5 |
6 | data class TVSeriesWatchList(
7 | @SerializedName("_id")
8 | override val id: String,
9 |
10 | @SerializedName("tv_id")
11 | override val contentId: String,
12 |
13 | @SerializedName("tv_tmdb_id")
14 | override val contentExternalId: String,
15 |
16 | @SerializedName("times_finished")
17 | override val timesFinished: Int,
18 |
19 | @SerializedName("watched_episodes")
20 | override val mainAttribute: Int,
21 |
22 | @SerializedName("watched_seasons")
23 | override val subAttribute: Int,
24 |
25 | @SerializedName("status")
26 | override val contentStatus: String,
27 |
28 | @SerializedName("created_at")
29 | override val createdAt: String,
30 |
31 | override val score: Int?,
32 | ): UserListModel()
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/UserList.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UserList(
6 | @SerializedName("_id")
7 | val id: String,
8 |
9 | @SerializedName("user_id")
10 | val userID: String,
11 |
12 | @SerializedName("is_public")
13 | val isPublic: Boolean,
14 |
15 | @SerializedName("anime_list")
16 | var animeList: List,
17 |
18 | @SerializedName("game_list")
19 | var gameList: List,
20 |
21 | @SerializedName("movie_watch_list")
22 | var movieList: List,
23 |
24 | @SerializedName("tv_watch_list")
25 | var tvList: List,
26 |
27 | val slug: String,
28 | )
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/AnimeWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class AnimeWatchListBody(
6 | @SerializedName("anime_id")
7 | val animeId: String,
8 |
9 | @SerializedName("anime_mal_id")
10 | val animeMalId: Int,
11 |
12 | @SerializedName("watched_episodes")
13 | val watchedEpisodes: Int?,
14 |
15 | @SerializedName("times_finished")
16 | val timesFinished: Int?,
17 |
18 | val score: Int?,
19 | val status: String,
20 | )
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/DeleteUserListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | data class DeleteUserListBody(
4 | val id: String,
5 | val type: String,
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/GamePlayListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class GamePlayListBody(
6 | @SerializedName("game_id")
7 | val gameId: String,
8 |
9 | @SerializedName("game_rawg_id")
10 | val gameRawgId: Int,
11 |
12 | @SerializedName("times_finished")
13 | val timesFinished: Int?,
14 |
15 | @SerializedName("hours_played")
16 | val hoursPlayed: Int?,
17 |
18 | val score: Int?,
19 | val status: String,
20 | )
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/IncrementTVSeriesListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class IncrementTVSeriesListBody(
6 | val id: String,
7 |
8 | @SerializedName("is_episode")
9 | val isEpisode: Boolean,
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/MovieWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class MovieWatchListBody(
6 | @SerializedName("movie_id")
7 | val movieId: String,
8 |
9 | @SerializedName("movie_tmdb_id")
10 | val movieTMDBId: String,
11 |
12 | @SerializedName("times_finished")
13 | val timesFinished: Int?,
14 |
15 | val score: Int?,
16 | val status: String
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/TVWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class TVWatchListBody(
6 | @SerializedName("tv_id")
7 | val tvId: String,
8 |
9 | @SerializedName("tv_tmdb_id")
10 | val tvTMDBId: String,
11 |
12 | @SerializedName("times_finished")
13 | val timesFinished: Int?,
14 |
15 | @SerializedName("watched_episodes")
16 | val watchedEpisodes: Int?,
17 |
18 | @SerializedName("watched_seasons")
19 | val watchedSeasons: Int?,
20 |
21 | val score: Int?,
22 | val status: String
23 | )
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/UpdateAnimeWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateAnimeWatchListBody(
6 | val id: String,
7 |
8 | @SerializedName("is_updating_score")
9 | val isUpdatingScore: Boolean,
10 |
11 | @SerializedName("times_finished")
12 | val timesFinished: Int?,
13 |
14 | @SerializedName("watched_episodes")
15 | val watchedEpisodes: Int?,
16 |
17 | val score: Int?,
18 | val status: String?
19 | )
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/UpdateGamePlayListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateGamePlayListBody(
6 | val id: String,
7 |
8 | @SerializedName("is_updating_score")
9 | val isUpdatingScore: Boolean,
10 |
11 | @SerializedName("times_finished")
12 | val timesFinished: Int?,
13 |
14 | @SerializedName("hours_played")
15 | val hoursPlayed: Int?,
16 |
17 | val score: Int?,
18 | val status: String?
19 | )
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/UpdateMovieWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateMovieWatchListBody(
6 | val id: String,
7 |
8 | @SerializedName("is_updating_score")
9 | val isUpdatingScore: Boolean,
10 |
11 | @SerializedName("times_finished")
12 | val timesFinished: Int?,
13 |
14 | val score: Int?,
15 | val status: String?,
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/models/main/userList/retrofit/UpdateTVWatchListBody.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.models.main.userList.retrofit
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class UpdateTVWatchListBody(
6 | val id: String,
7 |
8 | @SerializedName("is_updating_score")
9 | val isUpdatingScore: Boolean,
10 |
11 | @SerializedName("times_finished")
12 | val timesFinished: Int?,
13 |
14 | @SerializedName("watched_episodes")
15 | val watchedEpisodes: Int?,
16 |
17 | @SerializedName("watched_seasons")
18 | val watchedSeasons: Int?,
19 |
20 | val score: Int?,
21 | val status: String?
22 | )
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/AISuggestionsRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.AISuggestionApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class AISuggestionsRepository @Inject constructor(
8 | private val aiSuggestionApiService: AISuggestionApiService,
9 | ) {
10 |
11 | fun getAISuggestions() = networkResponseFlow {
12 | aiSuggestionApiService.getAISuggestions()
13 | }
14 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/AnimePreviewRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.AnimeApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class AnimePreviewRepository @Inject constructor(
8 | private val animeApiService: AnimeApiService,
9 | ) {
10 | fun fetchPreviewAnimes() = networkResponseFlow {
11 | animeApiService.getPreviewAnimes()
12 | }
13 |
14 | fun getCurrentlyAiringTVSeriesByDayOfWeek() = networkResponseFlow {
15 | animeApiService.getCurrentlyAiringAnimesByDayOfWeek()
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/AuthRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.models.auth.retrofit.ForgotPasswordBody
4 | import com.mrntlu.projectconsumer.models.auth.retrofit.GoogleLoginBody
5 | import com.mrntlu.projectconsumer.models.auth.retrofit.LoginBody
6 | import com.mrntlu.projectconsumer.models.auth.retrofit.RegisterBody
7 | import com.mrntlu.projectconsumer.service.retrofit.AuthApiService
8 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
9 | import javax.inject.Inject
10 |
11 | class AuthRepository @Inject constructor(
12 | private val authApiService: AuthApiService,
13 | ) {
14 |
15 | fun login(body: LoginBody) = networkResponseFlow {
16 | authApiService.login(body)
17 | }
18 |
19 | fun register(body: RegisterBody) = networkResponseFlow {
20 | authApiService.register(body)
21 | }
22 |
23 | fun googleLogin(body: GoogleLoginBody) = networkResponseFlow {
24 | authApiService.googleLogin(body)
25 | }
26 |
27 | fun forgotPassword(body: ForgotPasswordBody) = networkResponseFlow {
28 | authApiService.forgotPassword(body)
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/GamePreviewRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.GameApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class GamePreviewRepository @Inject constructor(
8 | private val gameApiService: GameApiService,
9 | ) {
10 | fun fetchPreviewGames() = networkResponseFlow {
11 | gameApiService.getPreviewGames()
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/MoviePreviewRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.MovieApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class MoviePreviewRepository @Inject constructor(
8 | private val movieApiService: MovieApiService,
9 | ) {
10 | fun fetchPreviewMovies() = networkResponseFlow {
11 | movieApiService.getPreviewMovies()
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/PreviewRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.PreviewApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class PreviewRepository @Inject constructor(
8 | private val previewApiService: PreviewApiService,
9 | ) {
10 | fun getPreview() = networkResponseFlow {
11 | previewApiService.getPreview()
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/repository/TVPreviewRepository.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.repository
2 |
3 | import com.mrntlu.projectconsumer.service.retrofit.TVSeriesApiService
4 | import com.mrntlu.projectconsumer.utils.networkResponseFlow
5 | import javax.inject.Inject
6 |
7 | class TVPreviewRepository @Inject constructor(
8 | private val tvSeriesApiService: TVSeriesApiService,
9 | ) {
10 |
11 | fun fetchPreviewTVSeries() = networkResponseFlow {
12 | tvSeriesApiService.getPreviewTVSeries()
13 | }
14 |
15 | fun getCurrentlyAiringTVSeriesByDayOfWeek() = networkResponseFlow {
16 | tvSeriesApiService.getCurrentlyAiringTVSeriesByDayOfWeek()
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/service/AuthInterceptor.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.service
2 |
3 | import kotlinx.coroutines.flow.first
4 | import kotlinx.coroutines.runBlocking
5 | import okhttp3.Interceptor
6 | import okhttp3.Response
7 | import javax.inject.Inject
8 |
9 | class AuthInterceptor @Inject constructor(
10 | private val tokenManager: TokenManager,
11 | ): Interceptor {
12 | override fun intercept(chain: Interceptor.Chain): Response {
13 | val token = runBlocking {
14 | tokenManager.getToken().first()
15 | }
16 | val request = chain.request().newBuilder()
17 | request.addHeader("Authorization", "Bearer $token")
18 | return chain.proceed(request.build())
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/service/TokenManager.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.service
2 |
3 | import android.content.Context
4 | import androidx.datastore.preferences.core.edit
5 | import androidx.datastore.preferences.core.stringPreferencesKey
6 | import com.mrntlu.projectconsumer.utils.dataStore
7 | import kotlinx.coroutines.flow.Flow
8 | import kotlinx.coroutines.flow.map
9 |
10 | class TokenManager(private val context: Context) {
11 | companion object {
12 | private val TOKEN_KEY = stringPreferencesKey("jwt_token")
13 | }
14 |
15 | fun getToken(): Flow {
16 | return context.dataStore.data.map { preferences ->
17 | preferences[TOKEN_KEY]
18 | }
19 | }
20 |
21 | suspend fun saveToken(token: String) {
22 | context.dataStore.edit { preferences ->
23 | preferences[TOKEN_KEY] = token
24 | }
25 | }
26 |
27 | suspend fun deleteToken() {
28 | context.dataStore.edit { preferences ->
29 | preferences.remove(TOKEN_KEY)
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/service/retrofit/AISuggestionApiService.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.service.retrofit
2 |
3 | import com.mrntlu.projectconsumer.models.common.AISuggestionResponse
4 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
5 | import retrofit2.Response
6 | import retrofit2.http.GET
7 |
8 | interface AISuggestionApiService {
9 | @GET("suggestions")
10 | suspend fun getAISuggestions(): Response>
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/service/retrofit/AuthApiService.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.service.retrofit
2 |
3 | import com.mrntlu.projectconsumer.models.auth.retrofit.ForgotPasswordBody
4 | import com.mrntlu.projectconsumer.models.auth.retrofit.GoogleLoginBody
5 | import com.mrntlu.projectconsumer.models.auth.retrofit.LoginBody
6 | import com.mrntlu.projectconsumer.models.auth.retrofit.LoginResponse
7 | import com.mrntlu.projectconsumer.models.auth.retrofit.RegisterBody
8 | import com.mrntlu.projectconsumer.models.common.retrofit.MessageResponse
9 | import retrofit2.Response
10 | import retrofit2.http.Body
11 | import retrofit2.http.GET
12 | import retrofit2.http.Header
13 | import retrofit2.http.POST
14 |
15 | interface AuthApiService {
16 | @POST("auth/login")
17 | suspend fun login(@Body body: LoginBody): Response
18 |
19 | @POST("auth/register")
20 | suspend fun register(@Body body: RegisterBody): Response
21 |
22 | @POST("oauth/google")
23 | suspend fun googleLogin(@Body body: GoogleLoginBody): Response
24 |
25 | @GET("auth/refresh")
26 | suspend fun refreshToken(@Header("Authorization") token: String): Response
27 |
28 | @POST("user/forgot-password")
29 | suspend fun forgotPassword(@Body body: ForgotPasswordBody): Response
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/service/retrofit/PreviewApiService.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.service.retrofit
2 |
3 | import com.mrntlu.projectconsumer.models.common.retrofit.Preview
4 | import retrofit2.Response
5 | import retrofit2.http.GET
6 |
7 | interface PreviewApiService {
8 |
9 | @GET("preview")
10 | suspend fun getPreview(): Response
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/ui/BaseFragment.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.ui
2 |
3 | import android.os.Bundle
4 | import android.view.View
5 | import androidx.fragment.app.Fragment
6 | import androidx.fragment.app.activityViewModels
7 | import androidx.navigation.NavController
8 | import androidx.navigation.Navigation
9 | import androidx.navigation.fragment.findNavController
10 | import com.mrntlu.projectconsumer.viewmodels.shared.ActivitySharedViewModel
11 |
12 | abstract class BaseFragment: Fragment() {
13 | protected var _binding: T? = null
14 | protected val binding get() = _binding!!
15 | protected val sharedViewModel: ActivitySharedViewModel by activityViewModels()
16 |
17 | protected lateinit var navController: NavController
18 |
19 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
20 | super.onViewCreated(view, savedInstanceState)
21 | navController = try {
22 | findNavController()
23 | } catch (_: Exception) {
24 | Navigation.findNavController(view)
25 | }
26 | }
27 |
28 | // To prevent memory leak
29 | override fun onDestroyView() {
30 | super.onDestroyView()
31 | _binding = null
32 | }
33 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/ui/compose/LoadingShimmer.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.ui.compose
2 |
3 | import androidx.compose.foundation.background
4 | import androidx.compose.foundation.layout.Spacer
5 | import androidx.compose.foundation.layout.aspectRatio
6 | import androidx.compose.foundation.layout.fillMaxWidth
7 | import androidx.compose.foundation.shape.RoundedCornerShape
8 | import androidx.compose.runtime.Composable
9 | import androidx.compose.ui.Modifier
10 | import androidx.compose.ui.draw.clip
11 | import androidx.compose.ui.unit.Dp
12 | import androidx.compose.ui.unit.dp
13 |
14 | @Composable
15 | fun LoadingShimmer(
16 | modifier: Modifier = Modifier,
17 | isDarkTheme: Boolean = false,
18 | roundedCornerSize: Dp = 8.dp,
19 | aspectRatio: Float = 0.6666667f,
20 | sizeModifier: Modifier.() -> Modifier = { modifier.fillMaxWidth() },
21 | ) {
22 | Spacer(
23 | modifier = modifier
24 | .sizeModifier()
25 | .aspectRatio(aspectRatio)
26 | .clip(RoundedCornerShape(roundedCornerSize))
27 | .background(getShimmerBrush(isDarkTheme = isDarkTheme)),
28 | )
29 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/ui/dialog/LoadingDialog.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.ui.dialog
2 |
3 | import android.app.Activity
4 | import android.graphics.Color
5 | import android.graphics.drawable.ColorDrawable
6 | import android.view.WindowManager
7 | import androidx.appcompat.app.AlertDialog
8 | import com.mrntlu.projectconsumer.R
9 |
10 | class LoadingDialog(
11 | private val activity: Activity
12 | ) {
13 | lateinit var dialog: AlertDialog
14 |
15 | fun showLoadingDialog() {
16 | val builder = AlertDialog.Builder(activity, R.style.WrapContentDialog)
17 |
18 | builder.apply {
19 | setView(activity.layoutInflater.inflate(R.layout.layout_loading_dialog, null))
20 | setCancelable(false)
21 | dialog = create()
22 | }
23 |
24 | dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
25 | val layoutParams = WindowManager.LayoutParams().apply {
26 | copyFrom(dialog.window?.attributes)
27 | width = WindowManager.LayoutParams.WRAP_CONTENT
28 | height = WindowManager.LayoutParams.WRAP_CONTENT
29 | }
30 | dialog.window?.attributes = layoutParams
31 | dialog.show()
32 | }
33 |
34 | fun dismissDialog() {
35 | if (::dialog.isInitialized)
36 | dialog.dismiss()
37 | }
38 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/FetchType.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | enum class FetchType(val tag: String) {
4 | UPCOMING("upcoming"),
5 | POPULAR("popular"),
6 | TOP("top"),
7 | EXTRA("extra")
8 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/MessageBoxType.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | enum class MessageBoxType {
4 | NOTHING,
5 | ERROR,
6 | SUCCESS,
7 | INFO,
8 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/NetworkResponse.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | sealed class NetworkResponse {
4 | object Loading: NetworkResponse()
5 |
6 | data class Success(
7 | val data: T
8 | ): NetworkResponse()
9 |
10 | data class Failure(
11 | val errorMessage: String,
12 | ): NetworkResponse()
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/Operation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | data class Operation(
4 | val data: T?,
5 | val position: Int,
6 | val operationEnum: OperationEnum
7 | )
8 |
9 | enum class OperationEnum {
10 | Delete,
11 | Update,
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/Orientation.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | enum class Orientation {
4 | Idle,
5 | Landscape,
6 | LandscapeReverse,
7 | Portrait,
8 | PortraitReverse,
9 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/RecyclerViewEnum.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | enum class RecyclerViewEnum(val value: Int) {
4 | Empty(0),
5 | Loading(1),
6 | Error(2),
7 | View(3),
8 | PaginationLoading(4),
9 | PaginationExhaust(5),
10 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/SafeClickListener.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | import android.os.SystemClock
4 | import android.view.View
5 |
6 | class SafeClickListener(
7 | private var defaultInterval: Int = 550,
8 | private val onSafeCLick: (View) -> Unit,
9 | ): View.OnClickListener {
10 | private var lastTimeClicked: Long = 0
11 |
12 | override fun onClick(v: View) {
13 | if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
14 | return
15 | }
16 | lastTimeClicked = SystemClock.elapsedRealtime()
17 | onSafeCLick(v)
18 | }
19 | }
20 |
21 | fun View.setSafeOnClickListener(interval: Int = 550, onSafeClick: (View) -> Unit) {
22 | val safeClickListener = SafeClickListener(interval) {
23 | onSafeClick(it)
24 | }
25 | setOnClickListener(safeClickListener)
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/utils/Utils.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.utils
2 |
3 | import android.util.Log
4 |
5 | fun printLog(message:String, tag: String = "TestLog") = Log.d(tag, message)
6 |
7 | fun compactMediumCalculator(height: Float): Double {
8 | var i = 20
9 | var span = i
10 | while (i < 30) {
11 | val remainder = height.toDouble().roundOffDecimal() % i
12 |
13 | if (remainder <= 0.5) {
14 | if (i > span)
15 | span = i
16 | }
17 | i += 1
18 | }
19 | return span / 10.0
20 | }
21 |
22 | fun expandedMediumCalculator(height: Float): Double {
23 | var i = 200
24 | var span = i
25 | while (i < 300) {
26 | val remainder = height.toDouble().roundSingleDecimal() % i
27 |
28 | if (remainder.toInt() <= 10) {
29 | if (i > span)
30 | span = i
31 | }
32 | i += 1
33 | }
34 | return span / 100.0
35 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/auth/RegisterViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.auth
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.auth.retrofit.RegisterBody
7 | import com.mrntlu.projectconsumer.models.common.retrofit.MessageResponse
8 | import com.mrntlu.projectconsumer.repository.AuthRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class RegisterViewModel @Inject constructor(
16 | private val repository: AuthRepository,
17 | ): ViewModel() {
18 |
19 | private val _registerResponse = MutableLiveData>()
20 | val registerResponse: LiveData> = _registerResponse
21 |
22 | fun register(body: RegisterBody) = networkResponseFlowCollector(
23 | repository.register(body)
24 | ) { response ->
25 | _registerResponse.value = response
26 | }
27 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/anime/AnimeDetailsViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.anime
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
7 | import com.mrntlu.projectconsumer.models.main.anime.AnimeDetails
8 | import com.mrntlu.projectconsumer.repository.AnimeRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class AnimeDetailsViewModel @Inject constructor(
16 | private val animeRepository: AnimeRepository,
17 | ): ViewModel() {
18 | private val _animeDetails = MutableLiveData>>()
19 | val animeDetails: LiveData>> = _animeDetails
20 |
21 | fun getAnimeDetails(id: String) = networkResponseFlowCollector(
22 | animeRepository.getAnimeDetails(id)
23 | ) { response ->
24 | _animeDetails.value = response
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/anime/AnimePreviewViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.anime
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.PreviewResponse
7 | import com.mrntlu.projectconsumer.models.main.anime.Anime
8 | import com.mrntlu.projectconsumer.repository.AnimePreviewRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class AnimePreviewViewModel @Inject constructor(
16 | private val animePreviewRepository: AnimePreviewRepository,
17 | ): ViewModel() {
18 | private val _previewList = MutableLiveData>>()
19 | val previewList: LiveData>> = _previewList
20 |
21 | init {
22 | fetchPreviewAnimes()
23 | }
24 |
25 | fun fetchPreviewAnimes() = networkResponseFlowCollector(
26 | animePreviewRepository.fetchPreviewAnimes()
27 | ) { response ->
28 | _previewList.value = response
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/common/AISuggestionsViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.common
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.AISuggestionResponse
7 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
8 | import com.mrntlu.projectconsumer.repository.AISuggestionsRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class AISuggestionsViewModel @Inject constructor(
16 | private val repository: AISuggestionsRepository,
17 | ): ViewModel() {
18 |
19 | private val _aiSuggestionsResponse = MutableLiveData>>()
20 | val aiSuggestionsResponse: LiveData>> = _aiSuggestionsResponse
21 |
22 | fun getAISuggestions() = networkResponseFlowCollector(
23 | repository.getAISuggestions()
24 | ) { response ->
25 | _aiSuggestionsResponse.value = response
26 | }
27 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/common/PreviewViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.common
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.Preview
7 | import com.mrntlu.projectconsumer.repository.PreviewRepository
8 | import com.mrntlu.projectconsumer.utils.NetworkResponse
9 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
10 | import dagger.hilt.android.lifecycle.HiltViewModel
11 | import javax.inject.Inject
12 |
13 | @HiltViewModel
14 | class PreviewViewModel @Inject constructor(
15 | private val previewRepository: PreviewRepository,
16 | ): ViewModel() {
17 |
18 | private val _previewList = MutableLiveData>()
19 | val previewList: LiveData> = _previewList
20 |
21 | init {
22 | getPreview()
23 | }
24 |
25 | fun getPreview() = networkResponseFlowCollector(
26 | previewRepository.getPreview()
27 | ) { response ->
28 | _previewList.value = response
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/game/GameDetailsViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.game
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
7 | import com.mrntlu.projectconsumer.models.main.game.GameDetails
8 | import com.mrntlu.projectconsumer.repository.GameRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class GameDetailsViewModel @Inject constructor(
16 | private val gameRepository: GameRepository,
17 | ): ViewModel() {
18 | private val _gameDetails = MutableLiveData>>()
19 | val gameDetails: LiveData>> = _gameDetails
20 |
21 | fun getGameDetails(id: String) = networkResponseFlowCollector(
22 | gameRepository.getGameDetails(id)
23 | ) { response ->
24 | _gameDetails.value = response
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/game/GamePreviewViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.game
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.PreviewResponse
7 | import com.mrntlu.projectconsumer.models.main.game.Game
8 | import com.mrntlu.projectconsumer.repository.GamePreviewRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class GamePreviewViewModel @Inject constructor(
16 | private val gamePreviewRepository: GamePreviewRepository,
17 | ): ViewModel() {
18 | private val _previewList = MutableLiveData>>()
19 | val previewList: LiveData>> = _previewList
20 |
21 | init {
22 | fetchPreviewGames()
23 | }
24 |
25 | fun fetchPreviewGames() = networkResponseFlowCollector(
26 | gamePreviewRepository.fetchPreviewGames()
27 | ) { response ->
28 | _previewList.value = response
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/movie/MovieDetailsViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.movie
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
7 | import com.mrntlu.projectconsumer.models.main.movie.MovieDetails
8 | import com.mrntlu.projectconsumer.repository.MovieRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class MovieDetailsViewModel @Inject constructor(
16 | private val movieRepository: MovieRepository,
17 | ): ViewModel() {
18 | private val _movieDetails = MutableLiveData>>()
19 | val movieDetails: LiveData>> = _movieDetails
20 |
21 | fun getMovieDetails(id: String) = networkResponseFlowCollector(
22 | movieRepository.getMovieDetails(id)
23 | ) { response ->
24 | _movieDetails.value = response
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/movie/MoviePreviewViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.movie
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.PreviewResponse
7 | import com.mrntlu.projectconsumer.models.main.movie.Movie
8 | import com.mrntlu.projectconsumer.repository.MoviePreviewRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class MoviePreviewViewModel @Inject constructor(
16 | private val moviePreviewRepository: MoviePreviewRepository,
17 | ): ViewModel() {
18 | private val _previewList = MutableLiveData>>()
19 | val previewList: LiveData>> = _previewList
20 |
21 | init {
22 | fetchPreviewMovies()
23 | }
24 |
25 | fun fetchPreviewMovies() = networkResponseFlowCollector(
26 | moviePreviewRepository.fetchPreviewMovies()
27 | ) { response ->
28 | _previewList.value = response
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/profile/DiaryViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.profile
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
7 | import com.mrntlu.projectconsumer.models.main.userList.LogsByDate
8 | import com.mrntlu.projectconsumer.repository.UserListRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class DiaryViewModel @Inject constructor(
16 | private val repository: UserListRepository,
17 | ): ViewModel() {
18 | private val _logsResponse = MutableLiveData?>>>()
19 | val logsResponse: LiveData?>>> = _logsResponse
20 |
21 | fun getUserLogs(from: String, to: String) = networkResponseFlowCollector(
22 | repository.getUserLogs(from, to)
23 | ) { response ->
24 | _logsResponse.value = response
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/tv/TVDetailsViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.tv
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.DataResponse
7 | import com.mrntlu.projectconsumer.models.main.tv.TVSeriesDetails
8 | import com.mrntlu.projectconsumer.repository.TVRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class TVDetailsViewModel @Inject constructor(
16 | private val tvRepository: TVRepository,
17 | ): ViewModel() {
18 | private val _tvDetails = MutableLiveData>>()
19 | val tvDetails: LiveData>> = _tvDetails
20 |
21 | fun getTVDetails(id: String) = networkResponseFlowCollector(
22 | tvRepository.getTVSeriesDetails(id)
23 | ) { response ->
24 | _tvDetails.value = response
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/main/tv/TVPreviewViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.main.tv
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.mrntlu.projectconsumer.models.common.retrofit.PreviewResponse
7 | import com.mrntlu.projectconsumer.models.main.tv.TVSeries
8 | import com.mrntlu.projectconsumer.repository.TVPreviewRepository
9 | import com.mrntlu.projectconsumer.utils.NetworkResponse
10 | import com.mrntlu.projectconsumer.utils.networkResponseFlowCollector
11 | import dagger.hilt.android.lifecycle.HiltViewModel
12 | import javax.inject.Inject
13 |
14 | @HiltViewModel
15 | class TVPreviewViewModel @Inject constructor(
16 | private val tvPreviewRepository: TVPreviewRepository
17 | ): ViewModel() {
18 | private val _previewList = MutableLiveData>>()
19 | val previewList: LiveData>> = _previewList
20 |
21 | init {
22 | fetchPreviewTVSeries()
23 | }
24 |
25 | fun fetchPreviewTVSeries() = networkResponseFlowCollector(
26 | tvPreviewRepository.fetchPreviewTVSeries()
27 | ) { response ->
28 | _previewList.value = response
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/mrntlu/projectconsumer/viewmodels/shared/HomeDiscoverSharedViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.mrntlu.projectconsumer.viewmodels.shared
2 |
3 | import androidx.lifecycle.MutableLiveData
4 | import androidx.lifecycle.ViewModel
5 | import com.mrntlu.projectconsumer.utils.Constants.ContentType
6 |
7 | class HomeDiscoverSharedViewModel: ViewModel() {
8 |
9 | val currentContentType: MutableLiveData by lazy {
10 | MutableLiveData(ContentType.MOVIE)
11 | }
12 |
13 | fun contentType() = currentContentType.value ?: ContentType.MOVIE
14 |
15 | fun setContentType(newContentType: ContentType) {
16 | if (currentContentType.value != newContentType)
17 | this.currentContentType.value = newContentType
18 | }
19 |
20 | val selectedTabIndex: MutableLiveData by lazy {
21 | MutableLiveData(0)
22 | }
23 |
24 | fun setSelectedTabIndex(newIndex: Int) {
25 | if (selectedTabIndex.value != newIndex)
26 | this.selectedTabIndex.value = newIndex
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_in_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_in_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_out_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_out_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/color/tab_text_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_nav_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_nav_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_nav_text_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/custom_popup_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/highlight_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_24.xml:
--------------------------------------------------------------------------------
1 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_filled_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_ai.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_anime.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_back_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_right_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_settings.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bookmark.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bookmark_filled.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cancel.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_circle_12.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_company_75.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_content_type_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_country.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_delete.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_edit.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_explore.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_explore_outlined.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_feedback.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_filter_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_finish_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_friend_request.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_game_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_google.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_grid.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_heart.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_home.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_home_outline.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_language.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_like.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_like_outline.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_list.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_log.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_login_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_logout_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_mail.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_more.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_night_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_no_internet_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_off.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_off_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification_on_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_people.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_64.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_75.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_bottom.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_outlined.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_rate.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_refresh.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_remove.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_remove_heart.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_restore.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_round_check.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_search.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_settings_64.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_share.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star_36.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_storage.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tab_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_thumb.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_time_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_trash.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_tv.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_x.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nintendo.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nintendo_switch.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/notification_switch_thumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/notification_switch_track.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
5 |
7 |
9 |
11 |
13 |
14 |
15 |
16 | -
18 |
20 |
22 |
24 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_discover.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_home.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_person.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/switch_thumb_notification_off.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
6 |
8 |
11 |
14 |
15 |
16 |
17 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/switch_thumb_notification_on.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
6 |
8 |
11 |
14 |
15 |
16 |
17 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_background_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_selected_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/theme_switch_thumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
6 |
7 |
12 |
13 |
14 |
15 | -
17 |
18 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/theme_switch_track.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/top_rounded_corners.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_anime_relation.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_anime_relation_content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_carousel_shimmer.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_genre.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_name_url.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_pagination_exhaust.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_pagination_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_status_tab_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_streaming_empty.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_suggestion_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_loading_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_tab.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_tab_title.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
21 |
22 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/settings_info_tile.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
17 |
18 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/ai_suggestions_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/bottom_nav_auth_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/bottom_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/consume_later_item_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/details_share_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/filter_consume_later_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/profile_display_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/profile_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/search_toolbar_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/social_hub_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/sort_dual_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/sort_extra_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/sort_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/sort_toolbar_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/user_list_item_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/user_list_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/values-night/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 12dp
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #0F0F0F
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | dependencies {
4 | // Add the dependency for the Google services Gradle plugin
5 | classpath 'com.google.gms:google-services:4.3.15'
6 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
7 | classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.7.3"
8 | }
9 | }
10 |
11 | plugins {
12 | id 'com.android.application' version '8.1.1' apply false
13 | id 'com.android.library' version '8.1.1' apply false
14 | id 'org.jetbrains.kotlin.android' version '1.9.10' apply false
15 | id 'com.google.dagger.hilt.android' version '2.48' apply false
16 | id 'com.google.devtools.ksp' version '1.9.10-1.0.13' apply false
17 | id 'com.google.firebase.firebase-perf' version '1.4.2' apply false
18 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrNtlu/Project-Consumer-Android/aa65b12e0178546b1a2a955213aaa4829e46eafe/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Apr 04 22:13:46 TRT 2023
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | gradlePluginPortal()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | maven { url = "https://jitpack.io"}
14 | }
15 | }
16 | rootProject.name = "Project Consumer"
17 | include ':app'
18 |
--------------------------------------------------------------------------------