├── .gitignore ├── README.md ├── Screenshots ├── 20220602221408.jpg ├── 20220602221412.jpg ├── 20220602221416.jpg ├── 20220602221420.jpg ├── 20220602221425.jpg ├── 20220602221427.jpg ├── 20220602224006.jpg ├── Screenshot_20190625-120013.jpg ├── Screenshot_20190625-120028.jpg ├── Screenshot_20190625-120049.jpg ├── Screenshot_20190625-120542.jpg ├── Screenshot_20190625-123854.jpg ├── Screenshot_20190917-104645.jpg ├── Screenshot_20190917-105318.jpg ├── Screenshot_20190917-105335.jpg ├── Screenshot_20190917-105353.jpg ├── Screenshot_20190917-105417.jpg ├── Screenshot_20201230-110506_副本.jpg ├── Screenshot_20210329-102404.jpg ├── 下载列表.jpg ├── 分类.jpg ├── 历史记录.jpg ├── 我的.jpg ├── 搜索.jpg ├── 播放界面.jpg ├── 番剧详情.jpg ├── 追番列表.jpg └── 首页.jpg ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── libs │ ├── bcprov-jdk14-138.jar │ ├── commons-codec-1.12.jar │ ├── nanohttpd-2.3.1.jar │ └── servlet-api.jar │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── easygo.json │ ├── ic_launcher-playstore.png │ ├── java │ └── my │ │ └── project │ │ └── sakuraproject │ │ ├── adapter │ │ ├── AnimeDescDetailsAdapter.java │ │ ├── AnimeDescDramaAdapter.java │ │ ├── AnimeDescMultiRecommendAdapter.java │ │ ├── AnimeListAdapter.java │ │ ├── DownloadDataListAdapter.java │ │ ├── DownloadDramaAdapter.java │ │ ├── DownloadListAdapter.java │ │ ├── DramaAdapter.java │ │ ├── FavoriteListAdapter.java │ │ ├── HistoryListAdapter.java │ │ ├── HomeAdapter.java │ │ ├── HomeBannerAdapter.java │ │ ├── HomeHeaderAdapter.java │ │ ├── HomeItemAdapter.java │ │ ├── LogAdapter.java │ │ ├── MainAdapter.java │ │ ├── MyFragmentAdapter.java │ │ ├── RankListAdapter.java │ │ ├── SourceAdapter.java │ │ ├── UpdateListAdapter.java │ │ ├── WeekAdapter.java │ │ └── WeekFragmentAdapter.java │ │ ├── api │ │ └── Api.java │ │ ├── application │ │ └── Sakura.java │ │ ├── bean │ │ ├── AnimeDescDetailsBean.java │ │ ├── AnimeDescListBean.java │ │ ├── AnimeDescRecommendBean.java │ │ ├── AnimeDramasBean.java │ │ ├── AnimeListBean.java │ │ ├── AnimeUpdateBean.java │ │ ├── AnimeUpdateInfoBean.java │ │ ├── DownloadBean.java │ │ ├── DownloadDataBean.java │ │ ├── DownloadDramaBean.java │ │ ├── DownloadEvent.java │ │ ├── Event.java │ │ ├── HistoryBean.java │ │ ├── HomeBean.java │ │ ├── HomeHeaderBean.java │ │ ├── HomeWekBean.java │ │ ├── ImomoeVideoUrlBean.java │ │ ├── LogBean.java │ │ ├── MainBean.java │ │ ├── Refresh.java │ │ ├── RefreshDownloadData.java │ │ ├── SiliSiliRankBean.java │ │ ├── SourceBean.java │ │ ├── TagBean.java │ │ ├── UpdateImgBean.java │ │ └── YhdmVideoUrlBean.java │ │ ├── cling │ │ ├── Config.java │ │ ├── Intents.java │ │ ├── adapter │ │ │ └── DevicesAdapter.java │ │ ├── control │ │ │ ├── ClingPlayControl.java │ │ │ ├── IPlayControl.java │ │ │ ├── ISubscriptionControl.java │ │ │ ├── SubscriptionControl.java │ │ │ └── callback │ │ │ │ ├── ControlCallback.java │ │ │ │ └── ControlReceiveCallback.java │ │ ├── entity │ │ │ ├── BaseClingResponse.java │ │ │ ├── ClingControlPoint.java │ │ │ ├── ClingDevice.java │ │ │ ├── ClingDeviceList.java │ │ │ ├── ClingPositionResponse.java │ │ │ ├── ClingResponse.java │ │ │ ├── ClingVolumeResponse.java │ │ │ ├── DLANPlayState.java │ │ │ ├── IControlPoint.java │ │ │ ├── IDevice.java │ │ │ └── IResponse.java │ │ ├── listener │ │ │ ├── BrowseRegistryListener.java │ │ │ └── DeviceListChangedListener.java │ │ ├── service │ │ │ ├── ClingUpnpService.java │ │ │ ├── SystemService.java │ │ │ ├── callback │ │ │ │ ├── AVTransportSubscriptionCallback.java │ │ │ │ ├── BaseSubscriptionCallback.java │ │ │ │ └── RenderingControlSubscriptionCallback.java │ │ │ └── manager │ │ │ │ ├── ClingManager.java │ │ │ │ ├── DeviceManager.java │ │ │ │ ├── IClingManager.java │ │ │ │ ├── IDLNAManager.java │ │ │ │ ├── IDeviceManager.java │ │ │ │ └── IUpnpServiceManager.java │ │ ├── ui │ │ │ └── DLNAActivity.java │ │ └── util │ │ │ ├── ClingUtils.java │ │ │ ├── ListUtils.java │ │ │ └── OtherUtils.java │ │ ├── config │ │ ├── AboutEnum.java │ │ ├── M3U8DownloadConfig.java │ │ ├── OpenSourceEnum.java │ │ └── SettingEnum.java │ │ ├── custom │ │ ├── BiliDanmukuParser.java │ │ ├── CustomDanmakuParser.java │ │ ├── CustomLoadMoreView.java │ │ ├── CustomToast.java │ │ ├── FixFragmentNavigator.java │ │ ├── GridSpaceItemDecoration.java │ │ ├── InsideScrollView.java │ │ ├── LongPressEventView.java │ │ ├── MyButton.java │ │ ├── MySwipeRefreshLayout.java │ │ ├── MyTextView.java │ │ ├── ScrollAwareBehavior.java │ │ └── VpSwipeRefreshLayout.java │ │ ├── database │ │ └── DatabaseUtil.java │ │ ├── main │ │ ├── about │ │ │ ├── AboutActivity.java │ │ │ └── OpenSourceActivity.java │ │ ├── animeList │ │ │ ├── AnimeListActivity.java │ │ │ ├── AnimeListContract.java │ │ │ ├── AnimeListModel.java │ │ │ └── AnimeListPresenter.java │ │ ├── animeTopic │ │ │ ├── AnimeTopicActivity.java │ │ │ ├── AnimeTopicContract.java │ │ │ ├── AnimeTopicModel.java │ │ │ └── AnimeTopicPresenter.java │ │ ├── base │ │ │ ├── BaseActivity.java │ │ │ ├── BaseLoadDataCallback.java │ │ │ ├── BaseModel.java │ │ │ ├── BasePresenter.java │ │ │ ├── BaseView.java │ │ │ ├── LazyFragment.java │ │ │ └── Presenter.java │ │ ├── desc │ │ │ ├── DescActivity.java │ │ │ ├── DescContract.java │ │ │ ├── DescModel.java │ │ │ └── DescPresenter.java │ │ ├── home │ │ │ ├── HomeActivity.java │ │ │ ├── HomeContract.java │ │ │ ├── HomeModel.java │ │ │ ├── HomePresenter.java │ │ │ ├── MainActivity.java │ │ │ └── fragment │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── HomeFragment.java │ │ │ │ └── MyFragment.java │ │ ├── my │ │ │ ├── DownloadActivity.java │ │ │ ├── DownloadContract.java │ │ │ ├── DownloadDataActivity.java │ │ │ ├── DownloadDataContract.java │ │ │ ├── DownloadDataModel.java │ │ │ ├── DownloadDataPresenter.java │ │ │ ├── DownloadModel.java │ │ │ ├── DownloadPresenter.java │ │ │ ├── FavoriteActivity.java │ │ │ ├── FavoriteContract.java │ │ │ ├── FavoriteModel.java │ │ │ ├── FavoritePresenter.java │ │ │ ├── HistoryActivity.java │ │ │ ├── HistoryContract.java │ │ │ ├── HistoryModel.java │ │ │ ├── HistoryPresenter.java │ │ │ ├── MyActivity.java │ │ │ ├── UpdateImgContract.java │ │ │ ├── UpdateImgModel.java │ │ │ ├── UpdateImgPresenter.java │ │ │ └── fragment │ │ │ │ ├── DownloadFragment.java │ │ │ │ ├── FavoriteFragment.java │ │ │ │ ├── HistoryFragment.java │ │ │ │ └── MyLazyFragment.java │ │ ├── player │ │ │ ├── BasePlayerActivity.java │ │ │ ├── JZExoPlayer.java │ │ │ ├── JZMediaIjk.java │ │ │ ├── JZPlayer.java │ │ │ ├── LocalPlayerActivity.java │ │ │ ├── LocalVideoDLNAServer.java │ │ │ └── PlayerActivity.java │ │ ├── rank │ │ │ ├── RankActivity.java │ │ │ ├── RankContract.java │ │ │ ├── RankModel.java │ │ │ └── RankPresenter.java │ │ ├── search │ │ │ ├── SearchActivity.java │ │ │ ├── SearchContract.java │ │ │ ├── SearchModel.java │ │ │ └── SearchPresenter.java │ │ ├── setting │ │ │ └── SettingActivity.java │ │ ├── start │ │ │ └── StartActivity.java │ │ ├── tag │ │ │ ├── TagActivity.java │ │ │ ├── TagContract.java │ │ │ ├── TagModel.java │ │ │ └── TagPresenter.java │ │ ├── updateList │ │ │ ├── UpdateListActivity.java │ │ │ ├── UpdateListContract.java │ │ │ ├── UpdateListModel.java │ │ │ └── UpdateListPresenter.java │ │ ├── video │ │ │ ├── DanmuContract.java │ │ │ ├── DanmuModel.java │ │ │ ├── DanmuPresenter.java │ │ │ ├── DownloadVideoContract.java │ │ │ ├── DownloadVideoModel.java │ │ │ ├── DownloadVideoPresenter.java │ │ │ ├── VideoContract.java │ │ │ ├── VideoModel.java │ │ │ └── VideoPresenter.java │ │ ├── webview │ │ │ └── normal │ │ │ │ ├── DefaultNormalWebActivity.java │ │ │ │ └── NormalWebView.java │ │ └── week │ │ │ ├── WeekActivity.java │ │ │ └── WeekFragment.java │ │ ├── net │ │ ├── DownloadUtil.java │ │ ├── HttpGet.java │ │ ├── HttpPost.java │ │ └── SSLSocketClient.java │ │ ├── services │ │ ├── DLNAService.java │ │ └── DownloadService.java │ │ ├── sniffing │ │ ├── DefaultCallback.java │ │ ├── DefaultFilter.java │ │ ├── DefaultUICallback.java │ │ ├── LogUtil.java │ │ ├── SniffingCallback.java │ │ ├── SniffingFilter.java │ │ ├── SniffingUICallback.java │ │ ├── SniffingVideo.java │ │ ├── Util.java │ │ ├── node │ │ │ ├── Node.java │ │ │ └── NodeHelper.java │ │ └── web │ │ │ ├── SniffingUtil.java │ │ │ ├── SniffingWebChromeClient.java │ │ │ ├── SniffingWebView.java │ │ │ └── SniffingWebViewClient.java │ │ └── util │ │ ├── CrashHandler.java │ │ ├── CropUtil.java │ │ ├── DigestUtils.java │ │ ├── DownloadNotification.java │ │ ├── ImomoeJsoupUtils.java │ │ ├── SharedPreferencesUtils.java │ │ ├── StatusBarUtil.java │ │ ├── SwipeBackLayoutUtil.java │ │ ├── UpdateMessageDigestInputStream.java │ │ ├── Utils.java │ │ ├── VideoUtils.java │ │ └── YhdmJsoupUtils.java │ └── res │ ├── anim │ ├── activity_in.xml │ ├── activity_out.xml │ ├── fab_in.xml │ ├── fab_out.xml │ ├── fade_in.xml │ ├── fade_out.xml │ ├── my_fab_in.xml │ └── my_fab_out.xml │ ├── color │ ├── bottom_view_color.xml │ ├── color_state_menu_navi.xml │ ├── log_text_input_layout_stroke_color.xml │ ├── m3_textfield_label_color.xml │ ├── mtrl_btn_stroke_color_selector.xml │ ├── mtrl_navigation_item_background_color.xml │ ├── rank_text_input_layout_stroke_color.xml │ ├── ripple_color.xml │ └── text_input_layout_stroke_color.xml │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable-xhdpi │ ├── baseline_account_circle_black_48dp.png │ ├── baseline_account_circle_white_48dp.png │ ├── baseline_airplay_white_48dp.png │ ├── baseline_all_inclusive_black_48dp.png │ ├── baseline_all_inclusive_white_48dp.png │ ├── baseline_android_white_48dp.png │ ├── baseline_arrow_back_white_48dp.png │ ├── baseline_arrow_drop_down_white_48dp.png │ ├── baseline_arrow_forward_white_48dp.png │ ├── baseline_arrow_right_alt_white_48dp.png │ ├── baseline_bug_report_white_48dp.png │ ├── baseline_calendar_month_white_48dp.png │ ├── baseline_clear_all_white_48dp.png │ ├── baseline_close_white_48dp.png │ ├── baseline_cloud_download_white_48dp.png │ ├── baseline_code_white_48dp.png │ ├── baseline_dashboard_white_48dp.png │ ├── baseline_delete_forever_black_48dp.png │ ├── baseline_delete_forever_white_48dp.png │ ├── baseline_delete_white_48dp.png │ ├── baseline_download_white_48dp.png │ ├── baseline_error_white_48dp.png │ ├── baseline_explore_white_48dp.png │ ├── baseline_fast_forward_white_48dp.png │ ├── baseline_fast_rewind_white_48dp.png │ ├── baseline_favorite_border_white_48dp.png │ ├── baseline_favorite_white_48dp.png │ ├── baseline_filter_white_48dp.png │ ├── baseline_first_page_white_48dp.png │ ├── baseline_history_white_48dp.png │ ├── baseline_home_white_48dp.png │ ├── baseline_insert_chart_outlined_black_48dp.png │ ├── baseline_insert_chart_outlined_white_48dp.png │ ├── baseline_keyboard_arrow_right_white_48dp.png │ ├── baseline_language_white_48dp.png │ ├── baseline_last_page_white_48dp.png │ ├── baseline_movie_white_48dp.png │ ├── baseline_open_in_new_white_48dp.png │ ├── baseline_pause_white_48dp.png │ ├── baseline_person_white_48dp.png │ ├── baseline_phonelink_setup_white_48dp.png │ ├── baseline_picture_in_picture_alt_white_48dp.png │ ├── baseline_play_arrow_white_48dp.png │ ├── baseline_play_circle_filled_white_48dp.png │ ├── baseline_play_disabled_white_48dp.png │ ├── baseline_replay_white_48dp.png │ ├── baseline_save_alt_white_48dp.png │ ├── baseline_search_black_48dp.png │ ├── baseline_search_white_48dp.png │ ├── baseline_settings_black_48dp.png │ ├── baseline_style_black_48dp.png │ ├── baseline_style_white_48dp.png │ ├── baseline_subscriptions_white_48dp.png │ ├── baseline_sync_alt_black_48dp.png │ ├── baseline_sync_alt_white_48dp.png │ ├── baseline_update_white_48dp.png │ ├── baseline_view_selections_white_48dp.png │ ├── baseline_visibility_black_48dp.png │ ├── danmu.png │ ├── default_bg.jpg │ ├── error.9.png │ ├── github.png │ ├── has_update.png │ ├── ic_action_dock.png │ ├── ic_add.png │ ├── ic_dmdy.png │ ├── ic_dmfl.png │ ├── ic_dmzt.png │ ├── ic_jcb.png │ ├── ic_keyboard_arrow_down_white_48dp.png │ ├── ic_loyalty_white_48dp.png │ ├── ic_ondemand_video_white_48dp.png │ ├── ic_settings_white_48dp.png │ ├── ic_shortcut_dashboard.png │ ├── ic_shortcut_favorite.png │ ├── ic_shortcut_file_download.png │ ├── ic_shortcut_history.png │ ├── ic_shortcut_person.png │ ├── ic_shortcut_search.png │ ├── ic_xfsjb.png │ ├── light_img.jpg │ ├── loading_light.png │ ├── loading_night.png │ ├── logo.jpg │ ├── night_img.jpg │ ├── outline_account_circle_white_48dp.png │ ├── outline_cloud_sync_white_48dp.png │ ├── outline_done_white_48dp.png │ ├── outline_movie_filter_white_48dp.png │ ├── outline_reply_white_48dp.png │ ├── outline_sort_by_alpha_white_48dp.png │ ├── outline_subtitles_off_white_48dp.png │ ├── outline_subtitles_white_48dp.png │ ├── outline_video_library_white_48dp.png │ ├── parsing_error_bg.9.png │ ├── player_btn_locking.png │ ├── player_btn_locking_pre.png │ └── player_seek_img.png │ ├── drawable │ ├── baseline_history_toggle_off_24.xml │ ├── baseline_http_24.xml │ ├── baseline_lens_blur_24.xml │ ├── baseline_tips_and_updates_24.xml │ ├── change_drama_bg.xml │ ├── custom_popup_background.xml │ ├── desc_gradient.xml │ ├── desc_state_bg.xml │ ├── desc_stroke.xml │ ├── desc_update_time_gradient.xml │ ├── download_img_gradient.xml │ ├── ic_baseline_format_list_numbered_24.xml │ ├── ic_baseline_star_rate_24.xml │ ├── ic_baseline_swap_vert_24.xml │ ├── ic_baseline_whatshot_24.xml │ ├── ic_launcher_background.xml │ ├── imomoe_bg.xml │ ├── item_number_bg.xml │ ├── long_press_bg.xml │ ├── mali_tag_bg.xml │ ├── my_item_gradient.xml │ ├── pg.xml │ ├── progress_bg.xml │ ├── rank_one.xml │ ├── rank_other.xml │ ├── rank_three.xml │ ├── rank_two.xml │ ├── round_local_fire_department_24.xml │ ├── round_star_24.xml │ ├── score_bg.xml │ ├── sniffer_bg.xml │ ├── toast_style_default.xml │ ├── toast_style_error.xml │ ├── toast_style_success.xml │ ├── toast_style_warning.xml │ └── yhdm_bg.xml │ ├── layout │ ├── activity_about.xml │ ├── activity_anime.xml │ ├── activity_api.xml │ ├── activity_default_webview_normal.xml │ ├── activity_desc.xml │ ├── activity_dlna.xml │ ├── activity_home.xml │ ├── activity_main.xml │ ├── activity_my.xml │ ├── activity_my_list.xml │ ├── activity_player.xml │ ├── activity_rank.xml │ ├── activity_setting.xml │ ├── activity_source.xml │ ├── activity_start.xml │ ├── activity_tag.xml │ ├── activity_week.xml │ ├── base_emnty_view.xml │ ├── base_error_view.xml │ ├── content_home.xml │ ├── custom_download_notification.xml │ ├── custom_jz_layout_std.xml │ ├── custom_load_more_view.xml │ ├── custom_notification.xml │ ├── custom_toast.xml │ ├── dialog_chip.xml │ ├── dialog_domain.xml │ ├── dialog_download_drama.xml │ ├── dialog_drama.xml │ ├── dialog_mali_tag.xml │ ├── dialog_proress.xml │ ├── dialog_query_danmu.xml │ ├── dialog_remove_download.xml │ ├── dialog_tag.xml │ ├── dialog_update_log.xml │ ├── dialog_webview.xml │ ├── fragment_home.xml │ ├── fragment_my.xml │ ├── fragment_my_new.xml │ ├── fragment_week.xml │ ├── item_anime.xml │ ├── item_banner.xml │ ├── item_banner_item.xml │ ├── item_btn.xml │ ├── item_desc_details.xml │ ├── item_desc_drama.xml │ ├── item_desc_recommend.xml │ ├── item_device.xml │ ├── item_download.xml │ ├── item_download_data.xml │ ├── item_head.xml │ ├── item_history.xml │ ├── item_home.xml │ ├── item_home_data.xml │ ├── item_home_header.xml │ ├── item_home_header_data.xml │ ├── item_home_week.xml │ ├── item_log.xml │ ├── item_main.xml │ ├── item_mali_tag_item.xml │ ├── item_rank.xml │ ├── item_source.xml │ ├── item_spinner_item.xml │ ├── item_tag_head.xml │ ├── item_tag_item.xml │ ├── item_topic.xml │ ├── item_update.xml │ ├── list_item.xml │ ├── nav_header_home.xml │ └── toolbar.xml │ ├── menu │ ├── about_menu.xml │ ├── activity_home_drawer.xml │ ├── bottom_app_bar.xml │ ├── bottom_nav_menu.xml │ ├── delete_menu.xml │ ├── download_menu.xml │ ├── favorite_menu.xml │ ├── home_menu.xml │ ├── main_menu.xml │ └── search_menu.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_round.png │ ├── values-night │ └── colors.xml │ ├── values-v21 │ └── styles.xml │ ├── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── ic_launcher_background.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── file_path.xml │ └── shortcuts.xml ├── build.gradle ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches/build_file_checksums.ser 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | .DS_Store 9 | /build 10 | /captures 11 | .externalNativeBuild 12 | -------------------------------------------------------------------------------- /Screenshots/20220602221408.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221408.jpg -------------------------------------------------------------------------------- /Screenshots/20220602221412.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221412.jpg -------------------------------------------------------------------------------- /Screenshots/20220602221416.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221416.jpg -------------------------------------------------------------------------------- /Screenshots/20220602221420.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221420.jpg -------------------------------------------------------------------------------- /Screenshots/20220602221425.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221425.jpg -------------------------------------------------------------------------------- /Screenshots/20220602221427.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602221427.jpg -------------------------------------------------------------------------------- /Screenshots/20220602224006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/20220602224006.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190625-120013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190625-120013.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190625-120028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190625-120028.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190625-120049.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190625-120049.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190625-120542.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190625-120542.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190625-123854.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190625-123854.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190917-104645.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190917-104645.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190917-105318.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190917-105318.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190917-105335.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190917-105335.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190917-105353.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190917-105353.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20190917-105417.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20190917-105417.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20201230-110506_副本.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20201230-110506_副本.jpg -------------------------------------------------------------------------------- /Screenshots/Screenshot_20210329-102404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/Screenshot_20210329-102404.jpg -------------------------------------------------------------------------------- /Screenshots/下载列表.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/下载列表.jpg -------------------------------------------------------------------------------- /Screenshots/分类.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/分类.jpg -------------------------------------------------------------------------------- /Screenshots/历史记录.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/历史记录.jpg -------------------------------------------------------------------------------- /Screenshots/我的.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/我的.jpg -------------------------------------------------------------------------------- /Screenshots/搜索.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/搜索.jpg -------------------------------------------------------------------------------- /Screenshots/播放界面.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/播放界面.jpg -------------------------------------------------------------------------------- /Screenshots/番剧详情.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/番剧详情.jpg -------------------------------------------------------------------------------- /Screenshots/追番列表.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/追番列表.jpg -------------------------------------------------------------------------------- /Screenshots/首页.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/Screenshots/首页.jpg -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/src/libs/bcprov-jdk14-138.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/libs/bcprov-jdk14-138.jar -------------------------------------------------------------------------------- /app/src/libs/commons-codec-1.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/libs/commons-codec-1.12.jar -------------------------------------------------------------------------------- /app/src/libs/nanohttpd-2.3.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/libs/nanohttpd-2.3.1.jar -------------------------------------------------------------------------------- /app/src/libs/servlet-api.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/libs/servlet-api.jar -------------------------------------------------------------------------------- /app/src/main/assets/easygo.json: -------------------------------------------------------------------------------- 1 | { 2 | "easyGoVersion": "1.0", 3 | "client": "my.project.sakuraproject", 4 | "logicEntities": [ 5 | { 6 | "head": { 7 | "function": "magicwindow", 8 | "required": "true" 9 | }, 10 | "body": { 11 | "mode": "0", 12 | "activityPairs": [ 13 | { 14 | "from": "my.project.sakuraproject.main.home.MainActivity", 15 | "to": "*" 16 | } 17 | ], 18 | "UX": { 19 | "supportRotationUxCompat": "false", 20 | "isDraggable": "false" 21 | } 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/AnimeDescDetailsAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.annotation.Nullable; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | import com.google.android.material.button.MaterialButton; 10 | 11 | import java.util.List; 12 | 13 | import my.project.sakuraproject.R; 14 | import my.project.sakuraproject.bean.AnimeDescDetailsBean; 15 | 16 | /** 17 | * 播放列表适配器 18 | * @deprecated 播放列表相同布局统一使用 {@link DramaAdapter} 19 | */ 20 | @Deprecated 21 | public class AnimeDescDetailsAdapter extends BaseQuickAdapter { 22 | private Context context; 23 | 24 | public AnimeDescDetailsAdapter(Context context, @Nullable List data) { 25 | super(R.layout.item_desc_details, data); 26 | this.context = context; 27 | } 28 | 29 | @Override 30 | protected void convert(final BaseViewHolder helper, AnimeDescDetailsBean item) { 31 | MaterialButton materialButton = helper.getView(R.id.tag_group); 32 | helper.setText(R.id.tag_group, item.getTitle()); 33 | materialButton.setTextColor(item.isSelected() ? context.getResources().getColor(R.color.tabSelectedTextColor) : context.getResources().getColor(R.color.text_color_primary)); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/AnimeDescDramaAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.annotation.Nullable; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | import com.google.android.material.button.MaterialButton; 10 | 11 | import java.util.List; 12 | 13 | import my.project.sakuraproject.R; 14 | import my.project.sakuraproject.bean.AnimeDescDetailsBean; 15 | 16 | /** 17 | * 展开播放列表适配器 18 | * @deprecated 播放列表相同布局统一使用 {@link DramaAdapter} 19 | */ 20 | @Deprecated 21 | public class AnimeDescDramaAdapter extends BaseQuickAdapter { 22 | private Context context; 23 | 24 | public AnimeDescDramaAdapter(Context context, @Nullable List data) { 25 | super(R.layout.item_desc_drama, data); 26 | this.context = context; 27 | } 28 | 29 | @Override 30 | protected void convert(final BaseViewHolder helper, AnimeDescDetailsBean item) { 31 | MaterialButton materialButton = helper.getView(R.id.tag_group); 32 | helper.setText(R.id.tag_group, item.getTitle()); 33 | materialButton.setTextColor(item.isSelected() ? context.getResources().getColor(R.color.tabSelectedTextColor) : context.getResources().getColor(R.color.text_color_primary)); 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/AnimeDescMultiRecommendAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | import androidx.annotation.Nullable; 7 | 8 | import com.chad.library.adapter.base.BaseQuickAdapter; 9 | import com.chad.library.adapter.base.BaseViewHolder; 10 | 11 | import java.util.List; 12 | 13 | import my.project.sakuraproject.R; 14 | import my.project.sakuraproject.bean.AnimeDescRecommendBean; 15 | import my.project.sakuraproject.util.Utils; 16 | 17 | /** 18 | * 多季、相关推荐适配器 19 | */ 20 | public class AnimeDescMultiRecommendAdapter extends BaseQuickAdapter { 21 | private Context context; 22 | 23 | public AnimeDescMultiRecommendAdapter(Context context, @Nullable List data) { 24 | super(R.layout.item_desc_recommend, data); 25 | this.context = context; 26 | } 27 | 28 | @Override 29 | protected void convert(final BaseViewHolder helper, AnimeDescRecommendBean item) { 30 | String imgUrl = item.getImg(); 31 | ImageView imageView = helper.getView(R.id.img); 32 | imageView.setTag(R.id.imageid, imgUrl); 33 | Utils.setCardDefaultBg(context, helper.getView(R.id.card_view), helper.getView(R.id.title)); 34 | Utils.setDefaultImage(context, item.getImg(), item.getUrl(), imageView, true, helper.getView(R.id.card_view), helper.getView(R.id.title)); 35 | helper.setText(R.id.title, item.getTitle()); 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/AnimeListAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import my.project.sakuraproject.R; 12 | import my.project.sakuraproject.bean.AnimeListBean; 13 | import my.project.sakuraproject.util.Utils; 14 | 15 | /** 16 | * 番剧列表适配器 17 | */ 18 | public class AnimeListAdapter extends BaseQuickAdapter { 19 | private Context context; 20 | 21 | public AnimeListAdapter(Context context, List list, boolean isTopic) { 22 | super(isTopic ? R.layout.item_topic : R.layout.item_anime, list); 23 | this.context = context; 24 | } 25 | 26 | @Override 27 | protected void convert(BaseViewHolder helper, AnimeListBean item) { 28 | String imgUrl = item.getImg(); 29 | ImageView imageView = helper.getView(R.id.img); 30 | imageView.setTag(R.id.imageid, imgUrl); 31 | Utils.setCardDefaultBg(context, helper.getView(R.id.card_view), helper.getView(R.id.title)); 32 | Utils.setDefaultImage(context, item.getImg(), item.getUrl(), imageView, true, helper.getView(R.id.card_view), helper.getView(R.id.title)); 33 | helper.setText(R.id.title, item.getTitle()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/DramaAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.annotation.Nullable; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | import com.google.android.material.button.MaterialButton; 10 | 11 | import java.util.List; 12 | 13 | import my.project.sakuraproject.R; 14 | import my.project.sakuraproject.bean.AnimeDescDetailsBean; 15 | 16 | /** 17 | * 播放器选集适配器 18 | */ 19 | public class DramaAdapter extends BaseQuickAdapter { 20 | private Context context; 21 | 22 | public DramaAdapter(Context context, @Nullable List data) { 23 | super(R.layout.item_desc_drama, data); 24 | this.context = context; 25 | } 26 | 27 | @Override 28 | protected void convert(final BaseViewHolder helper, AnimeDescDetailsBean item) { 29 | MaterialButton materialButton = helper.getView(R.id.tag_group); 30 | helper.setText(R.id.tag_group, item.getTitle()); 31 | materialButton.setTextColor(item.isSelected() ? context.getResources().getColor(R.color.tabSelectedTextColor) : context.getResources().getColor(R.color.text_color_primary)); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/HomeHeaderAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.BaseViewHolder; 7 | 8 | import java.util.List; 9 | 10 | import my.project.sakuraproject.R; 11 | import my.project.sakuraproject.bean.HomeHeaderBean; 12 | 13 | public class HomeHeaderAdapter extends BaseQuickAdapter { 14 | private Context context; 15 | public HomeHeaderAdapter(Context context, List data) { 16 | super(R.layout.item_home_header_data, data); 17 | this.context = context; 18 | } 19 | 20 | @Override 21 | protected void convert(BaseViewHolder helper, HomeHeaderBean.HeaderDataBean item) { 22 | helper.setBackgroundColor(R.id.root, context.getResources().getColor(R.color.window_bg)); 23 | helper.setText(R.id.title, item.getTitle()); 24 | helper.setTextColor(R.id.title, context.getResources().getColor(R.color.text_color_primary)); 25 | helper.setImageDrawable(R.id.img, context.getDrawable(item.getImg())); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/HomeItemAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | 10 | import java.util.List; 11 | 12 | import my.project.sakuraproject.R; 13 | import my.project.sakuraproject.bean.HomeBean; 14 | import my.project.sakuraproject.util.Utils; 15 | 16 | public class HomeItemAdapter extends BaseQuickAdapter { 17 | private Context context; 18 | 19 | public HomeItemAdapter(Context context, List data) { 20 | super(R.layout.item_home_data, data); 21 | this.context = context; 22 | } 23 | 24 | @Override 25 | protected void convert(BaseViewHolder helper, HomeBean.HomeItemBean item) { 26 | String imgUrl = item.getImg(); 27 | ImageView imageView = helper.getView(R.id.img); 28 | imageView.setTag(R.id.imageid, imgUrl); 29 | helper.getView(R.id.episodes).setVisibility(View.VISIBLE); 30 | helper.setText(R.id.update_time, item.getEpisodes().isEmpty() ? "NULL" : item.getEpisodes()); 31 | Utils.setCardDefaultBg(context, helper.getView(R.id.card_view), helper.getView(R.id.title)); 32 | Utils.setDefaultImage(context, item.getImg(), item.getUrl(), imageView, true, helper.getView(R.id.card_view), helper.getView(R.id.title)); 33 | helper.setText(R.id.title, item.getTitle()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/LogAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import com.chad.library.adapter.base.BaseQuickAdapter; 4 | import com.chad.library.adapter.base.BaseViewHolder; 5 | import com.google.android.material.textfield.TextInputLayout; 6 | 7 | import java.util.List; 8 | 9 | import my.project.sakuraproject.R; 10 | import my.project.sakuraproject.bean.LogBean; 11 | 12 | public class LogAdapter extends BaseQuickAdapter { 13 | public LogAdapter(List list) { 14 | super(R.layout.item_log, list); 15 | } 16 | 17 | @Override 18 | protected void convert(BaseViewHolder helper, LogBean item) { 19 | TextInputLayout textInputLayout = helper.getView(R.id.title_view); 20 | textInputLayout.setHint(item.getTitle()); 21 | textInputLayout.getEditText().setText(item.getDesc()); 22 | /*helper.setText(R.id.title, item.getTitle()); 23 | helper.setText(R.id.desc, item.getDesc());*/ 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/SourceAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import com.chad.library.adapter.base.BaseQuickAdapter; 4 | import com.chad.library.adapter.base.BaseViewHolder; 5 | 6 | import java.util.List; 7 | 8 | import my.project.sakuraproject.R; 9 | import my.project.sakuraproject.bean.SourceBean; 10 | 11 | public class SourceAdapter extends BaseQuickAdapter { 12 | 13 | public SourceAdapter(List list) { 14 | super(R.layout.item_source, list); 15 | } 16 | 17 | @Override 18 | protected void convert(BaseViewHolder helper, SourceBean item) { 19 | helper.setText(R.id.title, item.getTitle()); 20 | helper.setText(R.id.author, item.getAuthor()); 21 | helper.setText(R.id.desc, item.getDesc()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/UpdateListAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.BaseViewHolder; 7 | 8 | import java.util.List; 9 | 10 | import my.project.sakuraproject.R; 11 | import my.project.sakuraproject.bean.AnimeUpdateBean; 12 | 13 | /** 14 | * 番剧列表适配器 15 | */ 16 | public class UpdateListAdapter extends BaseQuickAdapter { 17 | private Context context; 18 | 19 | public UpdateListAdapter(Context context, List list) { 20 | super(R.layout.item_update, list); 21 | this.context = context; 22 | } 23 | 24 | @Override 25 | protected void convert(BaseViewHolder helper, AnimeUpdateBean item) { 26 | helper.setText(R.id.number, item.getNumber()); 27 | helper.setText(R.id.title, item.getTitle()); 28 | helper.setText(R.id.region, item.getRegion()); 29 | helper.setText(R.id.episodes, item.getEpisodes()); 30 | helper.setText(R.id.update_time, item.getUpdateTime()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/adapter/WeekAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.cardview.widget.CardView; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | 10 | import java.util.List; 11 | 12 | import my.project.sakuraproject.R; 13 | import my.project.sakuraproject.bean.HomeWekBean; 14 | 15 | public class WeekAdapter extends BaseQuickAdapter { 16 | private Context context; 17 | 18 | public WeekAdapter(Context context, List data) { 19 | super(R.layout.item_home_week, data); 20 | this.context = context; 21 | } 22 | 23 | @Override 24 | protected void convert(BaseViewHolder helper, HomeWekBean item) { 25 | // helper.addOnClickListener(R.id.drama); 26 | CardView cardView = helper.getView(R.id.card_view); 27 | cardView.setCardBackgroundColor(context.getResources().getColor(R.color.window_bg)); 28 | helper.setText(R.id.title, item.getTitle()); 29 | helper.setTextColor(R.id.title, context.getResources().getColor(R.color.text_color_primary)); 30 | helper.setText(R.id.drama, item.getDrama()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/AnimeDescListBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | public class AnimeDescListBean implements Serializable { 8 | // 番剧多季集合 9 | private List animeDescMultiBeans = new ArrayList<>(); 10 | // 番剧推荐集合 11 | private List animeDescRecommendBeans = new ArrayList<>(); 12 | // 播放列表集合 13 | private List animeDramasBeans = new ArrayList<>(); 14 | 15 | public List getAnimeDramasBeans() { 16 | return animeDramasBeans; 17 | } 18 | 19 | public void setAnimeDramasBeans(List animeDramasBeans) { 20 | this.animeDramasBeans = animeDramasBeans; 21 | } 22 | 23 | public List getAnimeDescMultiBeans() { 24 | return animeDescMultiBeans; 25 | } 26 | 27 | public void setAnimeDescMultiBeans(List animeDescMultiBeans) { 28 | this.animeDescMultiBeans = animeDescMultiBeans; 29 | } 30 | 31 | public List getAnimeDescRecommendBeans() { 32 | return animeDescRecommendBeans; 33 | } 34 | 35 | public void setAnimeDescRecommendBeans(List animeDescRecommendBeans) { 36 | this.animeDescRecommendBeans = animeDescRecommendBeans; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/AnimeDescRecommendBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | public class AnimeDescRecommendBean { 3 | // 标题 4 | private String title; 5 | // 图片 6 | private String img; 7 | // 链接 8 | private String url; 9 | 10 | public AnimeDescRecommendBean(String title, String img, String url) { 11 | this.title = title; 12 | this.img = img; 13 | this.url = url; 14 | } 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public String getImg() { 25 | return img; 26 | } 27 | 28 | public void setImg(String img) { 29 | this.img = img; 30 | } 31 | 32 | public String getUrl() { 33 | return url; 34 | } 35 | 36 | public void setUrl(String url) { 37 | this.url = url; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/AnimeDramasBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | import java.util.List; 4 | 5 | public class AnimeDramasBean { 6 | private String listTitle; 7 | private List animeDescDetailsBeanList; 8 | 9 | public String getListTitle() { 10 | return listTitle; 11 | } 12 | 13 | public void setListTitle(String listTitle) { 14 | this.listTitle = listTitle; 15 | } 16 | 17 | public List getAnimeDescDetailsBeanList() { 18 | return animeDescDetailsBeanList; 19 | } 20 | 21 | public void setAnimeDescDetailsBeanList(List animeDescDetailsBeanList) { 22 | this.animeDescDetailsBeanList = animeDescDetailsBeanList; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/AnimeUpdateBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | /** 4 | * 最近更新列表实体 5 | */ 6 | public class AnimeUpdateBean { 7 | private String number; 8 | private String region; 9 | private String title; 10 | private String episodes; 11 | private String url; 12 | private String updateTime; 13 | 14 | public String getNumber() { 15 | return number; 16 | } 17 | 18 | public void setNumber(String number) { 19 | this.number = number; 20 | } 21 | 22 | public String getRegion() { 23 | return region; 24 | } 25 | 26 | public void setRegion(String region) { 27 | this.region = region; 28 | } 29 | 30 | public String getTitle() { 31 | return title; 32 | } 33 | 34 | public void setTitle(String title) { 35 | this.title = title; 36 | } 37 | 38 | public String getEpisodes() { 39 | return episodes; 40 | } 41 | 42 | public void setEpisodes(String episodes) { 43 | this.episodes = episodes; 44 | } 45 | 46 | public String getUrl() { 47 | return url; 48 | } 49 | 50 | public void setUrl(String url) { 51 | this.url = url; 52 | } 53 | 54 | public String getUpdateTime() { 55 | return updateTime; 56 | } 57 | 58 | public void setUpdateTime(String updateTime) { 59 | this.updateTime = updateTime; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/AnimeUpdateInfoBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 动漫更新列表实体 7 | */ 8 | public class AnimeUpdateInfoBean implements Serializable { 9 | private String title; // 番剧标题 10 | private String playNumber; // 最新一集播放剧集地址 11 | private int source; // 来源 0 yhdm 1 imomoe 12 | 13 | public String getTitle() { 14 | return title; 15 | } 16 | 17 | public void setTitle(String title) { 18 | this.title = title; 19 | } 20 | 21 | public String getPlayNumber() { 22 | return playNumber; 23 | } 24 | 25 | public void setPlayNumber(String playNumber) { 26 | this.playNumber = playNumber; 27 | } 28 | 29 | public int getSource() { 30 | return source; 31 | } 32 | 33 | public void setSource(int source) { 34 | this.source = source; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/DownloadEvent.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class DownloadEvent { 4 | private String title; 5 | private String drama; 6 | private String filePath; 7 | private long fileSize; 8 | 9 | public DownloadEvent(String title, String drama, String filePath, long fileSize) { 10 | this.title = title; 11 | this.drama = drama; 12 | this.filePath = filePath; 13 | this.fileSize = fileSize; 14 | } 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public String getDrama() { 25 | return drama; 26 | } 27 | 28 | public void setDrama(String drama) { 29 | this.drama = drama; 30 | } 31 | 32 | public String getFilePath() { 33 | return filePath; 34 | } 35 | 36 | public void setFilePath(String filePath) { 37 | this.filePath = filePath; 38 | } 39 | 40 | public long getFileSize() { 41 | return fileSize; 42 | } 43 | 44 | public void setFileSize(long fileSize) { 45 | this.fileSize = fileSize; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/Event.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class Event { 4 | private boolean isImomoe; 5 | private int nowSource; 6 | private int clickIndex; 7 | 8 | public Event() { 9 | 10 | } 11 | 12 | public Event(boolean isImomoe, int nowSource, int clickIndex) { 13 | this.isImomoe = isImomoe; 14 | this.nowSource = nowSource; 15 | this.clickIndex = clickIndex; 16 | } 17 | 18 | public boolean isImomoe() { 19 | return isImomoe; 20 | } 21 | 22 | public void setImomoe(boolean imomoe) { 23 | isImomoe = imomoe; 24 | } 25 | 26 | public int getNowSource() { 27 | return nowSource; 28 | } 29 | 30 | public void setNowSource(int nowSource) { 31 | this.nowSource = nowSource; 32 | } 33 | 34 | public int getClickIndex() { 35 | return clickIndex; 36 | } 37 | 38 | public void setClickIndex(int clickIndex) { 39 | this.clickIndex = clickIndex; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/HomeWekBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class HomeWekBean { 4 | private String title; 5 | private String url; 6 | private String drama; 7 | private String dramaUrl; 8 | 9 | public HomeWekBean(String title, String url, String drama, String dramaUrl) { 10 | this.title = title; 11 | this.url = url; 12 | this.drama = drama; 13 | this.dramaUrl = dramaUrl; 14 | } 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public String getUrl() { 25 | return url; 26 | } 27 | 28 | public void setUrl(String url) { 29 | this.url = url; 30 | } 31 | 32 | public String getDrama() { 33 | return drama; 34 | } 35 | 36 | public void setDrama(String drama) { 37 | this.drama = drama; 38 | } 39 | 40 | public String getDramaUrl() { 41 | return dramaUrl; 42 | } 43 | 44 | public void setDramaUrl(String dramaUrl) { 45 | this.dramaUrl = dramaUrl; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/ImomoeVideoUrlBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | public class ImomoeVideoUrlBean implements Serializable { 6 | private boolean isHttp; 7 | private String vidOrUrl; 8 | private String param; 9 | 10 | public boolean isHttp() { 11 | return isHttp; 12 | } 13 | 14 | public void setHttp(boolean http) { 15 | isHttp = http; 16 | } 17 | 18 | public String getVidOrUrl() { 19 | return vidOrUrl; 20 | } 21 | 22 | public void setVidOrUrl(String vidOrUrl) { 23 | this.vidOrUrl = vidOrUrl; 24 | } 25 | 26 | public String getParam() { 27 | return param; 28 | } 29 | 30 | public void setParam(String param) { 31 | this.param = param; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/LogBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class LogBean { 4 | private String title; 5 | private String desc; 6 | 7 | public LogBean(){} 8 | 9 | public LogBean(String title, String desc){ 10 | this.title = title; 11 | this.desc = desc; 12 | } 13 | 14 | public String getTitle() { 15 | return title; 16 | } 17 | 18 | public void setTitle(String title) { 19 | this.title = title; 20 | } 21 | 22 | public String getDesc() { 23 | return desc; 24 | } 25 | 26 | public void setDesc(String desc) { 27 | this.desc = desc; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/MainBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class MainBean { 4 | private String title; 5 | private int type; 6 | private int img; 7 | private int number; 8 | 9 | public MainBean(String title, int type, int img, int number) { 10 | this.type = type; 11 | this.title = title; 12 | this.img = img; 13 | this.number = number; 14 | } 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public int getType() { 25 | return type; 26 | } 27 | 28 | public void setType(int type) { 29 | this.type = type; 30 | } 31 | 32 | public int getImg() { 33 | return img; 34 | } 35 | 36 | public void setImg(int img) { 37 | this.img = img; 38 | } 39 | 40 | public int getNumber() { 41 | return number; 42 | } 43 | 44 | public void setNumber(int number) { 45 | this.number = number; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/Refresh.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class Refresh { 4 | private int index; // 0 刷新首页 1 刷新收藏 2 刷新历史记录 3 刷新下载记录 5 | 6 | public Refresh(int index) { 7 | this.index = index; 8 | } 9 | 10 | public int getIndex() { 11 | return index; 12 | } 13 | 14 | public void setIndex(int index) { 15 | this.index = index; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/RefreshDownloadData.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class RefreshDownloadData { 4 | private String id; 5 | private long playPosition; 6 | private long videoDuration; 7 | 8 | public RefreshDownloadData(String id, long playPosition, long videoDuration) { 9 | this.id = id; 10 | this.playPosition = playPosition; 11 | this.videoDuration = videoDuration; 12 | } 13 | 14 | public String getId() { 15 | return id; 16 | } 17 | 18 | public void setId(String id) { 19 | this.id = id; 20 | } 21 | 22 | public long getPlayPosition() { 23 | return playPosition; 24 | } 25 | 26 | public void setPlayPosition(long playPosition) { 27 | this.playPosition = playPosition; 28 | } 29 | 30 | public long getVideoDuration() { 31 | return videoDuration; 32 | } 33 | 34 | public void setVideoDuration(long videoDuration) { 35 | this.videoDuration = videoDuration; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/SourceBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class SourceBean { 4 | private String title; 5 | private String author; 6 | private String desc; 7 | private String url; 8 | 9 | public SourceBean(String title, String author, String desc, String url) { 10 | this.title = title; 11 | this.author = author; 12 | this.desc = desc; 13 | this.url = url; 14 | } 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public String getAuthor() { 25 | return author; 26 | } 27 | 28 | public void setAuthor(String author) { 29 | this.author = author; 30 | } 31 | 32 | public String getDesc() { 33 | return desc; 34 | } 35 | 36 | public void setDesc(String desc) { 37 | this.desc = desc; 38 | } 39 | 40 | public String getUrl() { 41 | return url; 42 | } 43 | 44 | public void setUrl(String url) { 45 | this.url = url; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/UpdateImgBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | public class UpdateImgBean { 4 | private String oldImgUrl; 5 | private String descUrl; 6 | 7 | public UpdateImgBean(String oldImgUrl, String descUrl) { 8 | this.oldImgUrl = oldImgUrl; 9 | this.descUrl = descUrl; 10 | } 11 | 12 | public String getOldImgUrl() { 13 | return oldImgUrl; 14 | } 15 | 16 | public void setOldImgUrl(String oldImgUrl) { 17 | this.oldImgUrl = oldImgUrl; 18 | } 19 | 20 | public String getDescUrl() { 21 | return descUrl; 22 | } 23 | 24 | public void setDescUrl(String descUrl) { 25 | this.descUrl = descUrl; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/bean/YhdmVideoUrlBean.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | @Deprecated 6 | public class YhdmVideoUrlBean implements Serializable { 7 | private boolean isHttp; 8 | private String vidOrUrl; 9 | 10 | public boolean isHttp() { 11 | return isHttp; 12 | } 13 | 14 | public void setHttp(boolean http) { 15 | isHttp = http; 16 | } 17 | 18 | public String getVidOrUrl() { 19 | return vidOrUrl; 20 | } 21 | 22 | public void setVidOrUrl(String vidOrUrl) { 23 | this.vidOrUrl = vidOrUrl; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/adapter/DevicesAdapter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.ArrayAdapter; 8 | import android.widget.TextView; 9 | 10 | import org.fourthline.cling.model.meta.Device; 11 | 12 | import my.project.sakuraproject.R; 13 | import my.project.sakuraproject.cling.entity.ClingDevice; 14 | 15 | /** 16 | * 说明: 17 | * 作者:zhouzhan 18 | * 日期:17/6/28 15:50 19 | */ 20 | 21 | public class DevicesAdapter extends ArrayAdapter { 22 | private Context context; 23 | private LayoutInflater mInflater; 24 | 25 | public DevicesAdapter(Context context) { 26 | super(context, 0); 27 | this.context = context; 28 | mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 29 | } 30 | 31 | @Override 32 | public View getView(int position, View convertView, ViewGroup parent) { 33 | if (convertView == null) 34 | convertView = mInflater.inflate(R.layout.item_device, null); 35 | ClingDevice item = getItem(position); 36 | if (item == null || item.getDevice() == null) { 37 | return convertView; 38 | } 39 | Device device = item.getDevice(); 40 | TextView textView = convertView.findViewById(R.id.title); 41 | textView.setText(device.getDetails().getFriendlyName()); 42 | return convertView; 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/control/ISubscriptionControl.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.control; 2 | 3 | import android.content.Context; 4 | 5 | import my.project.sakuraproject.cling.entity.IDevice; 6 | 7 | 8 | /** 9 | * 说明:tv端回调 10 | * 作者:zhouzhan 11 | * 日期:17/7/21 16:38 12 | */ 13 | 14 | public interface ISubscriptionControl { 15 | 16 | /** 17 | * 监听投屏端 AVTransport 回调 18 | */ 19 | void registerAVTransport(IDevice device, Context context); 20 | 21 | /** 22 | * 监听投屏端 RenderingControl 回调 23 | */ 24 | void registerRenderingControl(IDevice device, Context context); 25 | 26 | /** 27 | * 销毁: 释放资源 28 | */ 29 | void destroy(); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/control/callback/ControlCallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.control.callback; 2 | 3 | import my.project.sakuraproject.cling.entity.IResponse; 4 | 5 | /** 6 | * 说明:设备控制操作 回调 7 | * 作者:zhouzhan 8 | * 日期:17/7/4 10:56 9 | */ 10 | 11 | public interface ControlCallback { 12 | 13 | void success(IResponse response); 14 | 15 | void fail(IResponse response); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/control/callback/ControlReceiveCallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.control.callback; 2 | 3 | 4 | import my.project.sakuraproject.cling.entity.IResponse; 5 | 6 | /** 7 | * 说明:手机端接收投屏端信息回调 8 | * 作者:zhouzhan 9 | * 日期:17/7/19 11:13 10 | */ 11 | 12 | public interface ControlReceiveCallback extends ControlCallback{ 13 | 14 | void receive(IResponse response); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/ClingControlPoint.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import org.fourthline.cling.controlpoint.ControlPoint; 4 | 5 | /** 6 | * 说明:cling 控制点实现类 7 | * 作者:zhouzhan 8 | * 日期:17/6/28 17:03 9 | */ 10 | 11 | public class ClingControlPoint implements IControlPoint { 12 | 13 | private static ClingControlPoint INSTANCE = null; 14 | private ControlPoint mControlPoint; 15 | 16 | private ClingControlPoint() { 17 | } 18 | 19 | public static ClingControlPoint getInstance() { 20 | if (INSTANCE == null) { 21 | INSTANCE = new ClingControlPoint(); 22 | } 23 | return INSTANCE; 24 | } 25 | 26 | @Override 27 | public ControlPoint getControlPoint() { 28 | return mControlPoint; 29 | } 30 | 31 | @Override 32 | public void setControlPoint(ControlPoint controlPoint) { 33 | mControlPoint = controlPoint; 34 | } 35 | 36 | @Override 37 | public void destroy() { 38 | mControlPoint = null; 39 | INSTANCE = null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/ClingDevice.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import org.fourthline.cling.model.meta.Device; 4 | 5 | /** 6 | * 说明: 7 | * 作者:zhouzhan 8 | * 日期:17/6/27 17:47 9 | */ 10 | 11 | public class ClingDevice implements IDevice { 12 | 13 | private Device mDevice; 14 | /** 是否已选中 */ 15 | private boolean isSelected; 16 | 17 | public ClingDevice(Device device) { 18 | this.mDevice = device; 19 | } 20 | 21 | @Override 22 | public Device getDevice() { 23 | return mDevice; 24 | } 25 | 26 | public boolean isSelected() { 27 | return isSelected; 28 | } 29 | 30 | public void setSelected(boolean selected) { 31 | isSelected = selected; 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/ClingPositionResponse.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import org.fourthline.cling.model.action.ActionInvocation; 4 | import org.fourthline.cling.model.message.UpnpResponse; 5 | import org.fourthline.cling.support.model.PositionInfo; 6 | 7 | /** 8 | * 说明:获取播放进度回调结果 9 | * 作者:zhouzhan 10 | * 日期:17/7/19 12:26 11 | */ 12 | 13 | public class ClingPositionResponse extends BaseClingResponse implements IResponse { 14 | 15 | 16 | public ClingPositionResponse(ActionInvocation actionInvocation) { 17 | super(actionInvocation); 18 | } 19 | 20 | public ClingPositionResponse(ActionInvocation actionInvocation, UpnpResponse operation, String defaultMsg) { 21 | super(actionInvocation, operation, defaultMsg); 22 | } 23 | 24 | public ClingPositionResponse(ActionInvocation actionInvocation, PositionInfo info) { 25 | super(actionInvocation, info); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/ClingResponse.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import org.fourthline.cling.model.action.ActionInvocation; 4 | import org.fourthline.cling.model.message.UpnpResponse; 5 | 6 | /** 7 | * 说明:Cling 库中,控制操作返回结果 8 | * 作者:zhouzhan 9 | * 日期:17/7/4 10:50 10 | */ 11 | 12 | public class ClingResponse implements IResponse { 13 | 14 | private ActionInvocation mActionInvocation; 15 | private UpnpResponse operation; 16 | private String defaultMsg; 17 | 18 | /** 19 | * 控制操作成功 构造器 20 | * 21 | * @param actionInvocation cling action 调用 22 | */ 23 | public ClingResponse(ActionInvocation actionInvocation) { 24 | mActionInvocation = actionInvocation; 25 | } 26 | 27 | /** 28 | * 控制操作失败 构造器 29 | * 30 | * @param actionInvocation cling action 调用 31 | * @param operation 执行状态 32 | * @param defaultMsg 错误信息 33 | */ 34 | public ClingResponse(ActionInvocation actionInvocation, UpnpResponse operation, String defaultMsg) { 35 | mActionInvocation = actionInvocation; 36 | this.operation = operation; 37 | this.defaultMsg = defaultMsg; 38 | } 39 | 40 | @Override 41 | public ActionInvocation getResponse() { 42 | return null; 43 | } 44 | 45 | @Override 46 | public void setResponse(ActionInvocation response) { 47 | mActionInvocation = response; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/ClingVolumeResponse.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import org.fourthline.cling.model.action.ActionInvocation; 4 | import org.fourthline.cling.model.message.UpnpResponse; 5 | 6 | /** 7 | * 说明: 8 | * 作者:zhouzhan 9 | * 日期:17/7/19 16:22 10 | */ 11 | 12 | public class ClingVolumeResponse extends BaseClingResponse { 13 | 14 | 15 | public ClingVolumeResponse(ActionInvocation actionInvocation, UpnpResponse operation, String defaultMsg) { 16 | super(actionInvocation, operation, defaultMsg); 17 | } 18 | 19 | public ClingVolumeResponse(ActionInvocation actionInvocation, Integer info) { 20 | super(actionInvocation, info); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/DLANPlayState.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import androidx.annotation.IntDef; 7 | 8 | /** 9 | * 说明:连接设备状态 10 | * 作者:zhouzhan 11 | * 日期:17/7/10 17:21 12 | */ 13 | 14 | public class DLANPlayState { 15 | /** 播放状态 */ 16 | public static final int PLAY = 1; 17 | /** 暂停状态 */ 18 | public static final int PAUSE = 2; 19 | /** 停止状态 */ 20 | public static final int STOP = 3; 21 | /** 转菊花状态 */ 22 | public static final int BUFFER = 4; 23 | /** 投放失败 */ 24 | public static final int ERROR = 5; 25 | 26 | /** 设备状态 */ 27 | @IntDef({PLAY, PAUSE,STOP, BUFFER, ERROR}) 28 | @Retention(RetentionPolicy.SOURCE) 29 | public @interface DLANPlayStates {} 30 | 31 | 32 | // 以下不算设备状态, 只是常量 33 | /** 主动轮询获取播放进度(在远程设备不支持播放进度回传时使用) */ 34 | public static final int GET_POSITION_POLING = 6; 35 | /** 远程设备播放进度回传 */ 36 | public static final int POSITION_CALLBACK = 7; 37 | /** 投屏端播放完成 */ 38 | public static final int PLAY_COMPLETE = 8; 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/IControlPoint.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | /** 4 | * 说明:控制点 5 | * 作者:zhouzhan 6 | * 日期:17/6/27 17:47 7 | */ 8 | 9 | public interface IControlPoint { 10 | 11 | /** 12 | * @return 返回控制点 13 | */ 14 | T getControlPoint(); 15 | 16 | /** 17 | * 设置控制点 18 | * @param controlPoint 控制点 19 | */ 20 | void setControlPoint(T controlPoint); 21 | 22 | /** 23 | * 销毁 清空缓存 24 | */ 25 | void destroy(); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/IDevice.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | /** 4 | * 说明: 5 | * 作者:zhouzhan 6 | * 日期:17/6/27 17:47 7 | */ 8 | 9 | public interface IDevice { 10 | 11 | T getDevice(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/entity/IResponse.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.entity; 2 | 3 | /** 4 | * 说明:设备控制 返回结果 5 | * 作者:zhouzhan 6 | * 日期:17/7/4 10:50 7 | */ 8 | 9 | public interface IResponse { 10 | 11 | T getResponse(); 12 | 13 | void setResponse(T response); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/listener/DeviceListChangedListener.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.listener; 2 | 3 | import my.project.sakuraproject.cling.entity.IDevice; 4 | 5 | /** 6 | * 说明:设备状态改变监听接口 7 | * 作者:zhouzhan 8 | * 日期:17/6/30 11:09 9 | */ 10 | 11 | public interface DeviceListChangedListener { 12 | 13 | /** 14 | * 某设备被发现之后回调该方法 15 | * @param device 被发现的设备 16 | */ 17 | void onDeviceAdded(IDevice device); 18 | 19 | /** 20 | * 在已发现设备中 移除了某设备之后回调该接口 21 | * @param device 被移除的设备 22 | */ 23 | void onDeviceRemoved(IDevice device); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/service/manager/IClingManager.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.service.manager; 2 | 3 | 4 | import org.fourthline.cling.registry.Registry; 5 | 6 | import my.project.sakuraproject.cling.service.ClingUpnpService; 7 | 8 | /** 9 | * 说明: 10 | * 作者:zhouzhan 11 | * 日期:17/6/28 16:30 12 | */ 13 | 14 | public interface IClingManager extends IDLNAManager { 15 | 16 | void setUpnpService(ClingUpnpService upnpService); 17 | 18 | void setDeviceManager(IDeviceManager deviceManager); 19 | 20 | Registry getRegistry(); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/service/manager/IDLNAManager.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.service.manager; 2 | 3 | 4 | import android.content.Context; 5 | 6 | import java.util.Collection; 7 | 8 | import my.project.sakuraproject.cling.entity.IControlPoint; 9 | import my.project.sakuraproject.cling.entity.IDevice; 10 | 11 | /** 12 | * 说明: 13 | * 作者:zhouzhan 14 | * 日期:17/6/27 17:41 15 | */ 16 | 17 | public interface IDLNAManager { 18 | 19 | /** 20 | * 搜索所有的设备 21 | */ 22 | void searchDevices(); 23 | 24 | /** 25 | * 获取支持 Media 类型的设备 26 | * 27 | * @return 设备列表 28 | */ 29 | Collection getDmrDevices(); 30 | 31 | /** 32 | * 获取控制点 33 | * 34 | * @return 控制点 35 | */ 36 | IControlPoint getControlPoint(); 37 | 38 | /** 39 | * 获取选中的设备 40 | * 41 | * @return 选中的设备 42 | */ 43 | IDevice getSelectedDevice(); 44 | 45 | /** 46 | * 取消选中的设备 47 | */ 48 | void cleanSelectedDevice(); 49 | 50 | /** 51 | * 设置选中的设备 52 | * @param device 已选中设备 53 | */ 54 | void setSelectedDevice(IDevice device); 55 | 56 | /** 57 | * 监听投屏端 AVTransport 回调 58 | * @param context 用于接收到消息发广播 59 | */ 60 | void registerAVTransport(Context context); 61 | 62 | /** 63 | * 监听投屏端 RenderingControl 回调 64 | * @param context 用于接收到消息发广播 65 | */ 66 | void registerRenderingControl(Context context); 67 | 68 | /** 69 | * 销毁 70 | */ 71 | void destroy(); 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/service/manager/IDeviceManager.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.service.manager; 2 | 3 | import android.content.Context; 4 | 5 | import my.project.sakuraproject.cling.entity.IDevice; 6 | 7 | 8 | /** 9 | * 说明: 10 | * 作者:zhouzhan 11 | * 日期:17/7/21 16:34 12 | */ 13 | 14 | public interface IDeviceManager { 15 | 16 | /** 17 | * 获取选中设备 18 | */ 19 | IDevice getSelectedDevice(); 20 | 21 | /** 22 | * 设置选中设备 23 | */ 24 | void setSelectedDevice(IDevice selectedDevice); 25 | 26 | /** 27 | * 取消选中设备 28 | */ 29 | void cleanSelectedDevice(); 30 | 31 | /** 32 | * 监听投屏端 AVTransport 回调 33 | * @param context 用于接收到消息发广播 34 | */ 35 | void registerAVTransport(Context context); 36 | 37 | /** 38 | * 监听投屏端 RenderingControl 回调 39 | * @param context 用于接收到消息发广播 40 | */ 41 | void registerRenderingControl(Context context); 42 | 43 | /** 44 | * 销毁 45 | */ 46 | void destroy(); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/service/manager/IUpnpServiceManager.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.service.manager; 2 | 3 | import java.util.Collection; 4 | 5 | import my.project.sakuraproject.cling.entity.IControlPoint; 6 | import my.project.sakuraproject.cling.entity.IDevice; 7 | 8 | /** 9 | * 说明: 10 | * 作者:zhouzhan 11 | * 日期:17/6/27 17:41 12 | */ 13 | 14 | public interface IUpnpServiceManager { 15 | 16 | /** 17 | * 搜索所有的设备 18 | */ 19 | void searchDevices(); 20 | 21 | /** 22 | * 获取支持 Media 类型的设备 23 | * 24 | * @return 设备列表 25 | */ 26 | Collection getDmrDevices(); 27 | 28 | /** 29 | * 获取控制点 30 | * 31 | * @return 控制点 32 | */ 33 | IControlPoint getControlPoint(); 34 | 35 | /** 36 | * 获取选中的设备 37 | * 38 | * @return 选中的设备 39 | */ 40 | IDevice getSelectedDevice(); 41 | 42 | /** 43 | * 设置选中的设备 44 | * @param device 已选中设备 45 | */ 46 | void setSelectedDevice(IDevice device); 47 | 48 | /** 49 | * 销毁 50 | */ 51 | void destroy(); 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/cling/util/ListUtils.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.cling.util; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * 说明: 7 | * 作者:zhouzhan 8 | * 日期:17/6/28 16:54 9 | */ 10 | 11 | public class ListUtils { 12 | 13 | public static boolean isEmpty(Collection list){ 14 | return !(list != null && list.size() != 0); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/config/SettingEnum.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.config; 2 | 3 | public enum SettingEnum { 4 | VIDEO_PLAYER("请选择视频播放器", new String[]{"内置","外置"}), 5 | VIDEO_PLAYER_KERNEL( "请选择播放器内核", new String[]{"ExoPlayer", "IjkPlayer"}), 6 | CHECK_APP_UPDATE("启动时是否检查更新", new String[]{"开启", "关闭"}), 7 | CHECK_AMINE_UPDATE( "是否开启追番更新检测", new String[]{"开启", "关闭"}), 8 | VIDEO_PLAYER_DANMU( "是否开启播放器弹幕功能", new String[]{"开启", "关闭"}); 9 | 10 | private String dialogTitle; 11 | 12 | private String[] items; 13 | 14 | SettingEnum(String dialogTitle, String[] items) { 15 | this.dialogTitle = dialogTitle; 16 | this.items = items; 17 | } 18 | 19 | public String getDialogTitle() { 20 | return dialogTitle; 21 | } 22 | 23 | public String[] getItems() { 24 | return items; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/custom/CustomLoadMoreView.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.custom; 2 | 3 | import com.chad.library.adapter.base.loadmore.LoadMoreView; 4 | 5 | import my.project.sakuraproject.R; 6 | 7 | public class CustomLoadMoreView extends LoadMoreView { 8 | 9 | @Override 10 | public int getLayoutId() { return R.layout.custom_load_more_view; } 11 | 12 | @Override 13 | protected int getLoadingViewId() { 14 | return R.id.load_more_loading_view; 15 | } 16 | 17 | @Override 18 | protected int getLoadFailViewId() { 19 | return R.id.load_more_load_fail_view; 20 | } 21 | 22 | @Override 23 | protected int getLoadEndViewId() { return R.id.load_more_load_end_view; } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/custom/InsideScrollView.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.custom; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.MotionEvent; 6 | import android.widget.ScrollView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.annotation.Nullable; 10 | 11 | public class InsideScrollView extends ScrollView { 12 | public InsideScrollView(@NonNull Context context) { 13 | super(context); 14 | } 15 | 16 | public InsideScrollView(@NonNull Context context, @Nullable AttributeSet attrs) { 17 | super(context, attrs); 18 | } 19 | 20 | public InsideScrollView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 21 | super(context, attrs, defStyleAttr); 22 | } 23 | 24 | @Override 25 | public boolean onInterceptTouchEvent(MotionEvent ev) { 26 | //关键点在这 27 | getParent().requestDisallowInterceptTouchEvent(true); 28 | return super.onInterceptTouchEvent(ev); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/custom/MyButton.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.custom; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.util.AttributeSet; 6 | 7 | import com.google.android.material.button.MaterialButton; 8 | 9 | import androidx.annotation.NonNull; 10 | import androidx.annotation.Nullable; 11 | 12 | public class MyButton extends MaterialButton { 13 | 14 | public MyButton(@NonNull Context context) { super(context); } 15 | 16 | public MyButton(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } 17 | 18 | public MyButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } 19 | 20 | @Override 21 | protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); } 22 | 23 | @Override 24 | public void onWindowFocusChanged(boolean hasWindowFocus) { if(hasWindowFocus) super.onWindowFocusChanged(hasWindowFocus); } 25 | 26 | @Override 27 | public boolean isFocused() { return true; } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/custom/MyTextView.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.custom; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import androidx.annotation.Nullable; 7 | import androidx.appcompat.widget.AppCompatTextView; 8 | 9 | public class MyTextView extends AppCompatTextView { 10 | public MyTextView(Context context) { 11 | super(context); 12 | } 13 | 14 | public MyTextView(Context context, @Nullable AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 19 | super(context, attrs, defStyleAttr); 20 | } 21 | 22 | @Override 23 | public boolean isFocused() { 24 | return true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/animeList/AnimeListContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.animeList; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | import java.util.List; 5 | 6 | import my.project.sakuraproject.bean.AnimeListBean; 7 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 8 | import my.project.sakuraproject.main.base.BaseView; 9 | 10 | public interface AnimeListContract { 11 | interface Model { 12 | void getData(String url, int page, boolean isMain, boolean isMovie, boolean isImomoe, boolean isToptic, List siliParams, LoadDataCallback callback) throws UnsupportedEncodingException; 13 | 14 | void getData(String[] params, boolean isMain, LoadDataCallback callback); 15 | } 16 | 17 | interface View extends BaseView { 18 | void showSuccessView(boolean isMain, List list); 19 | 20 | void showErrorView(boolean isMain, String msg); 21 | 22 | void getPageCountSuccessView(int count); 23 | } 24 | 25 | interface LoadDataCallback extends BaseLoadDataCallback { 26 | void success(boolean isMain, List list); 27 | 28 | void error(boolean isMain, String msg); 29 | 30 | void pageCount(int count); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/animeTopic/AnimeTopicContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.animeTopic; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.AnimeListBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface AnimeTopicContract { 10 | interface Model { 11 | void getData(String url, int page, boolean isMain, LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessView(boolean isMain, List list); 16 | 17 | void showErrorView(boolean isMain, String msg); 18 | 19 | void getPageCountSuccessView(int count); 20 | } 21 | 22 | interface LoadDataCallback extends BaseLoadDataCallback { 23 | void success(boolean isMain, List list); 24 | 25 | void error(boolean isMain, String msg); 26 | 27 | void pageCount(int count); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/base/BaseLoadDataCallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.base; 2 | 3 | public interface BaseLoadDataCallback { 4 | void error(String msg); 5 | 6 | void log(String url); 7 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.base; 2 | 3 | public interface BasePresenter { 4 | void loadData(boolean isMain); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.base; 2 | 3 | public interface BaseView { 4 | //显示加载中视图 5 | void showLoadingView(); 6 | //显示加载失败视图 7 | void showLoadErrorView(String msg); 8 | //空布局 9 | void showEmptyVIew(); 10 | 11 | void showLog(String url); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/base/Presenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.base; 2 | 3 | import java.lang.ref.WeakReference; 4 | 5 | public class Presenter { 6 | //View的弱引用 7 | protected WeakReference mViewRef; 8 | 9 | /** 10 | * 构造函数 11 | * 12 | * @param view 需要关联的View 13 | */ 14 | public Presenter(V view) { 15 | //关联View 16 | attachView(view); 17 | } 18 | 19 | /** 20 | * 关联View 21 | * 22 | * @param view 需要关联的View 23 | */ 24 | public void attachView(V view) { 25 | mViewRef = new WeakReference<>(view); 26 | } 27 | 28 | /** 29 | * 取消关联的View 30 | */ 31 | public void detachView() { 32 | if (null != mViewRef) { 33 | mViewRef.clear(); 34 | } 35 | } 36 | 37 | /** 38 | * 获取将当前关联的View 39 | * 40 | * @return 当前关联的View 41 | */ 42 | public V getView() { 43 | if (null != mViewRef) { 44 | return mViewRef.get(); 45 | } 46 | return null; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/desc/DescContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.desc; 2 | 3 | import my.project.sakuraproject.bean.AnimeDescListBean; 4 | import my.project.sakuraproject.bean.AnimeListBean; 5 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 6 | import my.project.sakuraproject.main.base.BaseView; 7 | 8 | 9 | public interface DescContract { 10 | interface Model { 11 | void getData(String url, LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessMainView(AnimeDescListBean bean); 16 | 17 | void showSuccessDescView(AnimeListBean bean); 18 | 19 | void showSuccessFavorite(boolean favorite); 20 | 21 | void showEmptyDram(String msg); 22 | 23 | void isImomoe(boolean isImomoe); 24 | 25 | void getAnimeId(String animeId); 26 | } 27 | 28 | interface LoadDataCallback extends BaseLoadDataCallback { 29 | void successMain(AnimeDescListBean bean); 30 | 31 | void successDesc(AnimeListBean bean); 32 | 33 | void isFavorite(boolean favorite); 34 | 35 | void emptyDram(String msg); 36 | 37 | void isImomoe(boolean isImomoe); 38 | 39 | void getAnimeId(String animeId); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/home/HomeContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.home; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.List; 5 | 6 | import my.project.sakuraproject.bean.AnimeUpdateInfoBean; 7 | import my.project.sakuraproject.bean.HomeBean; 8 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 9 | import my.project.sakuraproject.main.base.BaseView; 10 | 11 | public interface HomeContract { 12 | interface Model { 13 | void getData(boolean isWeek, LoadDataCallback callback); 14 | } 15 | 16 | interface View extends BaseView { 17 | void showLoadSuccess(LinkedHashMap map); 18 | 19 | void showHomeLoadSuccess(List beans); 20 | 21 | void showUpdateInfoSuccess(List animeUpdateInfoBeans); 22 | } 23 | 24 | interface LoadDataCallback extends BaseLoadDataCallback { 25 | void success(LinkedHashMap map); 26 | 27 | void homeSuccess(List beans); 28 | 29 | void updateInfoSuccess(List animeUpdateInfoBeans); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.DownloadBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface DownloadContract { 10 | interface Model { 11 | void getData(int offset, int limit, DownloadContract.LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessView(List list); 16 | 17 | } 18 | 19 | interface LoadDataCallback extends BaseLoadDataCallback { 20 | void success(List list); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadDataContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.DownloadDataBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface DownloadDataContract { 10 | interface Model { 11 | void getData(String downloadId, int offset, int limit, DownloadDataContract.LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessView(List list); 16 | 17 | } 18 | 19 | interface LoadDataCallback extends BaseLoadDataCallback { 20 | void success(List list); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadDataModel.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.DownloadDataBean; 6 | import my.project.sakuraproject.database.DatabaseUtil; 7 | import my.project.sakuraproject.main.base.BaseModel; 8 | 9 | public class DownloadDataModel extends BaseModel implements DownloadDataContract.Model { 10 | 11 | @Override 12 | public void getData(String downloadId, int offset, int limit, DownloadDataContract.LoadDataCallback callback) { 13 | List list = DatabaseUtil.queryDownloadDataByDownloadId(downloadId, limit, offset); 14 | callback.success(list); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadDataPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.DownloadDataBean; 6 | import my.project.sakuraproject.main.base.BasePresenter; 7 | import my.project.sakuraproject.main.base.Presenter; 8 | 9 | public class DownloadDataPresenter extends Presenter implements BasePresenter, DownloadDataContract.LoadDataCallback { 10 | private DownloadDataContract.View view; 11 | private DownloadDataModel model; 12 | private String downloadId; 13 | private int offset; 14 | private int limit; 15 | 16 | public DownloadDataPresenter(String downloadId, int offset, int limit, DownloadDataContract.View view) { 17 | super(view); 18 | this.view = view; 19 | this.downloadId = downloadId; 20 | this.offset = offset; 21 | this.limit = limit; 22 | model = new DownloadDataModel(); 23 | } 24 | 25 | @Override 26 | public void error(String msg) { 27 | view.showLoadErrorView(msg); 28 | } 29 | 30 | @Override 31 | public void log(String url) { 32 | 33 | } 34 | 35 | @Override 36 | public void loadData(boolean isMain) { 37 | if (isMain) { 38 | view.showLoadingView(); 39 | view.showEmptyVIew(); 40 | } 41 | model.getData(downloadId, offset, limit, this); 42 | } 43 | 44 | @Override 45 | public void success(List list) { 46 | view.showSuccessView(list); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadModel.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.R; 6 | import my.project.sakuraproject.bean.DownloadBean; 7 | import my.project.sakuraproject.database.DatabaseUtil; 8 | import my.project.sakuraproject.main.base.BaseModel; 9 | import my.project.sakuraproject.util.Utils; 10 | 11 | public class DownloadModel extends BaseModel implements DownloadContract.Model { 12 | 13 | @Override 14 | public void getData(int offset, int limit, DownloadContract.LoadDataCallback callback) { 15 | List list = DatabaseUtil.queryAllDownloads(limit, offset); 16 | if (list.size() > 0) 17 | callback.success(list); 18 | else 19 | callback.error(Utils.getString(R.string.empty_download)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/DownloadPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.DownloadBean; 6 | import my.project.sakuraproject.main.base.BasePresenter; 7 | import my.project.sakuraproject.main.base.Presenter; 8 | 9 | public class DownloadPresenter extends Presenter implements BasePresenter, DownloadContract.LoadDataCallback { 10 | private DownloadContract.View view; 11 | private DownloadModel model; 12 | private int offset; 13 | private int limit; 14 | 15 | public DownloadPresenter(int offset, int limit, DownloadContract.View view) { 16 | super(view); 17 | this.view = view; 18 | this.offset = offset; 19 | this.limit = limit; 20 | model = new DownloadModel(); 21 | } 22 | 23 | @Override 24 | public void error(String msg) { 25 | view.showLoadErrorView(msg); 26 | } 27 | 28 | @Override 29 | public void log(String url) { 30 | 31 | } 32 | 33 | @Override 34 | public void loadData(boolean isMain) { 35 | if (isMain) { 36 | view.showLoadingView(); 37 | view.showEmptyVIew(); 38 | } 39 | model.getData(offset, limit, this); 40 | } 41 | 42 | @Override 43 | public void success(List list) { 44 | view.showSuccessView(list); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/FavoriteContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.AnimeListBean; 6 | import my.project.sakuraproject.bean.AnimeUpdateInfoBean; 7 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 8 | import my.project.sakuraproject.main.base.BaseView; 9 | 10 | public interface FavoriteContract { 11 | interface Model { 12 | void getData(int offset, int limit, boolean updateOrder, LoadDataCallback callback); 13 | 14 | void getUpdateInfo(int source, List animeUpdateInfoBeans, LoadDataCallback callback); 15 | } 16 | 17 | interface View extends BaseView { 18 | void showSuccessView(List list); 19 | 20 | void completionView(boolean complete); 21 | 22 | void showErrorUpdateInfo(int source); 23 | } 24 | 25 | interface LoadDataCallback extends BaseLoadDataCallback { 26 | void success(List list); 27 | 28 | void completion(boolean complete); 29 | 30 | void error(int source); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/HistoryContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.HistoryBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface HistoryContract { 10 | interface Model { 11 | void getData(int offset, int limit, HistoryContract.LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessView(List list); 16 | 17 | } 18 | 19 | interface LoadDataCallback extends BaseLoadDataCallback { 20 | void success(List list); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/HistoryModel.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.R; 6 | import my.project.sakuraproject.bean.HistoryBean; 7 | import my.project.sakuraproject.database.DatabaseUtil; 8 | import my.project.sakuraproject.main.base.BaseModel; 9 | import my.project.sakuraproject.util.Utils; 10 | 11 | public class HistoryModel extends BaseModel implements HistoryContract.Model { 12 | 13 | @Override 14 | public void getData(int offset, int limit, HistoryContract.LoadDataCallback callback) { 15 | List list = DatabaseUtil.queryAllHistory(limit, offset); 16 | if (list.size() > 0) 17 | callback.success(list); 18 | else 19 | callback.error(Utils.getString(R.string.empty_history)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/HistoryPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.HistoryBean; 6 | import my.project.sakuraproject.main.base.BasePresenter; 7 | import my.project.sakuraproject.main.base.Presenter; 8 | 9 | public class HistoryPresenter extends Presenter implements BasePresenter, HistoryContract.LoadDataCallback { 10 | private HistoryContract.View view; 11 | private HistoryModel model; 12 | private int offset; 13 | private int limit; 14 | 15 | public HistoryPresenter(int offset, int limit, HistoryContract.View view) { 16 | super(view); 17 | this.view = view; 18 | this.offset = offset; 19 | this.limit = limit; 20 | model = new HistoryModel(); 21 | } 22 | 23 | @Override 24 | public void error(String msg) { 25 | view.showLoadErrorView(msg); 26 | } 27 | 28 | @Override 29 | public void log(String url) { 30 | 31 | } 32 | 33 | @Override 34 | public void loadData(boolean isMain) { 35 | if (isMain) { 36 | view.showLoadingView(); 37 | view.showEmptyVIew(); 38 | } 39 | model.getData(offset, limit, this); 40 | } 41 | 42 | @Override 43 | public void success(List list) { 44 | view.showSuccessView(list); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/UpdateImgContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 4 | import my.project.sakuraproject.main.base.BaseView; 5 | 6 | public interface UpdateImgContract { 7 | interface Model { 8 | void getData(String oldImgUrl, String descUrl, UpdateImgContract.LoadDataCallback callback); 9 | } 10 | 11 | interface View extends BaseView { 12 | void showSuccessImg(String oldImgUrl, String imgUrl); 13 | 14 | void showErrorImg(String msg); 15 | } 16 | 17 | interface LoadDataCallback extends BaseLoadDataCallback { 18 | void success(String oldImgUrl, String imgUrl); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/my/UpdateImgPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.my; 2 | 3 | import my.project.sakuraproject.main.base.BasePresenter; 4 | import my.project.sakuraproject.main.base.Presenter; 5 | 6 | public class UpdateImgPresenter extends Presenter implements BasePresenter, UpdateImgContract.LoadDataCallback { 7 | private UpdateImgContract.View view; 8 | private UpdateImgModel model; 9 | private String oldImgUrl; 10 | private String descUrl; 11 | 12 | public UpdateImgPresenter(String oldImgUrl, String descUrl, UpdateImgContract.View view) { 13 | super(view); 14 | this.view = view; 15 | this.oldImgUrl = oldImgUrl; 16 | this.descUrl = descUrl; 17 | model = new UpdateImgModel(); 18 | } 19 | 20 | @Override 21 | public void loadData(boolean isMain) { 22 | 23 | } 24 | 25 | public void loadData() { 26 | model.getData(oldImgUrl, descUrl, this); 27 | } 28 | 29 | @Override 30 | public void success(String oldImgUrl, String imgUrl) { 31 | view.showSuccessImg(oldImgUrl, imgUrl); 32 | } 33 | 34 | @Override 35 | public void error(String msg) { 36 | view.showErrorImg(msg); 37 | } 38 | 39 | @Override 40 | public void log(String url) { 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/rank/RankContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.rank; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.SiliSiliRankBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface RankContract { 10 | interface Model { 11 | void getData(LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccess(List siliSiliRankBeans); 16 | } 17 | 18 | interface LoadDataCallback extends BaseLoadDataCallback { 19 | void success(List siliSiliRankBeans); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/rank/RankPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.rank; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.SiliSiliRankBean; 6 | import my.project.sakuraproject.main.base.BasePresenter; 7 | import my.project.sakuraproject.main.base.Presenter; 8 | 9 | public class RankPresenter extends Presenter implements BasePresenter, RankContract.LoadDataCallback { 10 | private RankContract.View view; 11 | private RankModel model; 12 | 13 | public RankPresenter(RankContract.View view) { 14 | super(view); 15 | this.view = view; 16 | model = new RankModel(); 17 | } 18 | 19 | @Override 20 | public void loadData(boolean isMain) { 21 | view.showLoadingView(); 22 | model.getData(this); 23 | } 24 | 25 | @Override 26 | public void success(List siliSiliRankBeans) { 27 | view.showSuccess(siliSiliRankBeans); 28 | } 29 | 30 | @Override 31 | public void error(String msg) { 32 | view.showLoadErrorView(msg); 33 | } 34 | 35 | @Override 36 | public void log(String url) { 37 | view.showLog(url); 38 | } 39 | } 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/search/SearchContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.search; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | import java.util.List; 5 | 6 | import my.project.sakuraproject.bean.AnimeListBean; 7 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 8 | import my.project.sakuraproject.main.base.BaseView; 9 | 10 | public interface SearchContract { 11 | interface Model { 12 | void getData(String url, int page, boolean isMain, String wd, boolean isSiliTag, LoadDataCallback callback) throws UnsupportedEncodingException; 13 | } 14 | 15 | interface View extends BaseView { 16 | void showSuccessView(boolean isMain, List list); 17 | 18 | void showErrorView(boolean isMain, String msg); 19 | 20 | void getPageCount(int pageCount); 21 | } 22 | 23 | interface LoadDataCallback extends BaseLoadDataCallback { 24 | void success(boolean isMain, List list); 25 | 26 | void error(boolean isMain, String msg); 27 | 28 | void pageCount(int pageCount); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/tag/TagContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.tag; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.AnimeListBean; 6 | import my.project.sakuraproject.bean.TagBean; 7 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 8 | import my.project.sakuraproject.main.base.BaseView; 9 | 10 | public interface TagContract { 11 | interface Model { 12 | void getData(String url, String[] siliParams, LoadDataCallback callback); 13 | } 14 | 15 | interface View extends BaseView { 16 | void showTagSuccessView(boolean isSilisili, List list); 17 | 18 | void showDefaultSiliAnimeList(List animeListBeans, int pageCount); 19 | } 20 | 21 | interface LoadDataCallback extends BaseLoadDataCallback { 22 | void success(boolean isSilisili, List list); 23 | 24 | void siliAnimeList(List animeListBeans, int pageCount); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/updateList/UpdateListContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.updateList; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.AnimeUpdateBean; 6 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 7 | import my.project.sakuraproject.main.base.BaseView; 8 | 9 | public interface UpdateListContract { 10 | interface Model { 11 | void getData(String url, boolean isImomoe, LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessView(List list); 16 | 17 | void showErrorView(String msg); 18 | } 19 | 20 | interface LoadDataCallback extends BaseLoadDataCallback { 21 | void success(List list); 22 | 23 | void error(String msg); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/updateList/UpdateListPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.updateList; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.bean.AnimeUpdateBean; 6 | import my.project.sakuraproject.main.base.Presenter; 7 | 8 | public class UpdateListPresenter extends Presenter implements UpdateListContract.LoadDataCallback { 9 | private String url; 10 | private UpdateListContract.View view; 11 | private UpdateListModel model; 12 | 13 | public UpdateListPresenter(String url, UpdateListContract.View view) { 14 | super(view); 15 | this.url = url; 16 | this.view = view; 17 | model = new UpdateListModel(); 18 | } 19 | 20 | public void loadData(boolean isImomoe) { 21 | view.showLoadingView(); 22 | view.showEmptyVIew(); 23 | model.getData(url, isImomoe, this); 24 | } 25 | 26 | @Override 27 | public void success(List list) { 28 | view.showSuccessView(list); 29 | } 30 | 31 | @Override 32 | public void error(String msg) { 33 | view.showErrorView(msg); 34 | } 35 | 36 | @Override 37 | public void log(String url) { 38 | view.showLog(url); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/video/DanmuContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.video; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | 5 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 6 | import my.project.sakuraproject.main.base.BaseView; 7 | 8 | public interface DanmuContract { 9 | 10 | interface Model { 11 | void getDanmu(String title, String drama, DanmuContract.LoadDataCallback callback); 12 | } 13 | 14 | interface View extends BaseView { 15 | void showSuccessDanmuView(JSONObject danmus); 16 | 17 | void showSuccessDanmuXmlView(String content); 18 | 19 | void showErrorDanmuView(String msg); 20 | } 21 | 22 | interface LoadDataCallback extends BaseLoadDataCallback { 23 | void successDanmu(JSONObject danmus); 24 | 25 | void successDanmuXml(String content); 26 | 27 | void errorDanmu(String msg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/video/DanmuPresenter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.video; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | 5 | import my.project.sakuraproject.main.base.BasePresenter; 6 | import my.project.sakuraproject.main.base.Presenter; 7 | 8 | public class DanmuPresenter extends Presenter implements BasePresenter, DanmuContract.LoadDataCallback { 9 | private String title; 10 | private String drama; 11 | private DanmuModel model; 12 | private DanmuContract.View view; 13 | 14 | public DanmuPresenter(String title, String drama, DanmuContract.View view) { 15 | super(view); 16 | this.title = title; 17 | this.drama = drama; 18 | this.view = view; 19 | model = new DanmuModel(); 20 | } 21 | 22 | public void loadDanmu() { 23 | model.getDanmu(title, drama, this); 24 | } 25 | 26 | @Override 27 | public void loadData(boolean isMain) { 28 | 29 | } 30 | 31 | @Override 32 | public void successDanmu(JSONObject danmus) { 33 | view.showSuccessDanmuView(danmus); 34 | } 35 | 36 | @Override 37 | public void successDanmuXml(String content) { 38 | view.showSuccessDanmuXmlView(content); 39 | } 40 | 41 | @Override 42 | public void errorDanmu(String msg) { 43 | view.showErrorDanmuView(msg); 44 | } 45 | 46 | @Override 47 | public void error(String msg) { 48 | 49 | } 50 | 51 | @Override 52 | public void log(String url) { 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/main/video/DownloadVideoContract.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.main.video; 2 | 3 | import java.util.List; 4 | 5 | import my.project.sakuraproject.main.base.BaseLoadDataCallback; 6 | import my.project.sakuraproject.main.base.BaseView; 7 | 8 | public interface DownloadVideoContract { 9 | interface Model { 10 | void getData(String url, String playNumber, int source, DownloadVideoContract.LoadDataCallback callback); 11 | } 12 | 13 | interface View extends BaseView { 14 | void showYhdmVideoSuccessView(List urls, String playNumber); 15 | 16 | void getVideoError(String playNumber); 17 | 18 | void showSuccessImomoeVideoUrlsView(String url, String playNumber); 19 | } 20 | 21 | interface LoadDataCallback extends BaseLoadDataCallback { 22 | void successYhdmVideoUrls(List urls, String playNumber); 23 | 24 | void error(String playNumber); 25 | 26 | void successImomoeVideoUrls(String url, String playNumber); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/services/DLNAService.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.services; 2 | 3 | import android.app.Service; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.os.IBinder; 7 | import android.os.PowerManager; 8 | 9 | import androidx.annotation.Nullable; 10 | 11 | public class DLNAService extends Service { 12 | PowerManager.WakeLock wakeLock = null; 13 | 14 | @Nullable 15 | @Override 16 | public IBinder onBind(Intent intent) { 17 | return null; 18 | } 19 | 20 | @Override 21 | public int onStartCommand(Intent intent, int flags, int startId) { 22 | return super.onStartCommand(intent, flags, startId); 23 | } 24 | 25 | @Override 26 | public void onCreate() { 27 | super.onCreate(); 28 | PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 29 | wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, DownloadService.class.getName()); 30 | if (null != wakeLock) { 31 | wakeLock.acquire(); 32 | } 33 | } 34 | 35 | @Override 36 | public void onDestroy() { 37 | if (wakeLock != null) { 38 | wakeLock.release(); 39 | wakeLock = null; 40 | } 41 | super.onDestroy(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/DefaultCallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | 3 | import android.view.View; 4 | 5 | import java.util.List; 6 | 7 | public class DefaultCallback implements SniffingCallback { 8 | 9 | @Override 10 | public void onSniffingSuccess(View webView, String url, int position, List videos) { 11 | 12 | } 13 | 14 | @Override 15 | public void onSniffingError(View webView, String url, int position, int errorCode) { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/DefaultFilter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | 3 | import android.view.View; 4 | 5 | public class DefaultFilter implements SniffingFilter { 6 | 7 | @Override 8 | public SniffingVideo onFilter(View webView, String url) { 9 | for (String type : DEFAULT_TYPE) { 10 | if (url.contains(type)) { 11 | if(url.contains("=")){ 12 | String[] split = url.split("="); 13 | if(split[1].startsWith("http") && split[1].lastIndexOf(type) == split[1].length() - type.length()){ 14 | url = split[1]; 15 | } 16 | } 17 | Object[] content = Util.getContent(url); 18 | int len = (int) content[0]; 19 | String ctp = (String) content[1]; 20 | if(ctp.toLowerCase().contains("video") || ctp.toLowerCase().contains("mpegurl")){ 21 | return new SniffingVideo(url, type, len, ctp); 22 | } 23 | } 24 | } 25 | return null; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/DefaultUICallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | 3 | import android.view.View; 4 | 5 | import java.util.List; 6 | 7 | public class DefaultUICallback implements SniffingUICallback { 8 | 9 | @Override 10 | public void onSniffingStart(View webView, String url) { 11 | } 12 | 13 | @Override 14 | public void onSniffingFinish(View webView, String url) { 15 | } 16 | 17 | @Override 18 | public void onSniffingSuccess(View webView, String url, int position, List videos) { 19 | } 20 | 21 | @Override 22 | public void onSniffingError(View webView, String url, int position, int errorCode) { 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/SniffingCallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | import android.view.View; 3 | 4 | import java.util.List; 5 | 6 | public interface SniffingCallback { 7 | 8 | /** 9 | * 视频嗅探成功 10 | * @param webView 11 | * @param url 12 | * @param videos 13 | */ 14 | void onSniffingSuccess(View webView,String url,int position,List videos); 15 | 16 | /** 17 | * 视频嗅探失败成功 18 | * @param webView 19 | * @param url 20 | * @param errorCode 21 | */ 22 | void onSniffingError(View webView, String url,int position,int errorCode); 23 | 24 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/SniffingFilter.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | import android.view.View; 3 | 4 | /** 5 | * 嗅探url过滤器 6 | */ 7 | public interface SniffingFilter { 8 | 9 | String[] DEFAULT_TYPE = {".m3u8",".mp4",".3gp",".wmv",".avi",".rm"}; 10 | 11 | /** 12 | * 用来过滤视频连接,m3u8,mp4等 13 | * @param webView 14 | * @param url 15 | * @return 16 | */ 17 | SniffingVideo onFilter(View webView, String url); 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/SniffingUICallback.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing; 2 | 3 | import android.view.View; 4 | 5 | public interface SniffingUICallback extends SniffingCallback { 6 | /** 7 | * 开始视频嗅探 8 | * @param webView 9 | * @param url 10 | */ 11 | void onSniffingStart(View webView,String url); 12 | 13 | /** 14 | * 视频嗅探结束 15 | * @param webView 16 | * @param url 17 | */ 18 | void onSniffingFinish(View webView, String url); 19 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/node/NodeHelper.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing.node; 2 | import android.text.TextUtils; 3 | 4 | /** 5 | * Created by fanchen on 2017/9/17. 6 | */ 7 | public class NodeHelper { 8 | 9 | public static String substring(String str, int start) { 10 | return substring(str, start, -1); 11 | } 12 | 13 | public static String substring(String str, int start, int end) { 14 | if (TextUtils.isEmpty(str)) { 15 | return ""; 16 | } 17 | if(start < 0){ 18 | return str; 19 | } 20 | if (end < 0) { 21 | return str.substring(start); 22 | } 23 | if (start >= 0 && start <= str.length()) { 24 | return str.substring(start, end); 25 | } 26 | return ""; 27 | } 28 | 29 | public static String split(String str, String regex, int position) { 30 | if (TextUtils.isEmpty(str)) { 31 | return ""; 32 | } 33 | String[] array = str.split(regex); 34 | if(position >= array.length){ 35 | return array[array.length-1]; 36 | } 37 | if (position < 0) { 38 | return array[0]; 39 | } 40 | return array[position]; 41 | } 42 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/sniffing/web/SniffingWebChromeClient.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.sniffing.web; 2 | 3 | import android.webkit.JsResult; 4 | import android.webkit.WebChromeClient; 5 | import android.webkit.WebView; 6 | 7 | import my.project.sakuraproject.sniffing.Util; 8 | 9 | 10 | public class SniffingWebChromeClient extends WebChromeClient { 11 | 12 | private SniffingWebViewClient mClient; 13 | 14 | public SniffingWebChromeClient(SniffingWebViewClient mClient) { 15 | this.mClient = mClient; 16 | } 17 | 18 | @Override 19 | public boolean onJsConfirm(WebView webView, String s, String s1, JsResult jsResult) { 20 | if (s1.contains(Util.HTMLFLAG)) { 21 | mClient.parserHtml(webView, s, s1); 22 | jsResult.cancel(); 23 | return true; 24 | } 25 | return super.onJsConfirm(webView, s, s1, jsResult); 26 | } 27 | 28 | @Override 29 | public boolean onJsAlert(WebView webView, String s, String s1, JsResult jsResult) { 30 | if (s1.contains(Util.HTMLFLAG)) { 31 | return onJsConfirm(webView, s, s1, jsResult); 32 | } 33 | return super.onJsAlert(webView, s, s1, jsResult); 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/util/CropUtil.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.util; 2 | 3 | import javax.net.ssl.SSLContext; 4 | import javax.net.ssl.SSLSocketFactory; 5 | import javax.net.ssl.TrustManager; 6 | import javax.net.ssl.X509TrustManager; 7 | 8 | /** 9 | * 忽略Https验证 10 | * https://github.com/google/ExoPlayer/issues/6463 11 | */ 12 | public class CropUtil { 13 | 14 | public static SSLSocketFactory getUnsafeSslSocketFactory() { 15 | try { 16 | final TrustManager[] trustAllCerts = new TrustManager[]{ 17 | new X509TrustManager() { 18 | @Override 19 | public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { 20 | } 21 | 22 | @Override 23 | public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { 24 | } 25 | 26 | @Override 27 | public java.security.cert.X509Certificate[] getAcceptedIssuers() { 28 | return new java.security.cert.X509Certificate[]{}; 29 | } 30 | } 31 | }; 32 | 33 | SSLContext sslContext = SSLContext.getInstance("SSL"); 34 | sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 35 | return sslContext.getSocketFactory(); 36 | } catch (Exception e) { 37 | throw new RuntimeException(e); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/my/project/sakuraproject/util/UpdateMessageDigestInputStream.java: -------------------------------------------------------------------------------- 1 | package my.project.sakuraproject.util; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.security.MessageDigest; 6 | abstract class UpdateMessageDigestInputStream extends InputStream { 7 | UpdateMessageDigestInputStream() {} 8 | public void updateMessageDigest(MessageDigest messageDigest) throws IOException { 9 | int data; 10 | while((data = this.read()) != -1) { 11 | messageDigest.update((byte)data); 12 | } 13 | } 14 | public void updateMessageDigest(MessageDigest messageDigest, int len) throws IOException { 15 | int data; 16 | for(int bytesRead = 0; bytesRead < len && (data = this.read()) != -1; ++bytesRead) { 17 | messageDigest.update((byte)data); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fab_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/my_fab_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/my_fab_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/color/bottom_view_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/color/color_state_menu_navi.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/log_text_input_layout_stroke_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/m3_textfield_label_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/color/mtrl_btn_stroke_color_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/color/mtrl_navigation_item_background_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/color/rank_text_input_layout_stroke_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/ripple_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_input_layout_stroke_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_account_circle_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_account_circle_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_account_circle_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_account_circle_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_airplay_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_airplay_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_all_inclusive_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_all_inclusive_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_all_inclusive_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_all_inclusive_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_android_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_android_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_arrow_back_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_arrow_back_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_arrow_drop_down_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_arrow_drop_down_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_arrow_forward_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_arrow_forward_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_arrow_right_alt_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_arrow_right_alt_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_bug_report_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_bug_report_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_calendar_month_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_calendar_month_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_clear_all_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_clear_all_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_close_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_close_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_cloud_download_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_cloud_download_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_code_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_code_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_dashboard_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_dashboard_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_delete_forever_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_delete_forever_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_delete_forever_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_delete_forever_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_delete_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_delete_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_download_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_download_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_error_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_error_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_explore_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_explore_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_fast_forward_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_fast_forward_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_fast_rewind_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_fast_rewind_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_favorite_border_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_favorite_border_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_favorite_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_favorite_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_filter_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_filter_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_first_page_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_first_page_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_history_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_history_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_home_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_home_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_insert_chart_outlined_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_insert_chart_outlined_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_insert_chart_outlined_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_insert_chart_outlined_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_keyboard_arrow_right_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_keyboard_arrow_right_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_language_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_language_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_last_page_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_last_page_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_movie_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_movie_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_open_in_new_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_open_in_new_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_pause_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_pause_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_person_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_person_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_phonelink_setup_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_phonelink_setup_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_picture_in_picture_alt_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_picture_in_picture_alt_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_play_arrow_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_play_arrow_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_play_circle_filled_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_play_circle_filled_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_play_disabled_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_play_disabled_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_replay_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_replay_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_save_alt_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_save_alt_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_search_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_search_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_search_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_search_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_settings_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_settings_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_style_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_style_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_style_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_style_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_subscriptions_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_subscriptions_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_sync_alt_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_sync_alt_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_sync_alt_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_sync_alt_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_update_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_update_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_view_selections_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_view_selections_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_visibility_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/baseline_visibility_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/danmu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/danmu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/default_bg.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/error.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/error.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/github.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/has_update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/has_update.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_dock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_action_dock.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_dmdy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_dmdy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_dmfl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_dmfl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_dmzt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_dmzt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_jcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_jcb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_down_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_down_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_loyalty_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_loyalty_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_ondemand_video_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_ondemand_video_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_settings_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_dashboard.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_favorite.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_file_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_file_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_history.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_shortcut_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_shortcut_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_xfsjb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/ic_xfsjb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/light_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/light_img.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/loading_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/loading_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/loading_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/loading_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/logo.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/night_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/night_img.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_account_circle_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_account_circle_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_cloud_sync_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_cloud_sync_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_done_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_done_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_movie_filter_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_movie_filter_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_reply_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_reply_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_sort_by_alpha_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_sort_by_alpha_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_subtitles_off_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_subtitles_off_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_subtitles_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_subtitles_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/outline_video_library_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/outline_video_library_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/parsing_error_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/parsing_error_bg.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/player_btn_locking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/player_btn_locking.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/player_btn_locking_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/player_btn_locking_pre.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/player_seek_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/drawable-xhdpi/player_seek_img.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/baseline_history_toggle_off_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/baseline_http_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/baseline_tips_and_updates_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/change_drama_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/custom_popup_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/desc_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/desc_state_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/desc_stroke.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/desc_update_time_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/download_img_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_list_numbered_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_star_rate_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_swap_vert_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_whatshot_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/imomoe_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_number_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/long_press_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mali_tag_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/my_item_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rank_one.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rank_other.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rank_three.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rank_two.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_local_fire_department_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_star_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/score_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sniffer_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toast_style_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toast_style_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toast_style_success.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/toast_style_warning.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/yhdm_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_api.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_default_webview_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 14 | 19 | 20 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_source.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/base_emnty_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/base_error_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_home.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/custom_download_notification.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | 20 | 21 | 29 | 30 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/custom_toast.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_chip.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_proress.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_remove_download.xml: -------------------------------------------------------------------------------- 1 | 9 | 14 | 15 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_update_log.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_my.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 17 | 18 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_week.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_btn.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_desc_details.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_desc_drama.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_device.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_header_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 26 | 27 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_mali_tag_item.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_spinner_item.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_tag_head.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_tag_item.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/layout/nav_header_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/menu/about_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_app_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 19 | 20 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_nav_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/menu/delete_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/download_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/favorite_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/home_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 16 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/menu/main_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/search_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/670848654/SakuraAnime/9b5c32980d2dda3d4f6393a2c2b71998a0a3c372/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 8dp 6 | 150dp 7 | 16dp 8 | 8dp 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #00000000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_path.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | repositories { 6 | google() 7 | jcenter() 8 | mavenCentral() 9 | maven { 10 | allowInsecureProtocol = true 11 | url 'http://4thline.org/m2' 12 | } 13 | } 14 | dependencies { 15 | classpath 'com.android.tools.build:gradle:7.2.0' 16 | classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.1' 17 | 18 | // NOTE: Do not place your application dependencies here; they belong 19 | // in the individual module build.gradle files 20 | } 21 | } 22 | 23 | allprojects { 24 | repositories { 25 | google() 26 | jcenter() 27 | mavenCentral() 28 | maven { 29 | allowInsecureProtocol = true 30 | url 'http://4thline.org/m2' 31 | } 32 | } 33 | } 34 | 35 | task clean(type: Delete) { 36 | delete rootProject.buildDir 37 | } 38 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | android.useAndroidX=true 15 | android.enableJetifier=true -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------