gitextract_rimhsaes/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── custom.md │ │ └── feature_request.yml │ ├── PULL_REQUEST_TEMPLATE/ │ │ ├── bug_fix.md │ │ ├── feature_addition.md │ │ └── submit_h_keyframe.md │ ├── dependabot.yml │ └── workflows/ │ ├── ci.yml │ ├── ci_release.yml │ └── pr_check.yml ├── .gitignore ├── .idea/ │ ├── .gitignore │ ├── .name │ ├── AndroidProjectSystem.xml │ ├── appInsightsSettings.xml │ ├── codeStyles/ │ │ ├── Project.xml │ │ └── codeStyleConfig.xml │ ├── compiler.xml │ ├── dbnavigator.xml │ ├── deploymentTargetDropDown.xml │ ├── deploymentTargetSelector.xml │ ├── dictionaries/ │ │ └── wrzg8.xml │ ├── gradle.xml │ ├── inspectionProfiles/ │ │ └── Project_Default.xml │ ├── kotlinc.xml │ ├── ktlint-plugin.xml │ ├── migrations.xml │ ├── misc.xml │ ├── render.experimental.xml │ ├── runConfigurations.xml │ ├── studiobot.xml │ └── vcs.xml ├── LICENSE ├── README.md ├── README_TECH.md ├── app/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── keystore/ │ │ └── Han1meViewerKeystore.jks │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── yenaly/ │ │ └── han1meviewer/ │ │ └── ExampleInstrumentedTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ ├── h_keyframes/ │ │ │ │ ├── 12444.json │ │ │ │ ├── 14463.json │ │ │ │ ├── 21806.json │ │ │ │ ├── 22068.json │ │ │ │ ├── 37176.json │ │ │ │ ├── 37177.json │ │ │ │ ├── 37178.json │ │ │ │ ├── 37179.json │ │ │ │ ├── 37220.json │ │ │ │ ├── 37221.json │ │ │ │ ├── 38387.json │ │ │ │ ├── 38389.json │ │ │ │ ├── 38457.json │ │ │ │ ├── 38461.json │ │ │ │ ├── 39192.json │ │ │ │ ├── 39305.json │ │ │ │ ├── 39306.json │ │ │ │ ├── 39468.json │ │ │ │ ├── 39811.json │ │ │ │ ├── 84717.json │ │ │ │ ├── 84718.json │ │ │ │ ├── 85926.json │ │ │ │ ├── 85927.json │ │ │ │ ├── 87968.json │ │ │ │ ├── 87969.json │ │ │ │ ├── 89087.json │ │ │ │ ├── 89088.json │ │ │ │ └── README.md │ │ │ ├── search_options/ │ │ │ │ ├── brands.json │ │ │ │ ├── duration.json │ │ │ │ ├── genre.json │ │ │ │ ├── sort_option.json │ │ │ │ └── tags.json │ │ │ └── shaders/ │ │ │ ├── Anime4K_AutoDownscalePre_x2.glsl │ │ │ ├── Anime4K_AutoDownscalePre_x4.glsl │ │ │ ├── Anime4K_Clamp_Highlights.glsl │ │ │ ├── Anime4K_Restore_CNN_M.glsl │ │ │ ├── Anime4K_Restore_CNN_S.glsl │ │ │ ├── Anime4K_Restore_CNN_VL.glsl │ │ │ ├── Anime4K_Upscale_CNN_x2_M.glsl │ │ │ ├── Anime4K_Upscale_CNN_x2_S.glsl │ │ │ └── Anime4K_Upscale_CNN_x2_VL.glsl │ │ ├── java/ │ │ │ └── com/ │ │ │ └── yenaly/ │ │ │ └── han1meviewer/ │ │ │ ├── Constants.kt │ │ │ ├── FirebaseConstants.kt │ │ │ ├── HAdvancedSearch.kt │ │ │ ├── HCacheManager.kt │ │ │ ├── HCrashHandler.kt │ │ │ ├── HFileManager.kt │ │ │ ├── HInitializer.kt │ │ │ ├── HanimeApplication.kt │ │ │ ├── HanimeManager.kt │ │ │ ├── HanimeResolution.kt │ │ │ ├── Preferences.kt │ │ │ ├── VideoCoverSize.kt │ │ │ ├── logic/ │ │ │ │ ├── DatabaseRepo.kt │ │ │ │ ├── NetworkRepo.kt │ │ │ │ ├── Parser.kt │ │ │ │ ├── dao/ │ │ │ │ │ ├── DownloadDatabase.kt │ │ │ │ │ ├── HKeyframeDao.kt │ │ │ │ │ ├── HistoryDatabase.kt │ │ │ │ │ ├── MiscellanyDatabase.kt │ │ │ │ │ ├── SearchHistoryDao.kt │ │ │ │ │ ├── WatchHistoryDao.kt │ │ │ │ │ └── download/ │ │ │ │ │ ├── DownloadCategoryDao.kt │ │ │ │ │ ├── HUpdateDao.kt │ │ │ │ │ └── HanimeDownloadDao.kt │ │ │ │ ├── entity/ │ │ │ │ │ ├── HKeyframeEntity.kt │ │ │ │ │ ├── SearchHistoryEntity.kt │ │ │ │ │ ├── WatchHistoryEntity.kt │ │ │ │ │ └── download/ │ │ │ │ │ ├── DownloadCategoryEntity.kt │ │ │ │ │ ├── HUpdateEntity.kt │ │ │ │ │ ├── HanimeCategoryCrossRef.kt │ │ │ │ │ ├── HanimeDownloadEntity.kt │ │ │ │ │ └── VideoWithCategories.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── CloudFlareBlockedException.kt │ │ │ │ │ ├── HanimeNotFoundException.kt │ │ │ │ │ ├── IPBlockedException.kt │ │ │ │ │ └── ParseException.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── HanimeInfo.kt │ │ │ │ │ ├── HanimePreview.kt │ │ │ │ │ ├── HanimeVideo.kt │ │ │ │ │ ├── HomePage.kt │ │ │ │ │ ├── MultiItemEntity.kt │ │ │ │ │ ├── MyListItems.kt │ │ │ │ │ ├── ParamEnum.kt │ │ │ │ │ ├── Playlists.kt │ │ │ │ │ ├── SearchOption.kt │ │ │ │ │ ├── SearchTag.kt │ │ │ │ │ ├── Subscription.kt │ │ │ │ │ ├── VideoComments.kt │ │ │ │ │ └── github/ │ │ │ │ │ ├── Commit.kt │ │ │ │ │ ├── Latest.kt │ │ │ │ │ ├── Release.kt │ │ │ │ │ └── Workflow.kt │ │ │ │ ├── network/ │ │ │ │ │ ├── GitHubDns.kt │ │ │ │ │ ├── HCookieJar.kt │ │ │ │ │ ├── HDns.kt │ │ │ │ │ ├── HProxySelector.kt │ │ │ │ │ ├── HUpdater.kt │ │ │ │ │ ├── HanimeNetwork.kt │ │ │ │ │ ├── ServiceCreator.kt │ │ │ │ │ ├── interceptor/ │ │ │ │ │ │ ├── SpeedLimitInterceptor.kt │ │ │ │ │ │ ├── SpeedLimitResponseBody.kt │ │ │ │ │ │ └── UserAgentInterceptor.kt │ │ │ │ │ └── service/ │ │ │ │ │ ├── HGitHubService.kt │ │ │ │ │ ├── HanimeBaseService.kt │ │ │ │ │ ├── HanimeCommentService.kt │ │ │ │ │ ├── HanimeMyListService.kt │ │ │ │ │ └── HanimeSubscriptionService.kt │ │ │ │ └── state/ │ │ │ │ ├── DownloadState.kt │ │ │ │ ├── PageLoadingState.kt │ │ │ │ ├── VideoLoadingState.kt │ │ │ │ └── WebsiteState.kt │ │ │ ├── ui/ │ │ │ │ ├── StateLayoutMixin.kt │ │ │ │ ├── activity/ │ │ │ │ │ ├── DownloadActivity.kt │ │ │ │ │ ├── LoginActivity.kt │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── PreviewActivity.kt │ │ │ │ │ ├── PreviewCommentActivity.kt │ │ │ │ │ ├── SearchActivity.kt │ │ │ │ │ ├── SettingsActivity.kt │ │ │ │ │ ├── SettingsRouter.kt │ │ │ │ │ └── VideoActivity.kt │ │ │ │ ├── adapter/ │ │ │ │ │ ├── AdapterLikeDataBindingPage.kt │ │ │ │ │ ├── BaseSingleDifferAdapter.kt │ │ │ │ │ ├── FixedGridLayoutManager.kt │ │ │ │ │ ├── HKeyframesRvAdapter.kt │ │ │ │ │ ├── HRvItemAdapter.kt │ │ │ │ │ ├── HSearchTagAdapter.kt │ │ │ │ │ ├── HSubscriptionAdapter.kt │ │ │ │ │ ├── HanimeDownloadedRvAdapter.kt │ │ │ │ │ ├── HanimeDownloadingRvAdapter.kt │ │ │ │ │ ├── HanimeMyListVideoAdapter.kt │ │ │ │ │ ├── HanimePreviewNewsRvAdapter.kt │ │ │ │ │ ├── HanimePreviewTourRvAdapter.kt │ │ │ │ │ ├── HanimeSearchHistoryRvAdapter.kt │ │ │ │ │ ├── HanimeUpdateRvAdapter.kt │ │ │ │ │ ├── HanimeUpdatedRvAdapter.kt │ │ │ │ │ ├── HanimeVideoRvAdapter.kt │ │ │ │ │ ├── PlaylistRvAdapter.kt │ │ │ │ │ ├── RvWrapper.kt │ │ │ │ │ ├── SharedHKeyframesRvAdapter.kt │ │ │ │ │ ├── SuperResolutionAdapter.kt │ │ │ │ │ ├── VideoColumnTitleAdapter.kt │ │ │ │ │ ├── VideoCommentRvAdapter.kt │ │ │ │ │ ├── VideoSpeedAdapter.kt │ │ │ │ │ └── WatchHistoryRvAdapter.kt │ │ │ │ ├── fragment/ │ │ │ │ │ ├── IToolbarFragment.kt │ │ │ │ │ ├── LoginNeededFragmentMixin.kt │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── DownloadFragment.kt │ │ │ │ │ │ ├── HomePageFragment.kt │ │ │ │ │ │ ├── MyFavVideoFragment.kt │ │ │ │ │ │ ├── MyPlaylistFragment.kt │ │ │ │ │ │ ├── MyWatchLaterFragment.kt │ │ │ │ │ │ ├── WatchHistoryFragment.kt │ │ │ │ │ │ └── download/ │ │ │ │ │ │ ├── DownloadedFragment.kt │ │ │ │ │ │ └── DownloadingFragment.kt │ │ │ │ │ ├── search/ │ │ │ │ │ │ ├── HCheckBoxFragment.kt │ │ │ │ │ │ ├── HMultiChoicesDialog.kt │ │ │ │ │ │ ├── HTimePickerDialog.kt │ │ │ │ │ │ └── SearchOptionsPopupFragment.kt │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── DownloadSettingsFragment.kt │ │ │ │ │ │ ├── HKeyframeSettingsFragment.kt │ │ │ │ │ │ ├── HKeyframesFragment.kt │ │ │ │ │ │ ├── HomeSettingsFragment.kt │ │ │ │ │ │ ├── NetworkSettingsFragment.kt │ │ │ │ │ │ ├── PlayerSettingsFragment.kt │ │ │ │ │ │ └── SharedHKeyframesFragment.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── ChildCommentPopupFragment.kt │ │ │ │ │ ├── CommentFragment.kt │ │ │ │ │ └── VideoIntroductionFragment.kt │ │ │ │ ├── popup/ │ │ │ │ │ ├── CoilImageLoader.kt │ │ │ │ │ ├── HTimePickerPopup.kt │ │ │ │ │ └── ReplyPopup.kt │ │ │ │ ├── view/ │ │ │ │ │ ├── BlurTransformation.kt │ │ │ │ │ ├── CenterLinearLayoutManager.kt │ │ │ │ │ ├── CollapsibleTags.kt │ │ │ │ │ ├── HOptionChip.kt │ │ │ │ │ ├── HanimeSearchBar.kt │ │ │ │ │ ├── HorizontalNestedScrollView.kt │ │ │ │ │ ├── LinearSmoothToStartScroller.kt │ │ │ │ │ ├── PlaylistHeader.kt │ │ │ │ │ ├── funcbar/ │ │ │ │ │ │ ├── Hanidapter.kt │ │ │ │ │ │ ├── Hanidock.kt │ │ │ │ │ │ ├── Hanidokitem.kt │ │ │ │ │ │ └── Hanidontroller.kt │ │ │ │ │ ├── pref/ │ │ │ │ │ │ ├── HPrivacyPreference.kt │ │ │ │ │ │ └── MaterialDialogPreference.kt │ │ │ │ │ └── video/ │ │ │ │ │ ├── HJzvdStd.kt │ │ │ │ │ ├── HMediaKernel.kt │ │ │ │ │ ├── HanimeDataSource.kt │ │ │ │ │ └── IMedia.kt │ │ │ │ └── viewmodel/ │ │ │ │ ├── AppViewModel.kt │ │ │ │ ├── CommentViewModel.kt │ │ │ │ ├── DownloadViewModel.kt │ │ │ │ ├── IHCsrfToken.kt │ │ │ │ ├── MainViewModel.kt │ │ │ │ ├── MyListViewModel.kt │ │ │ │ ├── PreviewCommentPrefetcher.kt │ │ │ │ ├── PreviewViewModel.kt │ │ │ │ ├── SearchViewModel.kt │ │ │ │ ├── SettingsViewModel.kt │ │ │ │ ├── VideoViewModel.kt │ │ │ │ └── mylist/ │ │ │ │ ├── FavSubViewModel.kt │ │ │ │ ├── PlaylistSubViewModel.kt │ │ │ │ ├── SubscriptionSubViewModel.kt │ │ │ │ └── WatchLaterSubViewModel.kt │ │ │ ├── util/ │ │ │ │ ├── Adapters.kt │ │ │ │ ├── AlertDialogs.kt │ │ │ │ ├── Animations.kt │ │ │ │ ├── AnimeShaders.kt │ │ │ │ ├── Colors.kt │ │ │ │ ├── Cookies.kt │ │ │ │ ├── Extend.kt │ │ │ │ ├── Files.kt │ │ │ │ ├── Firebases.kt │ │ │ │ ├── GridSpacingDecoration.kt │ │ │ │ ├── HImageMeower.kt │ │ │ │ ├── MediaUtils.kt │ │ │ │ ├── Networks.kt │ │ │ │ ├── Parcels.kt │ │ │ │ ├── Permissions.kt │ │ │ │ ├── Platform.kt │ │ │ │ ├── Preferences.kt │ │ │ │ ├── TextViews.kt │ │ │ │ ├── Versions.kt │ │ │ │ └── Views.kt │ │ │ └── worker/ │ │ │ ├── HUpdateWorker.kt │ │ │ ├── HanimeDownloadManager.kt │ │ │ ├── HanimeDownloadManagerV2.kt │ │ │ ├── HanimeDownloadWorker.kt │ │ │ └── WorkerMixin.kt │ │ └── res/ │ │ ├── anim/ │ │ │ ├── fade_in.xml │ │ │ ├── fade_out.xml │ │ │ ├── slide_in_from_bottom.xml │ │ │ └── slide_out_to_bottom.xml │ │ ├── drawable/ │ │ │ ├── baseline_add_24.xml │ │ │ ├── baseline_add_link_24.xml │ │ │ ├── baseline_advanced_search_24.xml │ │ │ ├── baseline_arrow_forward_ios_24.xml │ │ │ ├── baseline_bug_report_24.xml │ │ │ ├── baseline_data_usage_24.xml │ │ │ ├── baseline_dns_24.xml │ │ │ ├── baseline_edit_24.xml │ │ │ ├── baseline_error_outline_24.xml │ │ │ ├── baseline_format_list_bulleted_24.xml │ │ │ ├── baseline_forum_24.xml │ │ │ ├── baseline_h_24.xml │ │ │ ├── baseline_keyboard_arrow_down_24.xml │ │ │ ├── baseline_keyboard_arrow_up_24.xml │ │ │ ├── baseline_link_24.xml │ │ │ ├── baseline_more_horiz_24.xml │ │ │ ├── baseline_refresh_24.xml │ │ │ ├── baseline_remove_circle_24.xml │ │ │ ├── baseline_simp_to_trad_24.xml │ │ │ ├── baseline_sort_24.xml │ │ │ ├── gradient_black80_transparent_270.xml │ │ │ ├── gradient_black_transparent_90.xml │ │ │ ├── ic_baseline_access_time_24.xml │ │ │ ├── ic_baseline_arrow_back_24.xml │ │ │ ├── ic_baseline_arrow_forward_24.xml │ │ │ ├── ic_baseline_cancel_24.xml │ │ │ ├── ic_baseline_check_circle_24.xml │ │ │ ├── ic_baseline_checklist_24.xml │ │ │ ├── ic_baseline_clear_all_24.xml │ │ │ ├── ic_baseline_close_24.xml │ │ │ ├── ic_baseline_comment_24.xml │ │ │ ├── ic_baseline_delete_24.xml │ │ │ ├── ic_baseline_download_24.xml │ │ │ ├── ic_baseline_favorite_24.xml │ │ │ ├── ic_baseline_favorite_border_24.xml │ │ │ ├── ic_baseline_help_24.xml │ │ │ ├── ic_baseline_history_24.xml │ │ │ ├── ic_baseline_home_24.xml │ │ │ ├── ic_baseline_info_24.xml │ │ │ ├── ic_baseline_language_24.xml │ │ │ ├── ic_baseline_list_24.xml │ │ │ ├── ic_baseline_menu_24.xml │ │ │ ├── ic_baseline_more_time_24.xml │ │ │ ├── ic_baseline_newspaper_24.xml │ │ │ ├── ic_baseline_pause_24.xml │ │ │ ├── ic_baseline_pause_24_tintwhite.xml │ │ │ ├── ic_baseline_play_arrow_24.xml │ │ │ ├── ic_baseline_play_arrow_24_tintwhite.xml │ │ │ ├── ic_baseline_play_circle_outline_24.xml │ │ │ ├── ic_baseline_reply_24.xml │ │ │ ├── ic_baseline_search_24.xml │ │ │ ├── ic_baseline_send_24.xml │ │ │ ├── ic_baseline_settings_24.xml │ │ │ ├── ic_baseline_share_24.xml │ │ │ ├── ic_baseline_tag_24.xml │ │ │ ├── ic_baseline_thumb_down_alt_24.xml │ │ │ ├── ic_baseline_thumb_down_off_alt_24.xml │ │ │ ├── ic_baseline_thumb_up_alt_24.xml │ │ │ ├── ic_baseline_thumb_up_off_alt_24.xml │ │ │ ├── ic_baseline_update_24.xml │ │ │ ├── ic_baseline_watch_later_24.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_outline_watch_later_24.xml │ │ │ ├── line_divider.xml │ │ │ ├── menu_24px.xml │ │ │ ├── open_in_new_24px.xml │ │ │ ├── outline_home_24.xml │ │ │ ├── pause_circle_24px.xml │ │ │ ├── pip_24px.xml │ │ │ ├── play_circle_24px.xml │ │ │ ├── scaled_added_time.xml │ │ │ ├── screenshot_frame_2_24px.xml │ │ │ ├── search_bar.xml │ │ │ ├── shape_download_func_bar.xml │ │ │ ├── shape_preview_button_left.xml │ │ │ ├── shape_preview_button_right.xml │ │ │ ├── shape_reply_show_bottom_dialog.xml │ │ │ ├── shape_tag_selector.xml │ │ │ ├── shape_title_mask.xml │ │ │ ├── shape_title_mask_black.xml │ │ │ └── translated_border.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ ├── activity_download.xml │ │ │ ├── activity_login.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_preview.xml │ │ │ ├── activity_preview_comment.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_settings.xml │ │ │ ├── activity_video.xml │ │ │ ├── base_column_title.xml │ │ │ ├── dialog_apply_deep_links.xml │ │ │ ├── dialog_login.xml │ │ │ ├── dialog_modify_h_keyframe.xml │ │ │ ├── dialog_modify_h_keyframes.xml │ │ │ ├── dialog_playlist_modify_edit_text.xml │ │ │ ├── dialog_proxy.xml │ │ │ ├── fragment_comment.xml │ │ │ ├── fragment_h_keyframes.xml │ │ │ ├── fragment_home_page.xml │ │ │ ├── fragment_list_only.xml │ │ │ ├── fragment_page_list.xml │ │ │ ├── fragment_playlist.xml │ │ │ ├── fragment_tab_view_pager_only.xml │ │ │ ├── fragment_tag_selector.xml │ │ │ ├── fragment_video_introduction.xml │ │ │ ├── item_h_keyframe.xml │ │ │ ├── item_h_keyframes.xml │ │ │ ├── item_h_subscription.xml │ │ │ ├── item_hanidock.xml │ │ │ ├── item_hanime_downloaded.xml │ │ │ ├── item_hanime_downloading.xml │ │ │ ├── item_hanime_preview_news.xml │ │ │ ├── item_hanime_preview_news_pic.xml │ │ │ ├── item_hanime_preview_news_v2.xml │ │ │ ├── item_hanime_updated.xml │ │ │ ├── item_hanime_updating.xml │ │ │ ├── item_hanime_video.xml │ │ │ ├── item_hanime_video_simplified.xml │ │ │ ├── item_playlist.xml │ │ │ ├── item_preview_tour_simplified.xml │ │ │ ├── item_rv_wrapper.xml │ │ │ ├── item_search_history.xml │ │ │ ├── item_shared_h_keyframes.xml │ │ │ ├── item_tag_chip.xml │ │ │ ├── item_tag_chip_group.xml │ │ │ ├── item_video_column_title.xml │ │ │ ├── item_video_comment.xml │ │ │ ├── item_video_introduction.xml │ │ │ ├── item_video_tag_chip.xml │ │ │ ├── item_watch_history.xml │ │ │ ├── jz_layout_speed.xml │ │ │ ├── layout_collapsible_tag.xml │ │ │ ├── layout_empty_view.xml │ │ │ ├── layout_hanidock.xml │ │ │ ├── layout_hanime_search_bar.xml │ │ │ ├── layout_header_h_keyframes.xml │ │ │ ├── layout_jzvd_with_speed.xml │ │ │ ├── layout_playlist_header.xml │ │ │ ├── layout_playlist_header_v2.xml │ │ │ ├── layout_rv_scrollbars.xml │ │ │ ├── nav_header_ability.xml │ │ │ ├── pop_up_ext_h_time_picker.xml │ │ │ ├── pop_up_fragment_child_comment.xml │ │ │ ├── pop_up_fragment_search_options.xml │ │ │ ├── pop_up_hanime_search_tag.xml │ │ │ ├── pop_up_hanime_time_picker.xml │ │ │ └── pop_up_reply.xml │ │ ├── layout-sw600dp/ │ │ │ ├── activity_main.xml │ │ │ └── fragment_home_page.xml │ │ ├── menu/ │ │ │ ├── menu_downloaded_toolbar.xml │ │ │ ├── menu_downloading_toolbar.xml │ │ │ ├── menu_h_keyframes_toolbar.xml │ │ │ ├── menu_main_bnv.xml │ │ │ ├── menu_main_nv.xml │ │ │ ├── menu_main_rail_nv.xml │ │ │ ├── menu_main_toolbar.xml │ │ │ ├── menu_my_list_toolbar.xml │ │ │ ├── menu_playlist_toolbar.xml │ │ │ ├── menu_preview_toolbar.xml │ │ │ ├── menu_search_toolbar.xml │ │ │ └── menu_watch_history_toolbar.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── navigation/ │ │ │ ├── nav_main.xml │ │ │ └── nav_settings.xml │ │ ├── values/ │ │ │ ├── arrays.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ids.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── values-en/ │ │ │ └── strings.xml │ │ ├── values-night/ │ │ │ └── themes.xml │ │ ├── values-zh-rCN/ │ │ │ └── strings.xml │ │ └── xml/ │ │ ├── backup_rules.xml │ │ ├── data_extraction_rules.xml │ │ ├── file_paths.xml │ │ ├── locales_config.xml │ │ ├── settings_download.xml │ │ ├── settings_h_keyframe.xml │ │ ├── settings_home.xml │ │ ├── settings_network.xml │ │ └── settings_player.xml │ └── test/ │ └── java/ │ └── com/ │ └── yenaly/ │ └── han1meviewer/ │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ └── src/ │ └── main/ │ └── java/ │ └── Config.kt ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── yenaly_libs/ ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src/ ├── androidTest/ │ └── java/ │ └── com/ │ └── yenaly/ │ └── yenaly_libs/ │ └── ExampleInstrumentedTest.kt ├── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── yenaly/ │ │ └── yenaly_libs/ │ │ ├── ActivityManager.kt │ │ ├── SingletonHolder.kt │ │ ├── base/ │ │ │ ├── IViewBinding.kt │ │ │ ├── YenalyActivity.kt │ │ │ ├── YenalyApplication.kt │ │ │ ├── YenalyBottomSheetDialogFragment.kt │ │ │ ├── YenalyCrashHandler.kt │ │ │ ├── YenalyFragment.kt │ │ │ ├── YenalyInitializer.kt │ │ │ ├── YenalyViewModel.kt │ │ │ ├── dialog/ │ │ │ │ └── YenalyCrashDialogActivity.kt │ │ │ ├── frame/ │ │ │ │ ├── FrameActivity.kt │ │ │ │ └── FrameFragment.kt │ │ │ ├── preference/ │ │ │ │ ├── LongClickablePreference.kt │ │ │ │ ├── LongClickableSwitchPreference.kt │ │ │ │ └── MaterialSwitchPreference.kt │ │ │ ├── settings/ │ │ │ │ ├── YenalySettingsActivity.kt │ │ │ │ └── YenalySettingsFragment.kt │ │ │ └── view/ │ │ │ ├── NestedScrollableHost.kt │ │ │ └── RecyclerViewAtViewPager2.kt │ │ └── utils/ │ │ ├── ActivityResultUtil.kt │ │ ├── AppUtil.kt │ │ ├── ArrayUtil.kt │ │ ├── Base64Util.kt │ │ ├── ClipboardUtil.kt │ │ ├── ContextUtil.kt │ │ ├── DeviceUtil.kt │ │ ├── FileUtil.kt │ │ ├── ImageUtil.kt │ │ ├── LanguageHelper.kt │ │ ├── LogUtil.kt │ │ ├── OrientationManager.kt │ │ ├── ResourceUtil.kt │ │ ├── ShareUtil.kt │ │ ├── SharedPreferencesUtil.kt │ │ ├── SingleFlowLaunch.kt │ │ ├── SnackBarUtil.kt │ │ ├── SystemStatusUtil.kt │ │ ├── TextUtil.kt │ │ ├── ToastUtil.kt │ │ ├── UnicodeUtil.kt │ │ ├── UriUtil.kt │ │ ├── _AesUtil.kt │ │ ├── _GsonUtil.kt │ │ ├── _IntentUtil.kt │ │ ├── _LazyUtil.kt │ │ ├── span/ │ │ │ ├── SpannedTextGenerator.kt │ │ │ ├── YenalyImageSpan.kt │ │ │ └── YenalyQuoteSpan.kt │ │ └── view/ │ │ ├── AppBarLayoutStateChangeListener.kt │ │ ├── BottomNavViewMediator.kt │ │ ├── BottomNavViewUtil.kt │ │ ├── BottomNavigationViewMediator.kt │ │ ├── ClickUtil.kt │ │ ├── EditTextUtil.kt │ │ ├── SimpleBottomNavViewMediator.kt │ │ ├── SimpleFragmentStateAdapter.kt │ │ ├── TabLayoutUtil.kt │ │ ├── ViewPagerUtil.kt │ │ ├── ViewUtil.kt │ │ └── YenalyHideBottomViewOnScrollBehavior.kt │ └── res/ │ ├── anim/ │ │ ├── yenaly_bottom_to_top_in.xml │ │ ├── yenaly_bottom_to_top_out.xml │ │ ├── yenaly_top_to_bottom_in.xml │ │ └── yenaly_top_to_bottom_out.xml │ ├── layout/ │ │ ├── yenaly_activity_crash_dialog.xml │ │ ├── yenaly_activity_settings.xml │ │ ├── yenaly_dialog_loading.xml │ │ └── yenaly_preference_switch_widget.xml │ ├── values/ │ │ ├── ids.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── xml/ │ └── http_network_config.xml └── test/ └── java/ └── com/ └── yenaly/ └── yenaly_libs/ └── UtilUnitTest.kt