From 058e46bae8a5a041771c8e9a665156aa56147b67 Mon Sep 17 00:00:00 2001 From: raoqian <506411586@qq.com> Date: Wed, 17 Sep 2025 18:35:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AC=A1=E4=BB=A3=E7=A0=81=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 109 +++ app/proguard-rules.pro | 21 + app/src/main/AndroidManifest.xml | 61 ++ .../er/nebuluxe/app/basics/BaseActivity.kt | 141 +++ .../er/nebuluxe/app/basics/BaseFragment.kt | 99 +++ .../jia/er/nebuluxe/app/basics/Constants.kt | 60 ++ .../er/nebuluxe/app/basics/MyApplication.kt | 136 +++ .../nebuluxe/app/basics/MyContentProvider.kt | 65 ++ .../jia/er/nebuluxe/app/data/AndroidBridge.kt | 130 +++ .../nebuluxe/app/data/AndroidBridgeDetail.kt | 79 ++ .../jia/er/nebuluxe/app/data/BaseEventBus.kt | 3 + .../com/jia/er/nebuluxe/app/data/BaseRes.kt | 6 + .../jia/er/nebuluxe/app/data/BuyVideoRes.kt | 7 + .../er/nebuluxe/app/data/CategoriesDataRes.kt | 11 + .../jia/er/nebuluxe/app/data/CollectionRes.kt | 24 + .../er/nebuluxe/app/data/CreateOrderReq.kt | 8 + .../er/nebuluxe/app/data/CreateOrderRes.kt | 5 + .../app/data/CustomerBuyRecordsRes.kt | 18 + .../er/nebuluxe/app/data/CustomerOrderRes.kt | 20 + .../nebuluxe/app/data/DetailsRecommendRes.kt | 28 + .../app/data/ExampleKeywordDataRes.kt | 30 + .../er/nebuluxe/app/data/FbNotificationReq.kt | 3 + .../er/nebuluxe/app/data/FreeSeriesMoreRes.kt | 24 + .../er/nebuluxe/app/data/HistoryDataRes.kt | 26 + .../app/data/HomeBannerAndNineSquarepRes.kt | 30 + .../er/nebuluxe/app/data/HomeBannerBean.kt | 21 + .../nebuluxe/app/data/HomeBestSellersData.kt | 28 + .../er/nebuluxe/app/data/HomeModuleBean.kt | 13 + .../app/data/HomeNewShortPlayNoPaginateRes.kt | 25 + .../nebuluxe/app/data/HomeNewShortPlayRes.kt | 61 ++ .../er/nebuluxe/app/data/HomeRankingRes.kt | 25 + .../jia/er/nebuluxe/app/data/HomeTopRes.kt | 30 + .../er/nebuluxe/app/data/HomeTopWeekRes.kt | 25 + .../com/jia/er/nebuluxe/app/data/JsonInfo.kt | 14 + .../com/jia/er/nebuluxe/app/data/LoginReq.kt | 10 + .../com/jia/er/nebuluxe/app/data/LoginRes.kt | 6 + .../jia/er/nebuluxe/app/data/MainDataHis.kt | 8 + .../jia/er/nebuluxe/app/data/NoticeNumRes.kt | 5 + .../com/jia/er/nebuluxe/app/data/PayReq.kt | 11 + .../com/jia/er/nebuluxe/app/data/PayRes.kt | 8 + .../jia/er/nebuluxe/app/data/PaySettingRes.kt | 68 ++ .../nebuluxe/app/data/PlayerDetailDataRes.kt | 160 ++++ .../er/nebuluxe/app/data/RecommendDataRes.kt | 39 + .../er/nebuluxe/app/data/ReelCrushJsInfo.kt | 10 + .../er/nebuluxe/app/data/RewardCoinsRes.kt | 14 + .../app/data/ShortListCategoryDataInfo.kt | 32 + .../com/jia/er/nebuluxe/app/data/TabEntity.kt | 20 + .../er/nebuluxe/app/data/UploadHistoryReq.kt | 7 + .../jia/er/nebuluxe/app/data/UserInfoRes.kt | 30 + .../er/nebuluxe/app/data/UserRegisterRes.kt | 4 + .../er/nebuluxe/app/data/VideoListDataRes.kt | 29 + .../jia/er/nebuluxe/app/home/FreshActivity.kt | 84 ++ .../jia/er/nebuluxe/app/home/FreshAdapter.kt | 57 ++ .../er/nebuluxe/app/home/GenresActivity.kt | 101 +++ .../jia/er/nebuluxe/app/home/GenresAdapter.kt | 67 ++ .../er/nebuluxe/app/home/GenresItemAdapter.kt | 32 + .../er/nebuluxe/app/home/HomeBannerAdapter.kt | 57 ++ .../app/home/HomeBannerBottomAdapter.kt | 60 ++ .../er/nebuluxe/app/home/HomeForYouAdapter.kt | 29 + .../jia/er/nebuluxe/app/home/HomeFragment.kt | 265 ++++++ .../er/nebuluxe/app/home/HomeMostAdapter.kt | 58 ++ .../jia/er/nebuluxe/app/home/HotActivity.kt | 91 ++ .../jia/er/nebuluxe/app/home/HotAdapter.kt | 62 ++ .../jia/er/nebuluxe/app/home/RankActivity.kt | 83 ++ .../jia/er/nebuluxe/app/home/RankAdapter.kt | 95 ++ .../jia/er/nebuluxe/app/home/ReelsFragment.kt | 464 ++++++++++ .../jia/er/nebuluxe/app/home/SavedFragment.kt | 142 +++ .../jia/er/nebuluxe/app/main/MainActivity.kt | 705 +++++++++++++++ .../er/nebuluxe/app/main/SplashActivity.kt | 54 ++ .../jia/er/nebuluxe/app/me/AboutActivity.kt | 42 + .../com/jia/er/nebuluxe/app/me/MeFragment.kt | 247 ++++++ .../jia/er/nebuluxe/app/me/SettingActivity.kt | 131 +++ .../com/jia/er/nebuluxe/app/net/AppService.kt | 258 ++++++ .../er/nebuluxe/app/net/BodyInterceptor.kt | 30 + .../com/jia/er/nebuluxe/app/net/Decryption.kt | 66 ++ .../jia/er/nebuluxe/app/net/MainRequest.kt | 316 +++++++ .../jia/er/nebuluxe/app/net/MainViewModel.kt | 403 +++++++++ .../com/jia/er/nebuluxe/app/net/Retrofit.kt | 221 +++++ .../nebuluxe/app/ui/CustomRoundedCorners.kt | 56 ++ .../nebuluxe/app/ui/FfmpegRenderersFactory.kt | 44 + .../app/ui/ListItemsVisibilityCalculator.kt | 9 + .../com/jia/er/nebuluxe/app/ui/LoadingLine.kt | 59 ++ .../app/ui/OnSnapHelperCurrentListener.kt | 10 + .../nebuluxe/app/ui/PosterStyleImageView.kt | 244 ++++++ .../app/ui/RecyclerViewScrollerDetection.kt | 120 +++ .../app/ui/RotateDownPageTransformer.kt | 67 ++ .../jia/er/nebuluxe/app/ui/ScrollTextView.kt | 61 ++ .../er/nebuluxe/app/ui/UnFavoriteDialog.kt | 31 + .../jia/er/nebuluxe/app/utils/DialogUtils.kt | 35 + .../com/jia/er/nebuluxe/app/utils/Memory.kt | 104 +++ .../jia/er/nebuluxe/app/utils/PackageUtils.kt | 40 + .../com/jia/er/nebuluxe/app/utils/Toast.kt | 183 ++++ .../app/video/NewRecommendBannerAdapter.kt | 158 ++++ .../app/video/PlayerDetailActivity.kt | 820 ++++++++++++++++++ .../nebuluxe/app/video/PlayerDetailAdapter.kt | 29 + .../nebuluxe/app/video/SeriesDataAdapter.kt | 48 + .../app/video/SeriesDialogFragment.kt | 105 +++ .../main/res/drawable-xxhdpi/bg_rank_1.png | Bin 0 -> 13150 bytes .../main/res/drawable-xxhdpi/bg_rank_2.png | Bin 0 -> 9167 bytes .../main/res/drawable-xxhdpi/bg_rank_3.png | Bin 0 -> 13609 bytes .../res/drawable-xxhdpi/bg_rank_other.png | Bin 0 -> 12383 bytes .../main/res/drawable-xxhdpi/ic_me_top.png | Bin 0 -> 532814 bytes .../main/res/drawable-xxhdpi/iv_avatar.png | Bin 0 -> 23582 bytes .../main/res/drawable-xxhdpi/iv_des_bg.png | Bin 0 -> 4712 bytes .../res/drawable-xxhdpi/iv_example_back.png | Bin 0 -> 1581 bytes .../iv_example_collection_h.png | Bin 0 -> 5099 bytes .../iv_example_collection_n.png | Bin 0 -> 1154 bytes .../res/drawable-xxhdpi/iv_example_play.webp | Bin 0 -> 484 bytes .../res/drawable-xxhdpi/iv_example_search.png | Bin 0 -> 890 bytes .../res/drawable-xxhdpi/iv_example_stop.webp | Bin 0 -> 352 bytes app/src/main/res/drawable-xxhdpi/iv_fresh.png | Bin 0 -> 7775 bytes .../res/drawable-xxhdpi/iv_fresh_play.png | Bin 0 -> 1619 bytes app/src/main/res/drawable-xxhdpi/iv_genre.png | Bin 0 -> 6065 bytes .../main/res/drawable-xxhdpi/iv_genres_1.png | Bin 0 -> 161240 bytes .../main/res/drawable-xxhdpi/iv_genres_2.png | Bin 0 -> 163155 bytes .../main/res/drawable-xxhdpi/iv_genres_3.png | Bin 0 -> 161834 bytes .../main/res/drawable-xxhdpi/iv_genres_4.png | Bin 0 -> 2817 bytes .../main/res/drawable-xxhdpi/iv_home_bg.png | Bin 0 -> 365633 bytes .../main/res/drawable-xxhdpi/iv_home_h.png | Bin 0 -> 10932 bytes .../main/res/drawable-xxhdpi/iv_home_n.png | Bin 0 -> 1457 bytes app/src/main/res/drawable-xxhdpi/iv_hot.png | Bin 0 -> 6341 bytes .../main/res/drawable-xxhdpi/iv_hot_top.png | Bin 0 -> 63090 bytes .../main/res/drawable-xxhdpi/iv_hot_txt_l.png | Bin 0 -> 3703 bytes .../main/res/drawable-xxhdpi/iv_hot_txt_r.png | Bin 0 -> 3645 bytes .../res/drawable-xxhdpi/iv_indicator_h.png | Bin 0 -> 758 bytes .../res/drawable-xxhdpi/iv_indicator_n.png | Bin 0 -> 297 bytes .../main/res/drawable-xxhdpi/iv_item_play.png | Bin 0 -> 1401 bytes .../res/drawable-xxhdpi/iv_item_rank_heat.png | Bin 0 -> 1714 bytes .../drawable-xxhdpi/iv_item_rank_heat_1.png | Bin 0 -> 1680 bytes app/src/main/res/drawable-xxhdpi/iv_me_h.png | Bin 0 -> 11453 bytes app/src/main/res/drawable-xxhdpi/iv_me_n.png | Bin 0 -> 2053 bytes .../main/res/drawable-xxhdpi/iv_me_right.png | Bin 0 -> 585 bytes .../main/res/drawable-xxhdpi/iv_no_data.png | Bin 0 -> 55761 bytes .../res/drawable-xxhdpi/iv_no_network.png | Bin 0 -> 82956 bytes .../main/res/drawable-xxhdpi/iv_no_result.png | Bin 0 -> 76501 bytes .../res/drawable-xxhdpi/iv_placeholder_h.png | Bin 0 -> 8420 bytes .../res/drawable-xxhdpi/iv_placeholder_v.png | Bin 0 -> 9285 bytes .../res/drawable-xxhdpi/iv_rank_top_bg.png | Bin 0 -> 1003120 bytes .../main/res/drawable-xxhdpi/iv_reels_h.png | Bin 0 -> 10990 bytes .../main/res/drawable-xxhdpi/iv_reels_n.png | Bin 0 -> 1323 bytes .../main/res/drawable-xxhdpi/iv_saved_h.png | Bin 0 -> 11342 bytes .../main/res/drawable-xxhdpi/iv_saved_n.png | Bin 0 -> 1596 bytes .../main/res/drawable-xxhdpi/iv_splash.png | Bin 0 -> 426615 bytes app/src/main/res/drawable-xxhdpi/iv_top.png | Bin 0 -> 6545 bytes app/src/main/res/drawable/bg_circle.xml | 5 + app/src/main/res/drawable/bg_content.xml | 10 + .../main/res/drawable/bg_example_num_h.xml | 9 + .../main/res/drawable/bg_example_num_n.xml | 9 + .../drawable/bg_example_seekbar_player.xml | 15 + .../bg_example_shape_seekbar_player.xml | 4 + app/src/main/res/drawable/bg_genres.xml | 9 + app/src/main/res/drawable/bg_home_tab.xml | 10 + app/src/main/res/drawable/bg_home_top.xml | 10 + .../res/drawable/ic_launcher_background.xml | 74 ++ .../res/drawable/ic_launcher_foreground.xml | 30 + app/src/main/res/layout/activity_about.xml | 156 ++++ app/src/main/res/layout/activity_fresh.xml | 76 ++ app/src/main/res/layout/activity_genres.xml | 75 ++ app/src/main/res/layout/activity_main.xml | 32 + .../main/res/layout/activity_play_detail.xml | 48 + app/src/main/res/layout/activity_rankings.xml | 69 ++ app/src/main/res/layout/activity_setting.xml | 93 ++ app/src/main/res/layout/activity_splash.xml | 6 + .../res/layout/close_episode_recommend.xml | 87 ++ .../main/res/layout/custom_banner_view.xml | 64 ++ .../res/layout/custom_banner_view_bottom.xml | 91 ++ .../layout/detail_player_view_controller.xml | 150 ++++ app/src/main/res/layout/dialog_loading.xml | 32 + app/src/main/res/layout/dialog_series.xml | 94 ++ .../main/res/layout/dialog_un_collection.xml | 88 ++ app/src/main/res/layout/fragment_home.xml | 324 +++++++ app/src/main/res/layout/fragment_hot.xml | 57 ++ app/src/main/res/layout/fragment_me.xml | 446 ++++++++++ app/src/main/res/layout/fragment_reels.xml | 21 + app/src/main/res/layout/fragment_saved.xml | 6 + .../res/layout/include_detail_player_view.xml | 10 + .../main/res/layout/include_player_view.xml | 10 + app/src/main/res/layout/item_dominant_ceo.xml | 32 + app/src/main/res/layout/item_fresh.xml | 83 ++ app/src/main/res/layout/item_genres.xml | 63 ++ app/src/main/res/layout/item_genres_img.xml | 24 + app/src/main/res/layout/item_home_for_you.xml | 18 + app/src/main/res/layout/item_hot.xml | 39 + app/src/main/res/layout/item_num_data.xml | 27 + app/src/main/res/layout/item_ranks.xml | 122 +++ app/src/main/res/layout/item_video.xml | 7 + app/src/main/res/layout/layout_emptyview.xml | 49 ++ .../main/res/layout/layout_network_error.xml | 68 ++ app/src/main/res/layout/layout_no_drama.xml | 68 ++ app/src/main/res/layout/line_layout.xml | 12 + .../layout/new_detail_player_banner_view.xml | 31 + .../recommend_player_view_controller.xml | 138 +++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 4486 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 12814 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 6104 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 2790 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 7286 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 3600 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 6772 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 20010 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 9304 bytes .../res/mipmap-xxhdpi/ic_btn_me_about.png | Bin 0 -> 979 bytes .../ic_btn_me_delete_account.png | Bin 0 -> 596 bytes .../mipmap-xxhdpi/ic_btn_me_help_center.png | Bin 0 -> 1060 bytes .../res/mipmap-xxhdpi/ic_btn_me_language.png | Bin 0 -> 1435 bytes .../ic_btn_me_privacy_policy.png | Bin 0 -> 884 bytes .../ic_btn_me_user_agreement.png | Bin 0 -> 720 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 11648 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 37894 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 16444 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 16862 bytes .../ic_launcher_foreground.webp | Bin 0 -> 67742 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 22752 bytes app/src/main/res/values/colors.xml | 17 + app/src/main/res/values/strings.xml | 22 + app/src/main/res/values/styles.xml | 13 + app/src/main/res/values/themes.xml | 23 + app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + app/src/main/res/xml/net.xml | 6 + build.gradle.kts | 5 + gradle.properties | 25 + gradle/libs.versions.toml | 83 ++ gradle/wrapper/gradle-wrapper.properties | 8 + local.properties | 8 + settings.gradle.kts | 35 + 228 files changed, 11578 insertions(+) create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseFragment.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/basics/MyApplication.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/basics/MyContentProvider.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridge.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridgeDetail.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/BaseEventBus.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/BaseRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/BuyVideoRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CategoriesDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CollectionRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderReq.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerBuyRecordsRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerOrderRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/DetailsRecommendRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/ExampleKeywordDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/FbNotificationReq.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/FreeSeriesMoreRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HistoryDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerAndNineSquarepRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerBean.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBestSellersData.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeModuleBean.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayNoPaginateRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeRankingRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopWeekRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/JsonInfo.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/LoginReq.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/LoginRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/MainDataHis.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/NoticeNumRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/PayReq.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/PayRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/PaySettingRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/PlayerDetailDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/RecommendDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/ReelCrushJsInfo.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/RewardCoinsRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/ShortListCategoryDataInfo.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/TabEntity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/UploadHistoryReq.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/UserInfoRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/UserRegisterRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/data/VideoListDataRes.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/FreshAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/GenresAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/GenresItemAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerBottomAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HomeForYouAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HomeMostAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/HotAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/RankAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/main/SplashActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/AppService.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/Decryption.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/MainViewModel.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/CustomRoundedCorners.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/FfmpegRenderersFactory.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/ListItemsVisibilityCalculator.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/LoadingLine.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/OnSnapHelperCurrentListener.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/PosterStyleImageView.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/RecyclerViewScrollerDetection.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/RotateDownPageTransformer.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/ScrollTextView.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/ui/UnFavoriteDialog.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/utils/Memory.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/utils/PackageUtils.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/video/NewRecommendBannerAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDataAdapter.kt create mode 100644 app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDialogFragment.kt create mode 100644 app/src/main/res/drawable-xxhdpi/bg_rank_1.png create mode 100644 app/src/main/res/drawable-xxhdpi/bg_rank_2.png create mode 100644 app/src/main/res/drawable-xxhdpi/bg_rank_3.png create mode 100644 app/src/main/res/drawable-xxhdpi/bg_rank_other.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_me_top.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_avatar.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_des_bg.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_back.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_collection_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_collection_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_play.webp create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_search.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_example_stop.webp create mode 100644 app/src/main/res/drawable-xxhdpi/iv_fresh.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_fresh_play.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_genre.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_genres_1.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_genres_2.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_genres_3.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_genres_4.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_home_bg.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_home_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_home_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_hot.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_hot_top.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_hot_txt_l.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_hot_txt_r.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_indicator_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_indicator_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_item_play.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_item_rank_heat.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_item_rank_heat_1.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_me_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_me_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_me_right.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_no_data.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_no_network.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_no_result.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_placeholder_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_placeholder_v.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_rank_top_bg.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_reels_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_reels_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_saved_h.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_saved_n.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_splash.png create mode 100644 app/src/main/res/drawable-xxhdpi/iv_top.png create mode 100644 app/src/main/res/drawable/bg_circle.xml create mode 100644 app/src/main/res/drawable/bg_content.xml create mode 100644 app/src/main/res/drawable/bg_example_num_h.xml create mode 100644 app/src/main/res/drawable/bg_example_num_n.xml create mode 100644 app/src/main/res/drawable/bg_example_seekbar_player.xml create mode 100644 app/src/main/res/drawable/bg_example_shape_seekbar_player.xml create mode 100644 app/src/main/res/drawable/bg_genres.xml create mode 100644 app/src/main/res/drawable/bg_home_tab.xml create mode 100644 app/src/main/res/drawable/bg_home_top.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/layout/activity_about.xml create mode 100644 app/src/main/res/layout/activity_fresh.xml create mode 100644 app/src/main/res/layout/activity_genres.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_play_detail.xml create mode 100644 app/src/main/res/layout/activity_rankings.xml create mode 100644 app/src/main/res/layout/activity_setting.xml create mode 100644 app/src/main/res/layout/activity_splash.xml create mode 100644 app/src/main/res/layout/close_episode_recommend.xml create mode 100644 app/src/main/res/layout/custom_banner_view.xml create mode 100644 app/src/main/res/layout/custom_banner_view_bottom.xml create mode 100644 app/src/main/res/layout/detail_player_view_controller.xml create mode 100644 app/src/main/res/layout/dialog_loading.xml create mode 100644 app/src/main/res/layout/dialog_series.xml create mode 100644 app/src/main/res/layout/dialog_un_collection.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_hot.xml create mode 100644 app/src/main/res/layout/fragment_me.xml create mode 100644 app/src/main/res/layout/fragment_reels.xml create mode 100644 app/src/main/res/layout/fragment_saved.xml create mode 100644 app/src/main/res/layout/include_detail_player_view.xml create mode 100644 app/src/main/res/layout/include_player_view.xml create mode 100644 app/src/main/res/layout/item_dominant_ceo.xml create mode 100644 app/src/main/res/layout/item_fresh.xml create mode 100644 app/src/main/res/layout/item_genres.xml create mode 100644 app/src/main/res/layout/item_genres_img.xml create mode 100644 app/src/main/res/layout/item_home_for_you.xml create mode 100644 app/src/main/res/layout/item_hot.xml create mode 100644 app/src/main/res/layout/item_num_data.xml create mode 100644 app/src/main/res/layout/item_ranks.xml create mode 100644 app/src/main/res/layout/item_video.xml create mode 100644 app/src/main/res/layout/layout_emptyview.xml create mode 100644 app/src/main/res/layout/layout_network_error.xml create mode 100644 app/src/main/res/layout/layout_no_drama.xml create mode 100644 app/src/main/res/layout/line_layout.xml create mode 100644 app/src/main/res/layout/new_detail_player_banner_view.xml create mode 100644 app/src/main/res/layout/recommend_player_view_controller.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_about.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_delete_account.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_help_center.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_language.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_privacy_policy.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_btn_me_user_agreement.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/main/res/xml/net.xml create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 local.properties create mode 100644 settings.gradle.kts diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..da6ad36 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,109 @@ +import java.text.SimpleDateFormat +import java.util.Date + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) +// id("com.google.gms.google-services") +// id("com.google.firebase.firebase-perf") +} + +android { + namespace = "com.jia.er.nebuluxe.app" + compileSdk = 35 + + defaultConfig { + applicationId = "com.jia.er.nebuluxe.app" + minSdk = 24 + targetSdk = 35 + versionCode = 1 + versionName = "1.0.0" + } + + buildTypes { + debug { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) +// signingConfig = signingConfigs.getByName("debug") + } + release { + isMinifyEnabled = true + isShrinkResources = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures { + buildConfig = true + viewBinding = true + } + android.applicationVariants.all { + val buildType = this.buildType.name + val date = SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(Date()) + outputs.all { + if (this is com.android.build.gradle + .internal.api.ApkVariantOutputImpl + ) { + this.outputFileName = "Nebuluxe" + + "_${android.defaultConfig.versionName}_${android.defaultConfig.versionCode}_${date}_${buildType}.apk" + } + } + } + +} + +dependencies { + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.lifecycle.viewmodel.ktx) + implementation(libs.material) + implementation(libs.com.github.wuao.flycotablayout2) + implementation(libs.io.github.youth5201314.banner) + implementation(libs.io.github.cymchad.baserecyclerviewadapterhelper4) + implementation(libs.com.github.bumptech.glide.glide2) + implementation(libs.org.greenrobot.eventbus3) + implementation(libs.androidx.media3.media3.exoplayer2) + implementation(libs.androidx.media3.media3.exoplayer.dash2) + implementation(libs.androidx.media3.media3.ui2) + implementation(libs.androidx.media3.media3.exoplayer.hls2) + implementation(libs.androidx.media3.media3.exoplayer.rtsp2) + implementation(libs.squareup.okhttp) + implementation(libs.squareup.logging.interceptor) + implementation(libs.squareup.retrofit) + implementation(libs.squareup.converter.gson) + implementation(libs.com.tencent.mmkv) + implementation(libs.androidx.lifecycle.lifecycle.livedata.ktx3) + implementation(libs.androidx.lifecycle.lifecycle.extensions4) + implementation(libs.scwang90.refresh.layout.kernel) + implementation(libs.scwang90.refresh.header.material) + implementation(libs.scwang90.refresh.footer.classics) + implementation(libs.com.getkeepsafe.relinker.relinker) + implementation(libs.utilcodex) + implementation(libs.shapeblurview) + implementation(libs.com.google.android.flexbox.flexbox) + implementation(libs.play.services.ads.identifier) + implementation("com.github.getActivity:ShapeView:9.8") +// implementation(libs.android.billing) +// implementation(platform(libs.google.firebase.bom)) +// implementation(libs.google.firebase.messaging.ktx) +// implementation(libs.google.firebase.analytics.ktx) +// implementation(libs.firebase.perf) +// implementation(libs.adjust.android) +// implementation(libs.adjust.android.webbridge) +// implementation(libs.com.android.installreferrer.installreferrer) +// implementation("com.facebook.android:facebook-android-sdk:17.0.2") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7ebc1bb --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseActivity.kt new file mode 100644 index 0000000..aad71ec --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseActivity.kt @@ -0,0 +1,141 @@ +package com.jia.er.nebuluxe.app.basics + +import android.app.Dialog +import android.content.Context +import android.content.pm.ActivityInfo +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Build +import android.os.Bundle +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.InputMethodManager +import android.widget.EditText +import android.widget.FrameLayout +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.viewbinding.ViewBinding +import com.blankj.utilcode.util.BarUtils +import com.jia.er.nebuluxe.app.R + +abstract class BaseActivity : AppCompatActivity() { + lateinit var binding: BV + private var networkErrorView: View? = null + private var noDramaView: View? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = getViewBinding() + val container = FrameLayout(this).apply { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + addView( + binding.root, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + } + setContentView(container) + networkErrorView = + layoutInflater.inflate(R.layout.layout_network_error, container, false).apply { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + visibility = View.INVISIBLE + findViewById(R.id.tv_example_retry)?.setOnClickListener { + onRetry() + } + } + container.addView(networkErrorView) + noDramaView = + layoutInflater.inflate(R.layout.layout_no_drama, container, false).apply { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + visibility = View.INVISIBLE + findViewById(R.id.tv_example_retry)?.setOnClickListener { + onReturn() + } + } + container.addView(noDramaView) + BarUtils.transparentStatusBar(this) + BarUtils.setStatusBarLightMode(this, false) + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + top() + center() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + ViewCompat.setOnApplyWindowInsetsListener(container) { v, insets -> + val systemInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars()) + v.setPadding(0, 0, 0, systemInsets.bottom) + window.navigationBarColor = ContextCompat.getColor(this, R.color.black) + insets + } + } + } + + protected abstract fun top() + protected abstract fun center() + protected abstract fun getViewBinding(): BV + + protected open fun onRetry() { + } + + protected open fun onReturn() { + } + + fun showNetError() { + networkErrorView?.visibility = View.VISIBLE + } + + fun hideNetError() { + networkErrorView?.visibility = View.INVISIBLE + } + + fun showNoDrama(){ + noDramaView?.visibility = View.VISIBLE + } + + private var loadingDialog: Dialog? = null + + protected open fun showLoading( + message: String = "Loading..." + ) { + if (loadingDialog?.isShowing == true) return + + loadingDialog = Dialog(this, R.style.FullScreenLoadingDialog).apply { + setContentView(R.layout.dialog_loading) + window?.apply { + setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + decorView.setBackgroundColor(Color.argb(150, 0, 0, 0)) + } + setCancelable(true) + findViewById(R.id.tv_loading_text)?.text = message + } + loadingDialog?.show() + } + + protected open fun hideLoading() { + loadingDialog?.takeIf { it.isShowing }?.dismiss() + loadingDialog = null + } + + fun showKeyBord(mEditText: EditText, mContext: Context) { + val imm = mContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN) + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY) + } + + fun hideKeyBord(mEditText: EditText, mContext: Context) { + val imm = mContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(mEditText.windowToken, 0) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseFragment.kt new file mode 100644 index 0000000..c687b90 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/BaseFragment.kt @@ -0,0 +1,99 @@ +package com.jia.er.nebuluxe.app.basics + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.TextView +import androidx.appcompat.widget.AppCompatTextView +import androidx.fragment.app.Fragment +import androidx.viewbinding.ViewBinding +import com.jia.er.nebuluxe.app.R + +abstract class BaseFragment : Fragment() { + lateinit var binding: VB + var networkErrorView: View? = null + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = getViewBinding() + val layout = FrameLayout(requireContext()).apply { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + addView( + binding.root, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + } + networkErrorView = + layoutInflater.inflate(R.layout.layout_network_error, layout, false).apply { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + visibility = View.INVISIBLE + findViewById(R.id.tv_example_retry)?.setOnClickListener { + onRetry() + } + } + layout.addView(networkErrorView) + return layout + } + + protected open fun onRetry() { + } + + fun showNetError() { + networkErrorView?.visibility = View.VISIBLE + } + + fun hideNetError() { + networkErrorView?.visibility = View.INVISIBLE + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + top() + center() + } + + protected abstract fun top() + protected abstract fun center() + protected abstract fun getViewBinding(): VB + + private var loadingDialog: Dialog? = null + + protected open fun showLoading( + message: String = "Loading..." + ) { + if (loadingDialog?.isShowing == true) return + + loadingDialog = Dialog(requireContext(), R.style.FullScreenLoadingDialog).apply { + setContentView(R.layout.dialog_loading) + window?.apply { + setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + decorView.setBackgroundColor(Color.argb(150, 0, 0, 0)) + } + setCancelable(true) + + findViewById(R.id.tv_loading_text)?.text = message + } + loadingDialog?.show() + } + + protected open fun hideLoading() { + loadingDialog?.takeIf { it.isShowing }?.dismiss() + loadingDialog = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt new file mode 100644 index 0000000..1e1425b --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt @@ -0,0 +1,60 @@ +package com.jia.er.nebuluxe.app.basics + + +object Constants { + var isUat = false + const val Constants_BASE_URL_RES = "https://api-nebuluxetv.nebuluxetv.com/xe/" + const val CONSTANTS_AuthorizationExample = "Authorization" + const val CONSTANTS_device_id = "device-id" + const val CONSTANTS_device_gaid = "device-gaid" + const val CONSTANTS_app_name = "app-name" + const val CONSTANTS_app_version = "app-version" + const val CONSTANTS_system_type = "system-type" + const val CONSTANTS_lang_key = "lang-key" + const val CONSTANTS_time_zone = "time-zone" + const val CONSTANTS_model = "model" + const val CONSTANTS_brand = "brand" + const val CONSTANTS_edit = "CONSTANTS_edit" + const val CONSTANTS_system_version = "system-version" + const val CONSTANTS_auth_refresh = "CONSTANTS_auth_refresh" + const val CONSTANTS_User_STRING = "CONSTANTS_User_STRING" + const val CONSTANTS_SEARCH_STRINGExample = "searchString" + const val CONSTANTS_main_stop = "CONSTANTS_main_stop" + const val CONSTANTS_short_play_id = "CONSTANTS_short_play_id" + const val Constants_Episodes_Series_Data_currentPositionExample = + "Constants_Episodes_Series_Data_currentPositionExample" + const val Constants_Episodes_Series_Data_ListExample = + "Constants_Episodes_Series_Data_ListExample" + const val Constants_Episodes_Series_DataExample = "Constants_Episodes_Series_DataExample" + const val CONSTANTS_activity_id = "activity_id" + const val CONSTANTS_refresh_me = "CONSTANTS_refresh_me" + const val Constants_DDL_Url = "Constants_DDL_Url" + const val CONSTANTS_leaveApp = "CONSTANTS_leaveApp" + const val CONSTANTS_enterTheApp = "CONSTANTS_enterTheApp" + const val CONSTANTS_onLine = "CONSTANTS_onLine" + const val CONSTANTS_examplePayReq = "CONSTANTS_examplePayReq" + const val CONSTANTS_Episode = "CONSTANTS_Episode" + const val CONSTANTS_pay_refresh = "CONSTANTS_pay_refresh" + const val CONSTANTS_collect_refresh = "CONSTANTS_collect_refresh" + const val Constants_onTokenRefresh = "onTokenRefresh" + const val Constants_getClip = "Constants_getClip" + const val CONSTANTS_web_Login = "CONSTANTS_web_Login" + const val CONSTANTS_PREF_LAST_POPUP_TIME_Notification = + "CONSTANTS_PREF_LAST_POPUP_TIME_Notification" + const val ONE_DAY_IN_MILLIS = 24 * 60 * 60 * 1000L + var CanNotification: Boolean = false + const val CONSTANTS_Detail_id = "CONSTANTS_Detail_id" + const val Constants_requestPermissions_photo = "Constants_requestPermissions_photo" + const val Constants_requestPermissions_photo_detail = + "Constants_requestPermissions_photo_detail" + const val Constants_openFeedbackDetail = "Constants_openFeedbackDetail" + const val Constants_openFeedback = "Constants_openFeedback" + const val CONSTANTS_web_notification = "CONSTANTS_web_notification" + const val feedback_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/index" + const val feedback_list_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/list" + const val feedback_detail_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/detail" + const val Constants_Main_Video_status = "Constants_Main_Video_status" + const val Constants_Main_Video_info = "Constants_Main_Video_info" + var WebRefresh: Boolean = false + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyApplication.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyApplication.kt new file mode 100644 index 0000000..d32cc1d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyApplication.kt @@ -0,0 +1,136 @@ +package com.jia.er.nebuluxe.app.basics + +import android.app.Activity +import android.app.Application +import android.content.Context +import android.os.Bundle +import android.util.Log +import com.jia.er.nebuluxe.app.BuildConfig.DEBUG +//import com.adjust.sdk.Adjust +//import com.adjust.sdk.AdjustConfig +//import com.adjust.sdk.LogLevel +//import com.adjust.sdk.OnEventTrackingFailedListener +//import com.adjust.sdk.OnEventTrackingSucceededListener +//import com.facebook.FacebookSdk +//import com.facebook.LoggingBehavior +//import com.facebook.appevents.AppEventsLogger +//import com.facebook.applinks.AppLinkData +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import org.greenrobot.eventbus.EventBus + + +class MyApplication : Application() { + private val LOG_TAG: String = "MyApplication" + + companion object { + lateinit var context: Context + var isAppInBackground = true + var countActivity = 0 + } + + override fun onCreate() { + super.onCreate() + context = this +// initAdjust() + if (DEBUG) { + registerActivityLifecycleCallbacks(AdjustLifecycleCallbacks()) + } +// registerActivityLifecycleCallbacks({ +// fun onActivityResumed(activity: Activity) { +// Log.d("onResume", activity.javaClass.simpleName) +// } +// +// } as ActivityLifecycleCallbacks?) +// GlobalScope.launch(Dispatchers.Main) { +// initFacebookSdk() +// } + + } + + // private fun initAdjust() { +// val appToken = "dmq04yk7ftvk" +// val environment = AdjustConfig.ENVIRONMENT_PRODUCTION +// val config = AdjustConfig(context, appToken, environment) +// config.setLogLevel(LogLevel.VERBOSE) +// config.onEventTrackingSucceededListener = +// OnEventTrackingSucceededListener { adjustEventSuccess -> +// Log.d(LOG_TAG, "Event recorded at " + adjustEventSuccess.timestamp) +// } +// config.onEventTrackingFailedListener = +// OnEventTrackingFailedListener { adjustEventFailure -> +// Log.v( +// LOG_TAG, +// "Event recording failed. Response: " + adjustEventFailure.message +// ) +// } +// config.setOnDeferredDeeplinkResponseListener { deeplink -> +// Log.d(LOG_TAG, "Deferred deep link callback called!") +// Log.d(LOG_TAG, "Deep link URL: $deeplink") +// Memory.getMMKV() +// .putString(Constants.Constants_DDL_Url, deeplink.toString()) +// EventBus.getDefault().post(Constants.Constants_DDL_Url) +// true +// } +// Adjust.initSdk(config) +// } +// + inner class AdjustLifecycleCallbacks : ActivityLifecycleCallbacks { + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} + override fun onActivityStarted(activity: Activity) { +// countActivity++ +// if (countActivity == 1 && isAppInBackground) { +// isAppInBackground = false +// Log.d("Lifecycle", "onActivityStarted") +// EventBus.getDefault().post(Constants.CONSTANTS_enterTheApp) +// } + } + + override fun onActivityResumed(activity: Activity) { +// Adjust.onResume() + Log.d("onResume", "=========" + activity.javaClass.simpleName + "=========") + } + + override fun onActivityPaused(activity: Activity) { +// Adjust.onPause() + } + + override fun onActivityStopped(activity: Activity) { +// countActivity-- +// if (countActivity <= 0 && !isAppInBackground) { +// isAppInBackground = true +// Log.d("Lifecycle", "onActivityStopped") +// EventBus.getDefault().post(Constants.CONSTANTS_leaveApp) +// } + } + + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + override fun onActivityDestroyed(activity: Activity) {} + } +// +// private fun initFacebookSdk() { +// FacebookSdk.setAutoInitEnabled(true) +// FacebookSdk.fullyInitialize() +// if (Constants.isUat) { +// FacebookSdk.setIsDebugEnabled(true) +// FacebookSdk.addLoggingBehavior(LoggingBehavior.APP_EVENTS) +// } +// AppEventsLogger.activateApp(this) +// AppLinkData.fetchDeferredAppLinkData( +// this +// ) { +// // Process app link data +// if (null != it) { +// Memory.getMMKV() +// .putString(Constants.Constants_DDL_Url, it.targetUri.toString()) +// Log.d( +// "initFacebookSdk", +// "fetchDeferredAppLinkData callback called!====${it.targetUri}" +// ) +// EventBus.getDefault().post(Constants.Constants_DDL_Url) +// } +// Log.d("initFacebookSdk", "fetchDeferredAppLinkData callback called!") +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyContentProvider.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyContentProvider.kt new file mode 100644 index 0000000..86b4d54 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/MyContentProvider.kt @@ -0,0 +1,65 @@ +package com.jia.er.nebuluxe.app.basics + +import android.content.ContentProvider +import android.content.ContentValues +import android.database.Cursor +import android.net.Uri +import com.getkeepsafe.relinker.ReLinker +import com.tencent.mmkv.MMKV + +class MyContentProvider : ContentProvider() { + override fun onCreate(): Boolean { + initMMKV() + return true + } + + private fun initMMKV() { + try { + context?.let { MMKV.initialize(it) } + } catch (e: Exception) { + e.printStackTrace() + try { + val dir: String = context?.filesDir?.absolutePath + "/mmkv" + MMKV.initialize(context, dir) { libName -> ReLinker.loadLibrary( + context, libName) } + } catch (e2: Exception) { + e2.printStackTrace() + } + } + } + + + + + + override fun query( + uri: Uri, + projection: Array?, + selection: String?, + selectionArgs: Array?, + sortOrder: String? + ): Cursor? { + return null + } + + override fun getType(uri: Uri): String? { + return null + } + + override fun insert(uri: Uri, values: ContentValues?): Uri? { + return null + } + + override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int { + return 0 + } + + override fun update( + uri: Uri, + values: ContentValues?, + selection: String?, + selectionArgs: Array? + ): Int { + return 0 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridge.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridge.kt new file mode 100644 index 0000000..e085da7 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridge.kt @@ -0,0 +1,130 @@ +package com.jia.er.nebuluxe.app.data + +import android.Manifest +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build +import android.webkit.JavascriptInterface +import androidx.core.content.ContextCompat +import com.jia.er.nebuluxe.app.net.Retrofit.getCurrentTimeZone +import com.jia.er.nebuluxe.app.utils.Memory +import com.jia.er.nebuluxe.app.utils.singleClick +import com.google.gson.Gson +import com.google.gson.JsonObject +import com.google.gson.JsonParser +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity +import org.greenrobot.eventbus.EventBus + +class AndroidBridge(private val context: Context) { + @JavascriptInterface + fun getUserInfo(): String { + val jsInfo = ReelCrushJsInfo( + Memory.getMMKV() + .getString(Constants.CONSTANTS_AuthorizationExample, "") + .toString(), + getCurrentTimeZone(), + Memory.getMMKV().getString(Constants.CONSTANTS_lang_key, "en") + .toString(), + "android", + Memory.getMMKV().getString(Constants.CONSTANTS_Detail_id, "") + .toString(),"theme_1" + ) + return Gson().toJson(jsInfo) + } + + @JavascriptInterface + fun js2app(string: String) { + val parser = JsonParser() + val rootJson = parser.parse(string) as JsonObject + when (rootJson.get("type").asString) { + + "open_notify" -> { + singleClick { + EventBus.getDefault().post(Constants.CONSTANTS_web_notification) + } + } + + "watch_video" -> { + singleClick { + val fromJson = Gson().fromJson(string, JsonInfo::class.java) + context.startActivity( + Intent( + context, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + fromJson.data?.short_play_id + ) + putExtra( + Constants.CONSTANTS_activity_id, + fromJson.data?.activity_id + ) + }) + } + } + + } + } + + @JavascriptInterface + fun openFeedbackDetail(id: String) { + EventBus.getDefault() + .post(BaseEventBus(Constants.Constants_openFeedbackDetail, id)) + } + + @JavascriptInterface + fun openFeedbackList() { + EventBus.getDefault() + .post(Constants.Constants_openFeedback) + } + + @JavascriptInterface + fun openPhotoPicker() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_MEDIA_IMAGES + ) == PackageManager.PERMISSION_GRANTED + ) { + openFilePicker() + } else { + EventBus.getDefault().post(Constants.Constants_requestPermissions_photo) + } + } else { + if ((ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED) + ) { + openFilePicker() + } else { + EventBus.getDefault().post(Constants.Constants_requestPermissions_photo) + } + } + + } + + + private val REQUEST_PICK_FILE: Int = 1002 + + private fun openFilePicker() { + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "image/*" + } + (context as? Activity)?.startActivityForResult(intent, REQUEST_PICK_FILE) + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridgeDetail.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridgeDetail.kt new file mode 100644 index 0000000..a18c80c --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/AndroidBridgeDetail.kt @@ -0,0 +1,79 @@ +package com.jia.er.nebuluxe.app.data + +import android.Manifest +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build +import android.webkit.JavascriptInterface +import androidx.core.content.ContextCompat +import com.jia.er.nebuluxe.app.utils.Memory +import com.google.gson.Gson +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.net.Retrofit.getCurrentTimeZone +import org.greenrobot.eventbus.EventBus + +class AndroidBridgeDetail(private val context: Context) { + @JavascriptInterface + fun getUserInfo(): String { + val moviaJsInfo = ReelCrushJsInfo( + Memory.getMMKV() + .getString(Constants.CONSTANTS_AuthorizationExample, "") + .toString(), + getCurrentTimeZone(), + Memory.getMMKV().getString(Constants.CONSTANTS_lang_key, "en") + .toString(), + "android", + Memory.getMMKV().getString(Constants.CONSTANTS_Detail_id, "") + .toString(),"theme_1" + ) + return Gson().toJson(moviaJsInfo) + } + + + @JavascriptInterface + fun openPhotoPicker() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_MEDIA_IMAGES + ) == PackageManager.PERMISSION_GRANTED + ) { + openFilePicker() + } else { + EventBus.getDefault().post(Constants.Constants_requestPermissions_photo_detail) + } + } else { + if ((ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED && + ContextCompat.checkSelfPermission( + context, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED) + ) { + openFilePicker() + } else { + EventBus.getDefault().post(Constants.Constants_requestPermissions_photo_detail) + } + } + + } + + + private val REQUEST_PICK_FILE: Int = 1003 + + private fun openFilePicker() { + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "image/*" + } + (context as? Activity)?.startActivityForResult(intent, REQUEST_PICK_FILE) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseEventBus.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseEventBus.kt new file mode 100644 index 0000000..e64593d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseEventBus.kt @@ -0,0 +1,3 @@ +package com.jia.er.nebuluxe.app.data + +data class BaseEventBus(val code: String, val data: T) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseRes.kt new file mode 100644 index 0000000..b6133d1 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/BaseRes.kt @@ -0,0 +1,6 @@ +package com.jia.er.nebuluxe.app.data + +data class BaseRes( + val code: Int, + val msg: String, + val data: T?) \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/BuyVideoRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/BuyVideoRes.kt new file mode 100644 index 0000000..258177c --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/BuyVideoRes.kt @@ -0,0 +1,7 @@ +package com.jia.er.nebuluxe.app.data + +data class BuyVideoRes( + val status: String, + val coin_left_total: Int, + val send_coin_left_total: Int +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CategoriesDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CategoriesDataRes.kt new file mode 100644 index 0000000..c17f9a6 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CategoriesDataRes.kt @@ -0,0 +1,11 @@ +package com.jia.er.nebuluxe.app.data + +class CategoriesDataRes( + val list: ArrayList +) { + + data class Item8( + val id: Int, + val name: String + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CollectionRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CollectionRes.kt new file mode 100644 index 0000000..07eaf6d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CollectionRes.kt @@ -0,0 +1,24 @@ +package com.jia.er.nebuluxe.app.data + +data class CollectionRes( + val list: List, + val pagination: Pagination +) { + + data class CollectionData( + val description: String, + val episode_total: Int, + val image_url: String, + val name: String, + val short_play_id: Int, + val current_episode: Int, + val short_play_video_id: Int + ) + + data class Pagination( + val current_page: Int, + val page_size: Int, + val page_total: Int, + val total_size: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderReq.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderReq.kt new file mode 100644 index 0000000..d9a4043 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderReq.kt @@ -0,0 +1,8 @@ +package com.jia.er.nebuluxe.app.data + +data class CreateOrderReq( + val pay_setting_id: String, + val payment_channel: String, + val short_play_id: Int, + val video_id: Int +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderRes.kt new file mode 100644 index 0000000..b01373b --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CreateOrderRes.kt @@ -0,0 +1,5 @@ +package com.jia.er.nebuluxe.app.data + +data class CreateOrderRes( + val order_code: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerBuyRecordsRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerBuyRecordsRes.kt new file mode 100644 index 0000000..ceb3463 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerBuyRecordsRes.kt @@ -0,0 +1,18 @@ +package com.jia.er.nebuluxe.app.data + +class CustomerBuyRecordsRes( + val list: List +) { + + data class Data( + val coin_type: Int, + val coins: Int, + val created_at: String, + val episode: Int, + val image_url: String, + val is_grounding: Int, + val name: String, + val short_play_id: Int, + val short_play_video_id: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerOrderRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerOrderRes.kt new file mode 100644 index 0000000..c732cc3 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/CustomerOrderRes.kt @@ -0,0 +1,20 @@ +package com.jia.er.nebuluxe.app.data + +data class CustomerOrderRes( + val list: List, + val pagination: Pagination +) { + + data class Item0( + val created_at: String, + val type: String, + val value: String + ) + + data class Pagination( + val current_page: Int, + val page_size: Int, + val page_total: Int, + val total_size: Int + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/DetailsRecommendRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/DetailsRecommendRes.kt new file mode 100644 index 0000000..f0e28b4 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/DetailsRecommendRes.kt @@ -0,0 +1,28 @@ +package com.jia.er.nebuluxe.app.data + +data class DetailsRecommendRes( + val brief: String, + val description: String, + val list: List, + val tag: String, + val title: String +) { + + data class Item( + val all_coins: Int, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val video_url: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val short_id: Int, + val short_play_id: Int?, + val tag_type: String, + val watch_total: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/ExampleKeywordDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/ExampleKeywordDataRes.kt new file mode 100644 index 0000000..28100e2 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/ExampleKeywordDataRes.kt @@ -0,0 +1,30 @@ +package com.jia.er.nebuluxe.app.data + +class ExampleKeywordDataRes( + val list: List, +) { + + data class KeywordData( + val all_coins: Int, + val buy_type: Int, + val categoryList: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Long, + val search_click_total: Int, + ) + + data class Category( + val id: Int, + val name: String + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/FbNotificationReq.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/FbNotificationReq.kt new file mode 100644 index 0000000..ea9a8ba --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/FbNotificationReq.kt @@ -0,0 +1,3 @@ +package com.jia.er.nebuluxe.app.data + +data class FbNotificationReq(val is_open_notice: String) \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/FreeSeriesMoreRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/FreeSeriesMoreRes.kt new file mode 100644 index 0000000..8c22d69 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/FreeSeriesMoreRes.kt @@ -0,0 +1,24 @@ +package com.jia.er.nebuluxe.app.data + +data class FreeSeriesMoreRes( + val list: List +) { + + data class Item9( + val all_coins: Int, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HistoryDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HistoryDataRes.kt new file mode 100644 index 0000000..32d1aab --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HistoryDataRes.kt @@ -0,0 +1,26 @@ +package com.jia.er.nebuluxe.app.data + +class HistoryDataRes( + val list: List, + val pagination: Pagination +) { + + data class Data( + val description: String, + val episode_total: Int, + val category: List, + val image_url: String, + val name: String, + val short_play_id: Int, + var is_collect: Int, + val current_episode: Int, + val short_play_video_id: Int + ) + + data class Pagination( + val current_page: Int, + val page_size: Int, + val page_total: Int, + val total_size: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerAndNineSquarepRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerAndNineSquarepRes.kt new file mode 100644 index 0000000..29cd9bd --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerAndNineSquarepRes.kt @@ -0,0 +1,30 @@ +package com.jia.er.nebuluxe.app.data + +data class HomeBannerAndNineSquarepRes( + val arrangement: String, + val list: List, + val title: String +) { + + data class Item0( + val all_coins: Int, + val buy_type: Int, + val category: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val ffmpeg_id: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val jump_ffmpeg_id: Int, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val video_url: String, + val watch_total: Int + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerBean.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerBean.kt new file mode 100644 index 0000000..98ea271 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBannerBean.kt @@ -0,0 +1,21 @@ +package com.jia.er.nebuluxe.app.data + +data class HomeBannerBean( + val all_coins: Any, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val video_url: String, + val watch_total: Int, + val category: List +) \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBestSellersData.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBestSellersData.kt new file mode 100644 index 0000000..f68d8e9 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeBestSellersData.kt @@ -0,0 +1,28 @@ +package com.jia.er.nebuluxe.app.data + + +class HomeBestSellersData : ArrayList() { + data class HomeBestSellersDataItem( + val all_coins: String, + val buy_type: Int, + val categoryList: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int + ) + + data class Category( + val id: Int, + val name: String + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeModuleBean.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeModuleBean.kt new file mode 100644 index 0000000..be9c517 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeModuleBean.kt @@ -0,0 +1,13 @@ +package com.jia.er.nebuluxe.app.data + +import com.google.gson.JsonElement + + +class HomeModuleBean( + val list: List, +) { + data class RecommandDataBean( + val module_key :String, + val data: JsonElement + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayNoPaginateRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayNoPaginateRes.kt new file mode 100644 index 0000000..ac60f5d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayNoPaginateRes.kt @@ -0,0 +1,25 @@ +package com.jia.er.nebuluxe.app.data + +class HomeNewShortPlayNoPaginateRes( + val list: List +) { + + data class Item8( + val all_coins: Int, + val buy_type: Int, + val category: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayRes.kt new file mode 100644 index 0000000..d8c093d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeNewShortPlayRes.kt @@ -0,0 +1,61 @@ +package com.jia.er.nebuluxe.app.data + +class HomeNewShortPlayRes( + val category_list: List, + val pagination: Pagination, + val ranking_list: List, + val short_play_list: MutableList +) { + + data class Category( + val category_id: Int, + val category_name: String + ) + + data class Pagination( + val current_page: Int, + val page_size: Int, + val page_total: Int, + val total_size: Int + ) + + data class Ranking( + val all_coins: Int, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int + ) + + data class ShortPlay( + val all_coins: Int, + val buy_type: Int, + val category: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + var view_type: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int, + var ranking_list: List, + var category_list: List + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeRankingRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeRankingRes.kt new file mode 100644 index 0000000..359d273 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeRankingRes.kt @@ -0,0 +1,25 @@ +package com.jia.er.nebuluxe.app.data + +class HomeRankingRes( + val list: List +) { + + data class Item7( + val all_coins: Int, + val buy_type: Int, + val category: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Long + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopRes.kt new file mode 100644 index 0000000..d50cc23 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopRes.kt @@ -0,0 +1,30 @@ +package com.jia.er.nebuluxe.app.data + +data class HomeTopRes( + val category: List, + val hotData: List +) { + + data class Category( + val category_id: Int, + val category_name: String + ) + + data class HotData( + val all_coins: Int, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopWeekRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopWeekRes.kt new file mode 100644 index 0000000..e4b1c32 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/HomeTopWeekRes.kt @@ -0,0 +1,25 @@ +package com.jia.er.nebuluxe.app.data + +data class HomeTopWeekRes( + val list: List +){ + +data class Item8( + val all_coins: String, + val buy_type: Int, + val category: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val search_click_total: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val video_url: String, + val watch_total: Int +)} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/JsonInfo.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/JsonInfo.kt new file mode 100644 index 0000000..d2188bc --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/JsonInfo.kt @@ -0,0 +1,14 @@ +package com.jia.er.nebuluxe.app.data + +class JsonInfo( + val `data`: Data?, + val is_complete: Boolean, + val is_show: Int, + val type: String +) { + + data class Data( + val activity_id: Int, + val short_play_id: Int? + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginReq.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginReq.kt new file mode 100644 index 0000000..e3f84b5 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginReq.kt @@ -0,0 +1,10 @@ +package com.jia.er.nebuluxe.app.data + +data class LoginReq( + val avator: String, + val email: String, + val family_name: String, + val giving_name: String, + val platform: String, + val third_id: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginRes.kt new file mode 100644 index 0000000..8b70619 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/LoginRes.kt @@ -0,0 +1,6 @@ +package com.jia.er.nebuluxe.app.data + +data class LoginRes( + val customer_id: String, + val token: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/MainDataHis.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/MainDataHis.kt new file mode 100644 index 0000000..1d9dbf4 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/MainDataHis.kt @@ -0,0 +1,8 @@ +package com.jia.er.nebuluxe.app.data + +data class MainDataHis( + val episode_total: String, + val video_id: Int, + val video_last: String, + val video_img: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/NoticeNumRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/NoticeNumRes.kt new file mode 100644 index 0000000..cb8983d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/NoticeNumRes.kt @@ -0,0 +1,5 @@ +package com.jia.er.nebuluxe.app.data + +data class NoticeNumRes( + val feedback_notice_num: Int +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/PayReq.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/PayReq.kt new file mode 100644 index 0000000..cfd9d8e --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/PayReq.kt @@ -0,0 +1,11 @@ +package com.jia.er.nebuluxe.app.data + +data class PayReq( + val order_code: String, + val pay_setting_id: String,//id + val pkg_name: String, + val product_id: String,//template id + val purchases_token: String, + val transaction_id: String, + val show_money: String, +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/PayRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/PayRes.kt new file mode 100644 index 0000000..3e97d50 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/PayRes.kt @@ -0,0 +1,8 @@ +package com.jia.er.nebuluxe.app.data + +data class PayRes( + val is_backhaul: Int, + val money: String, + val order_code: String, + val status: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/PaySettingRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/PaySettingRes.kt new file mode 100644 index 0000000..c1f64c6 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/PaySettingRes.kt @@ -0,0 +1,68 @@ +package com.jia.er.nebuluxe.app.data + +class PaySettingRes( + val list_coins: List, + val sort: List, + val list_sub_vip: List, +) { + + data class Coins( + val android_template_id: String, + val backhaul_price: String, + val brief: String, + val buy_type: String, + val coins: Int, + val created_at: String, + val currency: String, + var currency_goolge: String?, + val description: String, + val id: Int, + val ios_template_id: String, + val corner_marker: String, + val lang_id: Int, + val origin_price: String, + val platform: String, + val price: String, + var price_google: String?, + val send_coins: Int, + val sort: Int, + val status: String, + val title: String, + val size: String, + val translate_key: String, + val updated_at: String, + val vip_type: String + ) + + data class Vip( + val android_template_id: String, + val backhaul_price: String, + val brief: String, + val short_type: String, + val buy_type: String, + val coins: Int, + val corner_marker: String, + val created_at: String, + val currency: String, + var currency_goolge: String?, + val description: String, + val id: Int, + val ios_template_id: String, + val lang_id: Int, + val origin_price: String, + val platform: String, + val price: String, + var price_google: String?, + val send_coins: Int, + val send_coin_ttl: Int, + val sort: Int, + var show: Int, + val status: String, + val title: String, + val translate_key: String, + val updated_at: String, + val auto_sub: String, + var vip_type: String, + var vip_type_key: String, + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/PlayerDetailDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/PlayerDetailDataRes.kt new file mode 100644 index 0000000..4cc98fd --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/PlayerDetailDataRes.kt @@ -0,0 +1,160 @@ +package com.jia.er.nebuluxe.app.data + +import android.os.Parcel +import android.os.Parcelable + +data class PlayerDetailDataRes( + val episodeList: List, + val is_collect: Boolean, + val show_share_coin: Boolean, + val share_coin: Int, + val install_coins: Int, + val unlock_video_ad_count: Int, + val revolution: Int, + val discount: Int, + var jump_type: Int, + var jump_short_play_id: Int, + var business_model: String, + val shortPlayInfo: ShortPlayInfo, + val video_info: VideoInfo +) { + + data class Episode( + val coins: Int, + val episode: Int, + val id: Int, + var is_lock: Boolean, + val is_vip: Int, + val short_play_id: Int, + val short_play_video_id: Int, + val video_url: String, + val vip_coins: Int, + var play_seconds: String?, + var shortPlayInfo: ShortPlayInfo?, + var promise_view_ad: Int, + ): Parcelable { + constructor(parcel: Parcel) : this( + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readByte() != 0.toByte(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readString().toString(), + parcel.readInt(), + parcel.readString(), + parcel.readParcelable(ShortPlayInfo::class.java.classLoader), + parcel.readInt() + ) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeInt(coins) + parcel.writeInt(episode) + parcel.writeInt(id) + parcel.writeByte(if (is_lock) 1 else 0) + parcel.writeInt(is_vip) + parcel.writeInt(short_play_id) + parcel.writeInt(short_play_video_id) + parcel.writeString(video_url) + parcel.writeInt(vip_coins) + parcel.writeString(play_seconds) + parcel.writeParcelable(shortPlayInfo, flags) + parcel.writeInt(promise_view_ad) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): Episode { + return Episode(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + + + } + + data class ShortPlayInfo( + val all_coins: Int, + val buy_type: Int, + var collect_total: Int, + val description: String, + val category: ArrayList?, + val episode_total: Int, + val id: Int, + val image_url: String, + var is_collect: Boolean, + val name: String, + val process: Int, + val short_id: Int, + val watch_total: Int + ): Parcelable { + constructor(parcel: Parcel) : this( + parcel.readInt(), + parcel.readInt(), + parcel.readInt(), + parcel.readString().toString(), + parcel.createStringArrayList(), + parcel.readInt(), + parcel.readInt(), + parcel.readString().toString(), + parcel.readByte() != 0.toByte(), + parcel.readString().toString(), + parcel.readInt(), + parcel.readInt(), + parcel.readInt() + ) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeInt(all_coins) + parcel.writeInt(buy_type) + parcel.writeInt(collect_total) + parcel.writeString(description) + parcel.writeStringList(category) + parcel.writeInt(episode_total) + parcel.writeInt(id) + parcel.writeString(image_url) + parcel.writeByte(if (is_collect) 1 else 0) + parcel.writeString(name) + parcel.writeInt(process) + parcel.writeInt(short_id) + parcel.writeInt(watch_total) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): ShortPlayInfo { + return ShortPlayInfo(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + + } + + data class VideoInfo( + val coins: Int, + val episode: Int, + val id: Int, + val is_vip: Int, + val short_id: Int, + val short_play_id: Int, + val short_play_video_id: Int, + val promise_view_ad: Int, + val video_url: String, + val vip_coins: Int + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/RecommendDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/RecommendDataRes.kt new file mode 100644 index 0000000..8462415 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/RecommendDataRes.kt @@ -0,0 +1,39 @@ +package com.jia.er.nebuluxe.app.data + +data class RecommendDataRes( + val list: List, + val pagination: Pagination +) { + + data class Data( + val all_price_total: Int, + val buy_type: Int, + var collect_total: Int?, + val description: String, + val episode_total: Int, + val id: Int, + val image_url: String, + var is_collect: Boolean, + val name: String, + val process: Int, + val video_info: VideoInfo?, + val watch_total: Int + ) + + data class Pagination( + val current_page: Int, + val page_size: Int, + val page_total: Int, + val total_size: Int + ) + + data class VideoInfo( + val episode: Int, + val id: Int, + val is_vip: Int, + val short_play_id: Int, + val short_play_video_id: Int, + val video_url: String, + val image_url: String + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/ReelCrushJsInfo.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/ReelCrushJsInfo.kt new file mode 100644 index 0000000..a065c7b --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/ReelCrushJsInfo.kt @@ -0,0 +1,10 @@ +package com.jia.er.nebuluxe.app.data + +data class ReelCrushJsInfo( + val token: String, + val time_zone: String, + val lang: String, + val type: String, + val id: String, + val theme: String +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/RewardCoinsRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/RewardCoinsRes.kt new file mode 100644 index 0000000..0252e1e --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/RewardCoinsRes.kt @@ -0,0 +1,14 @@ +package com.jia.er.nebuluxe.app.data + +class RewardCoinsRes(val list: List) { + data class ExampleRewardCoinsResItem( + val coins: Int, + val created_at: String, + val diff_datetime: String, + val expired_time: Int, + val id: Int, + val is_effective: Int, + val left_coins: String, + val type: String + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/ShortListCategoryDataInfo.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/ShortListCategoryDataInfo.kt new file mode 100644 index 0000000..fa843b4 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/ShortListCategoryDataInfo.kt @@ -0,0 +1,32 @@ +package com.jia.er.nebuluxe.app.data + + +class ShortListCategoryDataInfo( + val list: List, +) { + + data class CategoryListData( + + val id: Int, + val category_name: String, + val short_play_list: List + + ) + + data class ShortPlayListData( + val all_coins: Int, + val buy_type: Int, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Long + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/TabEntity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/TabEntity.kt new file mode 100644 index 0000000..8e3a05d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/TabEntity.kt @@ -0,0 +1,20 @@ +package com.jia.er.nebuluxe.app.data + +import com.flyco.tablayout.listener.CustomTabEntity + +class TabEntity(var s1: String, var i1: Int, var i2: Int) : + CustomTabEntity { + + override fun getTabTitle(): String { + return s1 + } + + override fun getTabSelectedIcon(): Int { + return i1 + } + + override fun getTabUnselectedIcon(): Int { + return i2 + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/UploadHistoryReq.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/UploadHistoryReq.kt new file mode 100644 index 0000000..9950b0e --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/UploadHistoryReq.kt @@ -0,0 +1,7 @@ +package com.jia.er.nebuluxe.app.data + +data class UploadHistoryReq( + val play_seconds: Long?, + val short_play_id: Int, + val video_id: Int? +) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/UserInfoRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/UserInfoRes.kt new file mode 100644 index 0000000..0f2e83c --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/UserInfoRes.kt @@ -0,0 +1,30 @@ +package com.jia.er.nebuluxe.app.data + +data class UserInfoRes( + val avator: String = "", + val coin_left_total: Int = 0, + val country: String = "", + val country_code: String = "", + val customer_id: String = "", + val email: String = "", + val family_name: String = "", + val fn: String = "", + val giving_name: String = "", + val id: String = "", + val ip_address: String = "0.0.0.0", + val is_guide_vip: Boolean = false, + val is_tourist: Boolean = true, + val is_vip: Boolean = false, + val ln: String = "", + val registered_days: Int = 0, + val send_coin_left_total: Int = 0, + val third_access_platform: String = "", + val vip_end_time: Int = 0, + val vip_type: String = "" +) { + companion object { + fun createWithDefaults(): UserInfoRes { + return UserInfoRes() + } + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/UserRegisterRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/UserRegisterRes.kt new file mode 100644 index 0000000..53e90b3 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/UserRegisterRes.kt @@ -0,0 +1,4 @@ +package com.jia.er.nebuluxe.app.data + +data class UserRegisterRes(val customer_id: String, + val token: String) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/data/VideoListDataRes.kt b/app/src/main/java/com/jia/er/nebuluxe/app/data/VideoListDataRes.kt new file mode 100644 index 0000000..8fc6f92 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/data/VideoListDataRes.kt @@ -0,0 +1,29 @@ +package com.jia.er.nebuluxe.app.data + +class VideoListDataRes( + val list: List, +) { + + data class VideoListData( + val all_coins: Int, + val buy_type: Int, + val categoryList: List, + val collect_total: Int, + val description: String, + val episode_total: Int, + val horizontally_img: String, + val id: Int, + val image_url: String, + val name: String, + val process: Int, + val short_id: Int, + val short_play_id: Int, + val tag_type: String, + val watch_total: Long + ) + + data class Category( + val id: Int, + val name: String + ) +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt new file mode 100644 index 0000000..85de714 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt @@ -0,0 +1,84 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.blankj.utilcode.util.NetworkUtils +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.databinding.ActivityFreshBinding +import com.jia.er.nebuluxe.app.databinding.ActivityRankingsBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity + + +class FreshActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + private var type = "new_releases" + + override fun top() { + binding?.exampleIvBack?.setOnClickListener { finish() } + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.homeRanking(type) + } else { + showNetError() + } + binding.srRank.setOnRefreshListener { + mViewModel.homeRanking(type) + } + } + + override fun center() { + mViewModel.homeRankingData.observe(this) { + if (it != null) { + if (it.data?.list?.isNotEmpty() == true) { + val homeRankTrendingAdapter = FreshAdapter() + val manager1 = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + binding?.rvRanks?.layoutManager = manager1 + binding?.rvRanks?.adapter = homeRankTrendingAdapter + homeRankTrendingAdapter?.submitList(it.data.list) + homeRankTrendingAdapter?.isStateViewEnable = true + homeRankTrendingAdapter?.setStateViewLayout(this, R.layout.layout_emptyview) + homeRankTrendingAdapter?.setOnItemClickListener { adapter, view, position -> + val data = adapter.getItem(position) as HomeRankingRes.Item7 + startActivity(Intent( + this, PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, data.short_play_id + ) + }) + } + } + binding.srRank.finishRefresh() + hideNetError() + hideLoading() + } else { + showNetError() + toast(getString(R.string.network_error)) + hideLoading() + } + } + } + + override fun getViewBinding(): ActivityFreshBinding { + return ActivityFreshBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.homeRanking(type) + } else { + toast(getString(R.string.example_no_network)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshAdapter.kt new file mode 100644 index 0000000..7dff62a --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshAdapter.kt @@ -0,0 +1,57 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatImageView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CenterCrop +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.fullspan.FullSpanAdapterType +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.ui.CustomRoundedCorners +import com.jia.er.nebuluxe.app.utils.dpToPxByFloat + + +class FreshAdapter : + BaseQuickAdapter(), + FullSpanAdapterType { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: HomeRankingRes.Item7? + ) { + Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(holder.getView(R.id.iv_cover)) + holder.setText(R.id.tv_rank_name, item?.name) + if (item?.category?.isNotEmpty() == true) { + val string = item.category[0] + holder.setText(R.id.tv_rank_tag, string) + holder.setVisible(R.id.tv_rank_tag, true) + } else { + holder.setVisible(R.id.tv_rank_tag, false) + } + val view = holder.getView(R.id.example_iv_icon_ceo) + Glide.with(context) + .load(item?.image_url).placeholder(R.drawable.iv_placeholder_v) + .transform( + CenterCrop(), + CustomRoundedCorners( + dpToPxByFloat(20, context), + 0f, + dpToPxByFloat(20, context), + dpToPxByFloat(20, context) + ) + ) + .into(view) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_fresh, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt new file mode 100644 index 0000000..98fa4bb --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt @@ -0,0 +1,101 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import android.graphics.Rect +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.blankj.utilcode.util.NetworkUtils +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo +import com.jia.er.nebuluxe.app.databinding.ActivityFreshBinding +import com.jia.er.nebuluxe.app.databinding.ActivityRankingsBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity + + +class GenresActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + + override fun top() { + binding?.exampleIvBack?.setOnClickListener { finish() } + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.userCenterRecommend() + } else { + showNetError() + } + binding.srRank.setOnRefreshListener { + mViewModel.userCenterRecommend() + } + } + + override fun center() { + mViewModel.userCenterRecommendData.observe(this) { + if (it != null) { + if (it.data?.list?.isNotEmpty() == true) { + val homeRankTrendingAdapter = GenresAdapter() + val manager1 = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + binding?.rvRanks?.layoutManager = manager1 + binding?.rvRanks?.adapter = homeRankTrendingAdapter + homeRankTrendingAdapter?.submitList(it.data.list) + binding?.rvRanks?.addItemDecoration(object : RecyclerView.ItemDecoration() { + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + if (parent.getChildPosition(view) != (it.data.list.size - 1)) { + outRect.bottom = -100 + } + } + }) + homeRankTrendingAdapter?.isStateViewEnable = true + homeRankTrendingAdapter?.setStateViewLayout(this, R.layout.layout_emptyview) + homeRankTrendingAdapter?.setOnItemClickListener { adapter, view, position -> + val data = + adapter.getItem(position) as ShortListCategoryDataInfo.CategoryListData +// startActivity(Intent( +// this, PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, data.short_play_id +// ) +// }) + } + } + binding.srRank.finishRefresh() + hideNetError() + hideLoading() + } else { + showNetError() + toast(getString(R.string.network_error)) + hideLoading() + } + } + } + + override fun getViewBinding(): ActivityFreshBinding { + return ActivityFreshBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.userCenterRecommend() + } else { + toast(getString(R.string.example_no_network)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresAdapter.kt new file mode 100644 index 0000000..4d4bba3 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresAdapter.kt @@ -0,0 +1,67 @@ +package com.jia.er.nebuluxe.app.home + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.graphics.Rect +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.fullspan.FullSpanAdapterType +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo + + +class GenresAdapter : + BaseQuickAdapter(), + FullSpanAdapterType { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: ShortListCategoryDataInfo.CategoryListData? + ) { + when (position) { + 0 -> { + holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_1) + holder.setBackgroundResource(R.id.line, R.color.E3D4FF) + } + + 1 -> { + holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_2) + holder.setBackgroundResource(R.id.line, R.color.BDF5E2) + } + + 2 -> { + holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_3) + holder.setBackgroundResource(R.id.line, R.color.FFFA80) + } + + else -> { + holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_4) + holder.setBackgroundResource(R.id.line, R.color.F0C2E1) + } + } + val view = holder.getView(R.id.rv_genres_item) + holder.setText(R.id.tv_type, item?.category_name) + holder.setText( + R.id.tv_num, + item?.short_play_list?.size.toString().plus("\n").plus("Dramas") + ) + val homeRankTrendingAdapter = GenresItemAdapter() + val manager1 = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) + view?.layoutManager = manager1 + view?.adapter = homeRankTrendingAdapter + homeRankTrendingAdapter?.submitList(item?.short_play_list) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_genres, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresItemAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresItemAdapter.kt new file mode 100644 index 0000000..7f68113 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresItemAdapter.kt @@ -0,0 +1,32 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.view.ViewGroup +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.fullspan.FullSpanAdapterType +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo + + +class GenresItemAdapter : + BaseQuickAdapter(), + FullSpanAdapterType { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: ShortListCategoryDataInfo.ShortPlayListData? + ) { + Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(holder.getView(R.id.iv_cover)) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_genres_img, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerAdapter.kt new file mode 100644 index 0000000..f0eb733 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerAdapter.kt @@ -0,0 +1,57 @@ +package com.jia.er.nebuluxe.app.home + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.HomeBannerAndNineSquarepRes +import com.youth.banner.adapter.BannerAdapter + +class HomeBannerAdapter(items: List?) : + BannerAdapter( + items + ) { + override fun onCreateHolder(parent: ViewGroup, viewType: Int): BannerViewHolder { + val view: View = LayoutInflater.from(parent.context) + .inflate(R.layout.custom_banner_view, parent, false) + view.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + return BannerViewHolder(view) + } + + + override fun onBindView( + holder: BannerViewHolder?, + data: HomeBannerAndNineSquarepRes.Item0?, + position: Int, + size: Int + ) { + val findViewById = + holder?.view?.findViewById(R.id.iv_icon_banner) + val tv_name = holder?.view?.findViewById(R.id.tv_name) + val tv_tag = holder?.view?.findViewById(R.id.tv_tag) + if (findViewById != null) { + Glide.with(holder.itemView.context) + .load(data?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(findViewById) + } + tv_name?.text = data?.name + if (data?.category?.isNotEmpty() == true) { + tv_tag?.visibility = View.VISIBLE + tv_tag?.text = data?.category[0] + } else { + tv_tag?.visibility = View.INVISIBLE + } + } + + inner class BannerViewHolder(var view: View) : RecyclerView.ViewHolder( + view + ) + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerBottomAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerBottomAdapter.kt new file mode 100644 index 0000000..fb0ab61 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeBannerBottomAdapter.kt @@ -0,0 +1,60 @@ +package com.jia.er.nebuluxe.app.home + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.HomeBannerAndNineSquarepRes +import com.jia.er.nebuluxe.app.data.HomeTopWeekRes +import com.youth.banner.adapter.BannerAdapter + +class HomeBannerBottomAdapter(items: List?) : + BannerAdapter( + items + ) { + override fun onCreateHolder(parent: ViewGroup, viewType: Int): BannerViewHolder { + val view: View = LayoutInflater.from(parent.context) + .inflate(R.layout.custom_banner_view_bottom, parent, false) + view.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + return BannerViewHolder(view) + } + + + override fun onBindView( + holder: BannerViewHolder?, + data: HomeTopWeekRes.Item8?, + position: Int, + size: Int + ) { + val findViewById = + holder?.view?.findViewById(R.id.iv_icon_banner) + val tv_name = holder?.view?.findViewById(R.id.tv_name) + val tv_tag = holder?.view?.findViewById(R.id.tv_tag) + val tv_des = holder?.view?.findViewById(R.id.tv_des) + if (findViewById != null) { + Glide.with(holder.itemView.context) + .load(data?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(findViewById) + } + tv_name?.text = data?.name + tv_des?.text = data?.description + if (data?.category?.isNotEmpty() == true) { + tv_tag?.visibility = View.VISIBLE + tv_tag?.text = data?.category[0] + } else { + tv_tag?.visibility = View.INVISIBLE + } + } + + inner class BannerViewHolder(var view: View) : RecyclerView.ViewHolder( + view + ) + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeForYouAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeForYouAdapter.kt new file mode 100644 index 0000000..4652915 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeForYouAdapter.kt @@ -0,0 +1,29 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.view.ViewGroup +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.RecommendDataRes + +class HomeForYouAdapter : + BaseQuickAdapter() { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: RecommendDataRes.Data? + ) { + Glide.with(context).load(item?.image_url) + .into(holder.getView(R.id.iv_icon)) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_home_for_you, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt new file mode 100644 index 0000000..bb2b6ed --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt @@ -0,0 +1,265 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.blankj.utilcode.util.NetworkUtils +import com.bumptech.glide.Glide +import com.google.gson.Gson +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseFragment +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.HomeBannerAndNineSquarepRes +import com.jia.er.nebuluxe.app.data.HomeBannerBean +import com.jia.er.nebuluxe.app.data.HomeTopWeekRes +import com.jia.er.nebuluxe.app.databinding.FragmentHomeBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.ui.RotateDownPageTransformer +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity +import org.greenrobot.eventbus.EventBus + + +class HomeFragment : BaseFragment() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + private var page: Int = 1 + private val gson = Gson() + override fun top() { + if (NetworkUtils.isConnected()) { + mViewModel.allModules() + } else { + EventBus.getDefault().post(Constants.CONSTANTS_main_stop) + showNetError() + } + binding?.srHome?.setOnRefreshListener { + page = 1 + mViewModel.allModules() + } + binding.tvHot.setOnClickListener { + singleClick { + startActivity( + Intent( + context, + HotActivity::class.java + )) + } + } + binding.tvTop.setOnClickListener { + singleClick { + startActivity( + Intent( + context, + RankActivity::class.java + )) + } + } + binding.tvFresh.setOnClickListener { + singleClick { + startActivity( + Intent( + context, + FreshActivity::class.java + )) + } + } + binding.tvFresh.setOnClickListener { + singleClick { + startActivity( + Intent( + context, + GenresActivity::class.java + )) + } + } + } + + private var dataList: MutableList = mutableListOf() + + override fun center() { + mViewModel.allModulesData.observe(this) { + if (it != null) { + if (it?.data?.list?.isNotEmpty() == true) { + for (item in it.data.list) { + when (item.module_key) { + "marquee" -> { + binding.root.postDelayed({ + dataList.clear() + val marqueeList = + gson.fromJson(item.data, Array::class.java) + .toList() + marqueeList?.forEach { it1 -> + dataList.add(it1.name) + } + if (dataList.isNotEmpty()) { + binding?.tvText?.setData(dataList) + } + }, 1000) + } + + "home_banner" -> { + val bannerList = + gson.fromJson(item.data, Array::class.java) + .toList() + if (bannerList?.isNotEmpty() == true) { + binding?.clFs?.visibility = View.VISIBLE + val exampleDominantCeoAdapter = HomeMostAdapter() + val layoutManager = + LinearLayoutManager( + context, + LinearLayoutManager.HORIZONTAL, + false + ) + binding?.rvFs?.layoutManager = layoutManager + binding?.rvFs?.adapter = exampleDominantCeoAdapter + binding?.rvFs?.isNestedScrollingEnabled = false + exampleDominantCeoAdapter.submitList(bannerList) + val video = bannerList[0] + Glide.with(requireContext()).load(video?.horizontally_img) + .placeholder(R.drawable.iv_placeholder_h) + .into(binding.ivFs) + binding.tvName.text = video.name + if (video.category.isNotEmpty()) { + binding.tvTag.visibility = View.VISIBLE + binding.tvTag.text = video.category[0] + } else { + binding.tvTag.visibility = View.INVISIBLE + } + binding.ivFs.setOnClickListener { + startActivity( + Intent( + context, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + video.short_play_id + ) + }) + } + exampleDominantCeoAdapter.setOnItemClickListener { adapter, view, position -> + exampleDominantCeoAdapter.currentPosition = position + val video = + adapter.getItem(position) as HomeBannerBean + Glide.with(requireContext()).load(video?.horizontally_img) + .placeholder(R.drawable.iv_placeholder_h) + .into(binding.ivFs) + binding.tvName.text = video.name + if (video.category.isNotEmpty()) { + binding.tvTag.visibility = View.VISIBLE + binding.tvTag.text = video.category[0] + } else { + binding.tvTag.visibility = View.INVISIBLE + } + binding.ivFs.setOnClickListener { + startActivity( + Intent( + context, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + video.short_play_id + ) + }) + } + exampleDominantCeoAdapter.notifyDataSetChanged() + } + + } else { + binding?.clFs?.visibility = View.GONE + } + } + + "home_v3_recommand" -> { + val homeBannerAndNineSquarepRes = + gson.fromJson( + item.data, + HomeBannerAndNineSquarepRes::class.java + ) + if (homeBannerAndNineSquarepRes?.list?.isNotEmpty() == true) { + binding?.clBanner?.visibility = View.VISIBLE + val exampleHomeBannerAdapter = + HomeBannerAdapter(homeBannerAndNineSquarepRes?.list) + binding?.bannerHome?.apply { + setAdapter(exampleHomeBannerAdapter) + setBannerGalleryEffect(65, 10, 1f) + setPageTransformer(RotateDownPageTransformer(10.5f)) + } + exampleHomeBannerAdapter.setOnBannerListener { data, position -> + startActivity( + Intent( + context, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + data?.short_play_id + ) + }) + } + } else { + binding?.clBanner?.visibility = View.GONE + } + } + + "new_recommand" -> { + val cagetoryBean = + gson.fromJson(item.data, HomeTopWeekRes::class.java) + if (cagetoryBean.list.isNotEmpty()) { + binding?.clBannerB?.visibility = View.VISIBLE + val exampleHomeBannerAdapter = + HomeBannerBottomAdapter(cagetoryBean.list) + binding?.bannerHomeB?.setBannerGalleryEffect(24, 10, 1f) + binding?.bannerHomeB?.setAdapter( + exampleHomeBannerAdapter + )?.addBannerLifecycleObserver(this) + ?.setIndicator(binding.indicatorHome, false) + exampleHomeBannerAdapter.setOnBannerListener { data, position -> + startActivity( + Intent( + context, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + data?.short_play_id + ) + }) + } + } else { + binding?.clBannerB?.visibility = View.GONE + } + } + } + } + hideLoading() + hideNetError() + binding?.srHome?.finishRefresh() + EventBus.getDefault().post(Constants.CONSTANTS_main_stop) + } + } else { + toast(getString(R.string.network_error)) + hideLoading() + binding?.srHome?.finishRefresh() + EventBus.getDefault().post(Constants.CONSTANTS_main_stop) + } + } + } + + override fun getViewBinding(): FragmentHomeBinding { + return FragmentHomeBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.allModules() + } else { + toast(getString(R.string.example_no_network)) + } + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeMostAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeMostAdapter.kt new file mode 100644 index 0000000..a3ea2fb --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeMostAdapter.kt @@ -0,0 +1,58 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.Outline +import android.view.View +import android.view.ViewGroup +import android.view.ViewOutlineProvider +import android.widget.ImageView +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.google.android.material.imageview.ShapeableImageView +import com.google.android.material.shape.RelativeCornerSize +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.HomeBannerBean + +class HomeMostAdapter : + BaseQuickAdapter() { + var currentPosition = 0 + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: HomeBannerBean? + ) { + val view = holder.getView(R.id.example_iv_icon_ceo) + Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(view) + view.scaleType = ImageView.ScaleType.CENTER_CROP + view.shapeAppearanceModel = view.shapeAppearanceModel + .toBuilder() + .setAllCornerSizes(RelativeCornerSize(0.5f)) + .build() + view.elevation = 0f + view.clipToOutline = true + view.outlineProvider = object : ViewOutlineProvider() { + override fun getOutline(view: View, outline: Outline) { + val size = minOf(view.width, view.height) + outline.setOval(0, 0, size, size) + } + } + + if (currentPosition == position) { + holder.setVisible(R.id.view, false) + } else { + holder.setVisible(R.id.view, true) + } + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_dominant_ceo, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt new file mode 100644 index 0000000..482371d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt @@ -0,0 +1,91 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.blankj.utilcode.util.NetworkUtils +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.VideoListDataRes +import com.jia.er.nebuluxe.app.databinding.FragmentHotBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity + +class HotActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + + private var hotAdapter: HotAdapter? = null + private var isLoad = false + override fun top() { + binding?.exampleIvBack?.setOnClickListener { finish() } + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.homeHot(1, 10) + } else { + showNetError() + } + binding?.srFree?.setOnRefreshListener { + mViewModel.homeHot(1, 10) + } + } + + + override fun center() { + mViewModel.homeHotData.observe(this) { + if (it != null) { + hotAdapter = HotAdapter() + val layoutManager = + StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) + binding?.rvDataFree?.layoutManager = layoutManager + binding?.rvDataFree?.adapter = hotAdapter + binding?.rvDataFree?.isNestedScrollingEnabled = false + hotAdapter?.submitList(it.data?.list) + hotAdapter?.isStateViewEnable = true + hotAdapter?.setStateViewLayout( + this, + R.layout.layout_emptyview + ) + hotAdapter?.setOnItemClickListener { adapter, _, position -> + val videoListData = + adapter.getItem(position) as VideoListDataRes.VideoListData + startActivity( + Intent( + this, + PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, + videoListData.id + ) + }) + } + } else { + toast(getString(R.string.network_error)) + } + binding?.srFree?.finishRefresh() + hideLoading() + hideNetError() + isLoad = true + } + } + + override fun getViewBinding(): FragmentHotBinding { + return FragmentHotBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.freeMoreVideo() + } else { + toast(getString(R.string.example_no_network)) + } + } + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HotAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotAdapter.kt new file mode 100644 index 0000000..8df86d9 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotAdapter.kt @@ -0,0 +1,62 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatTextView +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.VideoListDataRes +import com.jia.er.nebuluxe.app.ui.PosterStyleImageView + +class HotAdapter : + BaseQuickAdapter() { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: VideoListDataRes.VideoListData? + ) { + val posterView = holder.getView(R.id.iv_hot) + posterView.loadImage( + url = item?.image_url.toString(), + placeholderRes = R.drawable.iv_placeholder_v, + errorRes = R.drawable.iv_placeholder_v + ) + if (0 == position) { + holder.setGone(R.id.iv_top, false) + posterView.apply { + // 顶部倾斜程度(左侧更低) + setTopSlantOffsetDp(25f) + + // 左上小圆角,其他正常 + setTopLeftShortStyle(topLeftDp = 12f, otherDp = 18f) + + // 如果还需更贴合 + setCornerRadiiDp(12f, 18f, 18f, 18f) + } + } else { + holder.setGone(R.id.iv_top, true) + posterView.apply { + // 顶部倾斜程度(左侧更低) + setTopSlantOffsetDp(0f) + + // 左上小圆角,其他正常 + setTopLeftShortStyle(topLeftDp = 18f, otherDp = 18f) + // 如果还需更贴合 + setCornerRadiiDp(18f, 18f, 18f, 18f) + } + } + + + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_hot, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt new file mode 100644 index 0000000..3437f24 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt @@ -0,0 +1,83 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.blankj.utilcode.util.NetworkUtils +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.databinding.ActivityRankingsBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.video.PlayerDetailActivity + + +class RankActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + private var type = "most_trending" + + override fun top() { + binding?.exampleIvBack?.setOnClickListener { finish() } + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.homeRanking(type) + } else { + showNetError() + } + binding.srRank.setOnRefreshListener { + mViewModel.homeRanking(type) + } + } + + override fun center() { + mViewModel.homeRankingData.observe(this) { + if (it != null) { + if (it.data?.list?.isNotEmpty() == true) { + val homeRankTrendingAdapter = RankAdapter() + val manager1 = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + binding?.rvRanks?.layoutManager = manager1 + binding?.rvRanks?.adapter = homeRankTrendingAdapter + homeRankTrendingAdapter?.submitList(it.data.list) + homeRankTrendingAdapter?.isStateViewEnable = true + homeRankTrendingAdapter?.setStateViewLayout(this, R.layout.layout_emptyview) + homeRankTrendingAdapter?.setOnItemClickListener { adapter, view, position -> + val data = adapter.getItem(position) as HomeRankingRes.Item7 + startActivity(Intent( + this, PlayerDetailActivity::class.java + ).apply { + putExtra( + Constants.CONSTANTS_short_play_id, data.short_play_id + ) + }) + } + } + binding.srRank.finishRefresh() + hideNetError() + hideLoading() + } else { + showNetError() + toast(getString(R.string.network_error)) + hideLoading() + } + } + } + + override fun getViewBinding(): ActivityRankingsBinding { + return ActivityRankingsBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.homeRanking(type) + } else { + toast(getString(R.string.example_no_network)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/RankAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankAdapter.kt new file mode 100644 index 0000000..23549a0 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankAdapter.kt @@ -0,0 +1,95 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Context +import android.graphics.Color +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatTextView +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.fullspan.FullSpanAdapterType +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.utils.formatNumberByLong + +class RankAdapter : + BaseQuickAdapter(), + FullSpanAdapterType { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: HomeRankingRes.Item7? + ) { + Glide.with(context).load(item?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(holder.getView(R.id.iv_cover)) + holder.setText(R.id.tv_rank_name, item?.name) + holder.setText(R.id.tv_des, item?.description) + if (item?.category?.isNotEmpty() == true) { + val string = item.category[0] + holder.setText(R.id.tv_rank_tag, string) + holder.setVisible(R.id.tv_rank_tag, true) + } else { + holder.setVisible(R.id.tv_rank_tag, false) + } + val view = holder.getView(R.id.tv_rank_watch) + holder.setText(R.id.tv_num, (position + 1).toString()) + when (position) { + 0 -> { + holder.setBackgroundResource(R.id.tv_num, R.drawable.bg_rank_1) + holder.setTextColor(R.id.tv_num,Color.parseColor("#4F2500")) + holder.setTextColor(R.id.tv_rank_tag,Color.parseColor("#FFE8C4")) + view?.setCompoundDrawablesWithIntrinsicBounds( + context?.getDrawable(R.drawable.iv_item_rank_heat), + null, + null, + null + ) + } + + 1 -> { + holder.setBackgroundResource(R.id.tv_num, R.drawable.bg_rank_2) + holder.setTextColor(R.id.tv_num,Color.parseColor("#424242")) + holder.setTextColor(R.id.tv_rank_tag,Color.parseColor("#FFE8C4")) + view?.setCompoundDrawablesWithIntrinsicBounds( + context?.getDrawable(R.drawable.iv_item_rank_heat), + null, + null, + null + ) + } + + 2 -> { + holder.setBackgroundResource(R.id.tv_num, R.drawable.bg_rank_3) + holder.setTextColor(R.id.tv_num,Color.parseColor("#79471B")) + holder.setTextColor(R.id.tv_rank_tag,Color.parseColor("#FFE8C4")) + view?.setCompoundDrawablesWithIntrinsicBounds( + context?.getDrawable(R.drawable.iv_item_rank_heat), + null, + null, + null + ) + } + + else -> { + holder.setBackgroundResource(R.id.tv_num, R.drawable.bg_rank_other) + holder.setTextColor(R.id.tv_num,Color.parseColor("#0F0F0F")) + holder.setTextColor(R.id.tv_rank_tag,Color.parseColor("#F0C2E1")) + view?.setCompoundDrawablesWithIntrinsicBounds( + context?.getDrawable(R.drawable.iv_item_rank_heat_1), + null, + null, + null + ) + } + } + holder.setText(R.id.tv_rank_watch, item?.watch_total?.let { formatNumberByLong(it) }) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_ranks, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt new file mode 100644 index 0000000..8837a21 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt @@ -0,0 +1,464 @@ +package com.jia.er.nebuluxe.app.home + +import android.annotation.SuppressLint +import android.graphics.Color +import android.net.Uri +import android.text.SpannableStringBuilder +import android.view.View +import android.view.WindowManager +import android.widget.FrameLayout +import android.widget.SeekBar +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatSeekBar +import androidx.appcompat.widget.AppCompatTextView +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.datasource.DataSource +import androidx.media3.datasource.DefaultDataSourceFactory +import androidx.media3.exoplayer.DefaultRenderersFactory +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.hls.HlsMediaSource +import androidx.media3.exoplayer.source.MediaSource +import androidx.media3.exoplayer.source.ProgressiveMediaSource +import androidx.media3.ui.PlayerView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.PagerSnapHelper +import androidx.recyclerview.widget.RecyclerView +import com.jia.er.nebuluxe.app.data.RecommendDataRes +import com.jia.er.nebuluxe.app.ui.FfmpegRenderersFactory +import com.jia.er.nebuluxe.app.ui.LoadingLine +import com.jia.er.nebuluxe.app.ui.OnSnapHelperCurrentListener +import com.jia.er.nebuluxe.app.ui.RecyclerViewScrollerDetection +import com.blankj.utilcode.util.NetworkUtils +import com.blankj.utilcode.util.ViewUtils +import com.bumptech.glide.Glide +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseFragment +import com.jia.er.nebuluxe.app.databinding.FragmentReelsBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.appendWithStyle +import com.jia.er.nebuluxe.app.utils.formatTimestamp +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.jia.er.nebuluxe.app.utils.DialogUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +@SuppressLint("UnsafeOptInUsageError") +class ReelsFragment : BaseFragment(), + OnSnapHelperCurrentListener { + private var builder: ExoPlayer.Builder? = null + private var player: ExoPlayer? = null + private val pagerSnapHelper = PagerSnapHelper() + private val recyclerViewScrollerDetection = RecyclerViewScrollerDetection() + private var homeForYouAdapter: HomeForYouAdapter? = null + private var playerView: PlayerView? = null + private var currentView: View? = null + private var loadingLine: LoadingLine? = null + private var tvName: AppCompatTextView? = null + private var tvTime: AppCompatTextView? = null + private var play: AppCompatImageView? = null + private var collection: AppCompatImageView? = null + private var ivIconPlayer: AppCompatImageView? = null + private var ivCover: AppCompatImageView? = null + private var exampleSeekbarPlayerController: AppCompatSeekBar? = null + private var exampleProgressJob: Job? = null + private var isDragging = false + private var isPlaying = false + private var currentPage = 1 + private val currentSize = 10 + private var dataRes: RecommendDataRes.Data? = null + private var currentPosition = 0 + private var tvEpTotal: AppCompatTextView? = null + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + private var isCanPlay = false + + override fun top() { + activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + builder = ExoPlayer.Builder(requireContext(), FfmpegRenderersFactory(requireContext())) + .setRenderersFactory( + DefaultRenderersFactory(requireContext()).setEnableDecoderFallback( + true + ) + ) + player = builder?.build() + playerView = ViewUtils.layoutId2View(R.layout.include_player_view) as PlayerView + playerView?.player = player + loadingLine = playerView?.findViewById(R.id.load_line) + tvName = playerView?.findViewById(R.id.example_tv_title_player_controller) + tvTime = playerView?.findViewById(R.id.tv_player_seek_time) + tvEpTotal = playerView?.findViewById(R.id.tv_ep_total) + play = playerView?.findViewById(R.id.example_iv_play_player_controller) + collection = playerView?.findViewById(R.id.example_iv_collection_controller) + ivIconPlayer = playerView?.findViewById(R.id.iv_icon_player) + exampleSeekbarPlayerController = + playerView?.findViewById(R.id.example_seekBar_player_controller) + play?.setOnClickListener { + singleClick { + if (isPlaying) { + pause() + } else { + play() + } + } + } + player?.addListener(object : Player.Listener { + override fun onPlaybackStateChanged(playbackState: Int) { + super.onPlaybackStateChanged(playbackState) + when (playbackState) { + Player.STATE_BUFFERING -> { + if (!isHidden) { + ivIconPlayer?.visibility = View.VISIBLE + loadingLine?.visibility = View.VISIBLE + loadingLine?.postDelayed({ loadingLine?.startAnimation() }, 200) + } + } + + Player.STATE_READY -> { + if (isCanPlay) { + canPlay() + } + } + + Player.STATE_ENDED -> { + val plus = currentPosition.plus(1) + binding.rvRecommend.smoothScrollToPosition(plus) + } + + Player.STATE_IDLE -> { + } + } + } + + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + + } + }) + collection?.setOnClickListener { + singleClick { + if (dataRes?.is_collect == true) { + dataRes?.video_info?.short_play_id?.let { it1 -> + dataRes?.video_info?.short_play_video_id?.let { it2 -> + DialogUtils.unFavoriteDialog( + requireContext(), + it1, it2, mViewModel + ) + } + } + } else { + dataRes?.video_info?.short_play_id?.let { + dataRes?.video_info?.short_play_video_id.let { it1 -> + if (it1 != null) { + mViewModel.doCollect( + it, it1 + ) + } + } + } + } + } + } + binding.srFy.apply { + setOnRefreshListener { + recyclerViewScrollerDetection.isFirstAttached = false + player?.stop() + mViewModel.getRecommands(currentPage, currentSize, "") + } + } + binding.rvRecommend.addOnScrollListener(object : RecyclerView.OnScrollListener() { + + var isSlidingUp = false + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + + isSlidingUp = dy > 0 + } + + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + + val layoutManager = recyclerView.layoutManager as LinearLayoutManager + val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition() + val totalItemCount = layoutManager.itemCount + + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + if (isSlidingUp && + lastVisibleItemPosition == totalItemCount - 1 + ) { + currentPage++ + mViewModel.getRecommands(currentPage, currentSize, "") + } + } + } + }) + exampleSeekbarPlayerController?.setOnSeekBarChangeListener(object : + SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged( + seekBar: SeekBar?, + progress: Int, + fromUser: Boolean + ) { + if (fromUser) { + seekTo(progress) + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + tvTime?.visibility = FrameLayout.VISIBLE + isDragging = true + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + isDragging = false + tvTime?.visibility = FrameLayout.INVISIBLE + } + }) + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.getRecommands(currentPage, currentSize, "") + } else { + showNetError() + } + } + + private fun setProgress() { + exampleProgressJob?.cancel() + val duration = player!!.duration + exampleSeekbarPlayerController?.max = duration.toInt() + exampleSeekbarPlayerController?.progress = player!!.currentPosition.toInt() + exampleProgressJob = lifecycleScope.launch { + while (isActive) { + if (!isDragging) { + withContext(Dispatchers.Main) { + exampleSeekbarPlayerController?.progress = + player!!.currentPosition.toInt() + } + } + delay(1000) + } + } + } + + fun play() { + player?.play() + play?.setImageResource(R.drawable.iv_example_stop) + isPlaying = true + isDragging = false + } + + fun pause() { + player?.pause() + play?.setImageResource(R.drawable.iv_example_play) + isPlaying = false + isDragging = true + } + + private fun seekTo(progress: Int) { + player?.seekTo(progress.toLong()) + seekTime() + } + + private fun seekTime() { + val currentPosition = player!!.currentPosition + val currentTime = formatTimestamp(currentPosition / 1000) + val totalDuration = player!!.duration + val totalTime = formatTimestamp(totalDuration / 1000) + tvTime?.text = "$currentTime/$totalTime" + } + + override fun center() { + mViewModel.recommendData.observe(this) { + if (it != null) { + if (it.data?.list?.isNotEmpty() == true) { + if (currentPage == 1) { + homeForYouAdapter = HomeForYouAdapter() + val layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + binding?.rvRecommend?.layoutManager = layoutManager + binding?.rvRecommend?.adapter = homeForYouAdapter + binding?.rvRecommend?.isNestedScrollingEnabled = false + pagerSnapHelper.attachToRecyclerView(binding?.rvRecommend) + recyclerViewScrollerDetection.setCurrentListener(this) + recyclerViewScrollerDetection.attachToSnapHelper(pagerSnapHelper) + binding?.rvRecommend?.let { it1 -> + recyclerViewScrollerDetection.addOnScrollListener( + it1 + ) + } + it.data?.list?.forEach { item -> + Glide.with(requireContext()).load(item.image_url).preload() + } + homeForYouAdapter?.submitList(it.data.list) + } else { + homeForYouAdapter?.addAll(it.data.list) + } + hideLoading() + } else { + toast(getString(R.string.no_more_data)) + } + hideNetError() + } else { + toast(getString(R.string.network_error)) + hideLoading() + } + binding.srFy.finishRefresh() + } + + mViewModel.collectData.observe(this) { + if (it != null) { + collection?.setImageResource(R.drawable.iv_example_collection_h) + dataRes?.collect_total = dataRes?.collect_total?.plus(1) + homeForYouAdapter?.getItem(currentPosition)?.is_collect = true + homeForYouAdapter?.getItem(currentPosition)?.collect_total = + dataRes?.collect_total + toast(getString(R.string.success)) + } else { + toast(getString(R.string.network_error)) + } + } + mViewModel.cancelCollectData.observe(this) { + if (it != null) { + collection?.setImageResource(R.drawable.iv_example_collection_n) + dataRes?.collect_total = dataRes?.collect_total?.minus(1) + homeForYouAdapter?.getItem(currentPosition)?.is_collect = false + homeForYouAdapter?.getItem(currentPosition)?.collect_total = + dataRes?.collect_total + toast(getString(R.string.success)) + } else { + toast(getString(R.string.network_error)) + } + } + } + + private fun buildMediaSource(videoPath: String): MediaSource { + val dataSourceFactory: DataSource.Factory = + DefaultDataSourceFactory(requireContext(), "loopdrama") + + return if (videoPath.endsWith(".m3u8")) { + HlsMediaSource.Factory(dataSourceFactory) + .createMediaSource(MediaItem.fromUri(Uri.parse(videoPath))) + } else { + ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(MediaItem.fromUri(Uri.parse(videoPath))) + } + } + + override fun getViewBinding(): FragmentReelsBinding { + return FragmentReelsBinding.inflate(layoutInflater) + } + + override fun onPause() { + super.onPause() + isCanPlay = false + binding.root.postDelayed({ pause() }, 300) + } + + + override fun onResume() { + super.onResume() + if (isVisible) { + isCanPlay = true + canPlay() + } + } + + @SuppressLint("UnsafeOptInUsageError") + override fun setActive( + currentView: View?, position: Int, previousView: View?, previousPosition: Int + ) { + isCanPlay = true + currentPosition = position + this.currentView = currentView + val frameLayout = currentView?.findViewById(R.id.video) + (playerView?.parent as FrameLayout?)?.removeView(playerView) + frameLayout?.removeAllViews() + frameLayout?.addView(playerView) + playerView?.showController() + dataRes = homeForYouAdapter?.getItem(position) + dataRes?.video_info?.video_url?.let { buildMediaSource(it) } + ?.let { player?.setMediaSource(it) } + player?.prepare() + setUI() + } + + private fun setUI() { + ivIconPlayer?.let { it1 -> + Glide.with(this).load(dataRes?.image_url).into(it1) + } + tvName?.text = dataRes?.name + val builder = SpannableStringBuilder() + builder.appendWithStyle( + "Ep.".plus(dataRes?.video_info?.episode), + Color.parseColor("#50FFFFFF"), + isBold = true + ) + .appendWithStyle( + "/Ep.".plus(dataRes?.episode_total), + Color.parseColor("#50FFFFFF"), + isBold = false + ) + tvEpTotal?.text = builder + collection?.setImageResource(if (dataRes?.is_collect == true) R.drawable.iv_example_collection_h else R.drawable.iv_example_collection_n) + } + + override fun disActive(detachedView: View?, detachedPosition: Int) { + if (null == detachedView) return + ivCover = detachedView.findViewById(R.id.iv_icon) + ivCover?.visibility = View.VISIBLE + if (player?.isPlaying == true) { + pause() + } + } + + override fun onHiddenChanged(hidden: Boolean) { + super.onHiddenChanged(hidden) + if (hidden) { + isCanPlay = false + binding.root.postDelayed({ pause() }, 200) + activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } else { + isCanPlay = true + canPlay() + activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } + + private fun canPlay() { + loadingLine?.endAnimation() + loadingLine?.visibility = View.INVISIBLE + ivCover = currentView?.findViewById(R.id.iv_icon) + ivCover?.visibility = View.INVISIBLE + ivIconPlayer?.visibility = View.INVISIBLE + play() + setProgress() + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + mViewModel.getRecommands(currentPage, currentSize, "") + } else { + toast(getString(R.string.example_no_network)) + } + } + } + + override fun onDestroy() { + super.onDestroy() + player?.stop() + player?.release() + recyclerViewScrollerDetection.detachToSnapHelper() + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt new file mode 100644 index 0000000..df6caf7 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt @@ -0,0 +1,142 @@ +package com.jia.er.nebuluxe.app.home + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.jia.er.nebuluxe.app.data.CollectionRes +import com.blankj.utilcode.util.NetworkUtils +import com.chad.library.adapter4.layoutmanager.QuickGridLayoutManager +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseFragment +import com.jia.er.nebuluxe.app.databinding.FragmentSavedBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast + +class SavedFragment : BaseFragment() { + private var page: Int = 1 +// private var myListAdapter: MyListAdapter? = null + private var edit = false + private var current: Int = 0 + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + override fun top() { +// if (NetworkUtils.isConnected()) { +// showLoading() +// mViewModel.getCollections(page) +// } else { +// showNetError() +// } +// binding?.srMyList?.setOnRefreshListener { +// page = 1 +// mViewModel.getCollections(page) +// } +// binding?.srMyList?.setOnLoadMoreListener { +// page++ +// mViewModel.getCollections(page) +// } +// binding?.exampleIvEditMyFavorites?.setOnClickListener { +// if (!edit) { +// edit = true +// binding?.exampleIvEditMyFavorites?.setImageResource(R.drawable.iv_edit_favorites_complete) +// myListAdapter?.eidt = true +// binding?.tvTitle?.text = "Delete" +// binding.tvTitle.background = context?.getDrawable(R.drawable.iv_list_title_bg_h) +// myListAdapter?.notifyDataSetChanged() +// } else { +// edit = false +// binding?.exampleIvEditMyFavorites?.setImageResource(R.drawable.iv_edit_favorites) +// binding.tvTitle.background = context?.getDrawable(R.drawable.iv_list_title_bg) +// myListAdapter?.eidt = false +// binding?.tvTitle?.text = "Favorites" +// myListAdapter?.notifyDataSetChanged() +// } +// } +// binding.ivHis.setOnClickListener { +// startActivity( +// Intent( +// requireContext(), +// HistoryActivity::class.java +// )) +// } + } + + override fun center() { +// mViewModel.collectionsData.observe(this) { +// if (it != null) { +// if (page == 1) { +// myListAdapter = MyListAdapter() +// val manager = QuickGridLayoutManager(requireContext(), 3) +// binding?.rvMyList?.layoutManager = manager +// binding?.rvMyList?.adapter = myListAdapter +// myListAdapter?.submitList(it.data?.list) +// myListAdapter?.isStateViewEnable = true +// myListAdapter?.setStateViewLayout(requireContext(), R.layout.layout_emptyview) +// myListAdapter?.addOnItemChildClickListener(R.id.iv_favorites_delete) { adapter, view, position -> +// current = position +// val collectionData = +// adapter.getItem(position) as CollectionRes.CollectionData +// DialogUtils.unFavoriteDialog( +// requireContext(), +// collectionData.short_play_id, +// collectionData.short_play_video_id, +// mViewModel +// ) +// } +// myListAdapter?.setOnItemClickListener { adapter, view, position -> +// val data = adapter.getItem(position) as CollectionRes.CollectionData +// startActivity( +// Intent( +// requireContext(), +// PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, +// data.short_play_id +// ) +// }) +// } +// } else { +// if (it.data?.list?.isNotEmpty() == true) { +// myListAdapter?.addAll(it.data.list) +// } else { +// toast(getString(R.string.no_more_data)) +// } +// } +// hideLoading() +// hideNetError() +// } else { +// hideLoading() +// toast(getString(R.string.network_error)) +// } +// binding?.srMyList?.finishRefresh() +// binding?.srMyList?.finishLoadMore() +// } +// +// mViewModel.cancelCollectData.observe(this) { +// if (it != null) { +// toast(getString(R.string.success)) +// myListAdapter?.removeAt(current) +// myListAdapter?.notifyDataSetChanged() +// } else { +// toast(getString(R.string.network_error)) +// } +// } + } + + override fun getViewBinding(): FragmentSavedBinding { + return FragmentSavedBinding.inflate(layoutInflater) + } + + override fun onRetry() { + super.onRetry() + singleClick { + if (NetworkUtils.isConnected()) { + showLoading() + page = 1 + mViewModel.getCollections(page) + } else { + toast(getString(R.string.example_no_network)) + } + } + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt new file mode 100644 index 0000000..ac505b8 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt @@ -0,0 +1,705 @@ +package com.jia.er.nebuluxe.app.main + +import android.view.KeyEvent +import androidx.fragment.app.FragmentTransaction +import androidx.lifecycle.ViewModelProvider +import com.jia.er.nebuluxe.app.home.HomeFragment +import com.jia.er.nebuluxe.app.home.ReelsFragment +import com.jia.er.nebuluxe.app.home.SavedFragment +import com.flyco.tablayout.listener.CustomTabEntity +import com.flyco.tablayout.listener.OnTabSelectListener +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.TabEntity +import com.jia.er.nebuluxe.app.databinding.ActivityMainBinding +import com.jia.er.nebuluxe.app.me.MeFragment +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.Memory +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + + +class MainActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + + private var titles = arrayOf( + "", + "", + "", + "" + ) + private val iconUnSelectIds by lazy { + intArrayOf( + R.drawable.iv_home_n, + R.drawable.iv_reels_n, + R.drawable.iv_saved_n, + R.drawable.iv_me_n + ) + } + private val iconSelectIds by lazy { + intArrayOf( + R.drawable.iv_home_h, + R.drawable.iv_reels_h, + R.drawable.iv_saved_h, + R.drawable.iv_me_h + ) + } + private val tabEntities = ArrayList() + private var homeFragment: HomeFragment? = null + private var reelsFragment: ReelsFragment? = null + private var myListFragment: SavedFragment? = null + private var meFragment: MeFragment? = null + private var index = 0 + private var shortVideoId: Int = 0 +// private var notificationDialog: NotificationDialog? = null +// private var path = "" +// private var short_play_id = "" +// private var message_id = "" +// private var title = "" +// private var scheduler: ScheduledExecutorService? = Executors.newSingleThreadScheduledExecutor() +// private val scope = CoroutineScope(Dispatchers.Main) + +// override fun onNewIntent(intent: Intent?) { +// super.onNewIntent(intent) +// val webpageURL = intent?.data +// uploadDDL(webpageURL) +// path = intent?.getStringExtra("path").toString() +// short_play_id = intent?.getStringExtra("short_play_id").toString() +// message_id = intent?.getStringExtra("message_id").toString() +// title = intent?.getStringExtra("title").toString() +// notificationGo() +// } + + override fun top() { +// val webpageURL = intent.data +// uploadDDL(webpageURL) +// path = intent?.getStringExtra("path").toString() +// short_play_id = intent?.getStringExtra("short_play_id").toString() +// message_id = intent?.getStringExtra("message_id").toString() +// title = intent?.getStringExtra("title").toString() + showLoading() + EventBus.getDefault().register(this) + (titles.indices).mapTo(tabEntities) { + TabEntity( + titles[it], iconSelectIds[it], iconUnSelectIds[it] + ) + } + binding.tabLayout.setTabData(tabEntities) + binding?.tabLayout?.setOnTabSelectListener(object : OnTabSelectListener { + override fun onTabSelect(position: Int) { + switchFragment(position) +// when (position) { +// 0 -> { +// binding?.dialogHistory?.root?.postDelayed( +// { +// val string = Memory.getMMKV() +// .getString(Constants.Constants_Main_Video_info, "") +// if (string?.isNotEmpty() == true && NetworkUtils.isConnected()) { +// val fromJson = Gson().fromJson(string, MainDataHis::class.java) +// showHistoryDialog(fromJson) +// } +// }, 500 +// ) +// } +// +// else -> { +// binding?.dialogHistory?.root?.visibility = View.INVISIBLE +// } +// } + } + + override fun onTabReselect(position: Int) { + + } + }) +// Constants.CanNotification = NotificationUtils.isNotificationEnabled(this) +// mViewModel.uploadNoticeStatus( +// FbNotificationReq( +// if (Constants.CanNotification) "1" else "0" +// ) +// ) + mViewModel.getInfo() + switchFragment(index) +// GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this) +// .addOnCompleteListener { +// if (it.isSuccessful) { +// askNotificationPermission() +// } +// } +// binding?.root?.postDelayed({ notificationGo() }, 700) +// mViewModel.enterTheApp() +// val intervalMillis = 10 * 60 * 1000 +// scheduler?.scheduleWithFixedDelay({ +// try { +// lifecycleScope.launch { +// mViewModel.onLine() +// } +// } catch (e: Exception) { +// e.printStackTrace() +// } +// }, 0, intervalMillis.toLong(), TimeUnit.MILLISECONDS) +// binding?.root?.postDelayed({ +// if (Memory.getOrder().isNotEmpty()) { +// val string = Memory.getOrder() +// scope.launch { +// flow { +// for (item in string) { +// emit(item) +// } +// }.onEach { item -> +// upError( +// "pay restore", +// mViewModel, +// "restore", +// "pay_restore", +// "auto", GsonUtils.toJson(item), 0, 0 +// ) +// mViewModel.restorePaid(item) +// }.debounce(1000).collect {} +// } +// } +// }, 3000) + } + + override fun center() { +// mViewModel.restorePaidData.observe(this) { +// if (it != null) { +// it.data?.order_code?.let { it1 -> Memory.removeOrderString(it1) } +// } +// } + mViewModel.infoData.observe(this) { + if (it != null) { + it.data?.let { it1 -> + Memory.saveUserInfo(it1) + } + } + } + mViewModel.userRegisterData.observe(this) { + if (it != null) { + Memory.getMMKV() + .putString(Constants.CONSTANTS_AuthorizationExample, it.data?.token) + EventBus.getDefault().post(Constants.CONSTANTS_refresh_me) + } + } +// mViewModel.loginData.observe(this) { +// if (it != null) { +// toast(getString(R.string.success)) +// Memory.getMMKV() +// .putString(Constants.CONSTANTS_AuthorizationExample, it.data?.token) +// EventBus.getDefault() +// .post(Constants.CONSTANTS_enterTheApp) +// EventBus.getDefault() +// .post(Constants.CONSTANTS_onLine) +// mViewModel.getInfo() +// EventBus.getDefault() +// .post(Constants.CONSTANTS_refresh_me) +// hideLoading() +// loginDialog?.dismiss() +// } else { +// hideLoading() +// toast(getString(R.string.network_error)) +// } +// } + } + +// override fun onResume() { +// super.onResume() +// if (index == 0) { +// binding?.dialogHistory?.root?.postDelayed( +// { +// val string = Memory.getMMKV() +// .getString(Constants.Constants_Main_Video_info, "") +// if (string?.isNotEmpty() == true && NetworkUtils.isConnected()) { +// val fromJson = Gson().fromJson(string, MainDataHis::class.java) +// showHistoryDialog(fromJson) +// } +// }, 500 +// ) +// } +// } + +// private fun showHistoryDialog(data: MainDataHis) { +// binding?.dialogHistory?.ivCloseHistory?.setOnClickListener { +// Memory.getMMKV() +// .putBoolean(Constants.Constants_Main_Video_status, false) +// binding?.dialogHistory?.root?.visibility = View.INVISIBLE +// } +// if (Memory.getMMKV() +// .getBoolean(Constants.Constants_Main_Video_status, false) +// ) { +// binding?.dialogHistory?.ivVideo?.let { +// if (!isFinishing && !isDestroyed) { +// Glide.with(this).load( +// data.video_img +// ).placeholder(R.drawable.iv_placeholder_v).into(it) +// } +// } +// binding?.dialogHistory?.cl?.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// this, PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, data.video_id +// ) +// }) +// } +// } +// binding?.dialogHistory?.root?.post { +// binding?.dialogHistory?.tvEp?.text = +// "Ep.".plus(data.video_last).plus("/").plus("Ep.").plus(data.episode_total) +// } +// binding?.dialogHistory?.root?.visibility = View.VISIBLE +// } +// } +// +// private fun askNotificationPermission() { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { +// if (ContextCompat.checkSelfPermission( +// this, Manifest.permission.POST_NOTIFICATIONS +// ) == PackageManager.PERMISSION_GRANTED +// ) { +// NotificationUtils.firebase(mViewModel) +// } else { +// if (Constants.isUat) { +// openNotification() +// } else { +// if (shouldShowNotification()) { +// openNotification() +// } +// } +// } +// } else { +// if (NotificationUtils.isNotificationEnabled(this)) { +// NotificationUtils.firebase(mViewModel) +// } else { +// if (Constants.isUat) { +// openNotification() +// } else { +// if (shouldShowNotification()) { +// openNotification() +// } +// } +// } +// } +// } +// +// private fun openNotification() { +// notificationDialog = NotificationDialog(this) +// val example_tv_later = +// notificationDialog?.findViewById(R.id.example_tv_unfavorite) +// val iv_close_notification = +// notificationDialog?.findViewById(R.id.iv_close_notification) +// val example_open = +// notificationDialog?.findViewById(R.id.example_tv_think_again) +// notificationDialog?.setOnDismissListener { +// Memory.getMMKV().putLong( +// Constants.CONSTANTS_PREF_LAST_POPUP_TIME_Notification, +// System.currentTimeMillis() +// ) +// } +// example_tv_later?.setOnClickListener { notificationDialog?.dismiss() } +// iv_close_notification?.setOnClickListener { notificationDialog?.dismiss() } +// example_open?.setOnClickListener { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { +// requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) +// notificationDialog?.dismiss() +// } else { +// NotificationUtils.openNotificationSettings(this) +// notificationDialog?.dismiss() +// } +// } +// notificationDialog?.show() +// } +// +// private val requestPermissionLauncher = registerForActivityResult( +// ActivityResultContracts.RequestPermission(), +// ) { isGranted: Boolean -> +// Constants.CanNotification = isGranted +// if (isGranted) { +// NotificationUtils.firebase(mViewModel) +// mViewModel.uploadNoticeStatus( +// FbNotificationReq( +// if (Constants.CanNotification) "1" else "0" +// ) +// ) +// notificationDialog?.dismiss() +// } else { +// NotificationUtils.openNotificationSettings(this) +// } +// } +// +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (index == 0) { +// if (requestCode == NotificationUtils.NOTIFICATION_SETTINGS_REQUEST_CODE) { +// Constants.CanNotification = +// NotificationUtils.isNotificationEnabled(this) +// if (Constants.CanNotification) { +// NotificationUtils.firebase(mViewModel) +// } +// mViewModel.uploadNoticeStatus( +// FbNotificationReq( +// if (Constants.CanNotification) "1" else "0" +// ) +// ) +// } +// } else { +// val fragments: List = supportFragmentManager.fragments +// if (fragments.isNotEmpty()) { +// for (fragment in fragments) { +// if (fragment.isAdded && !fragment.isDetached) { +// fragment.onActivityResult(requestCode, resultCode, data) +// } +// } +// } +// } +// } +// +// private fun notificationGo() { +// if (message_id.isNotBlank() && !message_id.contentEquals("null")) { +// if ("0" != message_id) { +// mViewModel.sendReport(message_id, title) +// } +// } +// when (path) { +// "detail" -> { +// if (short_play_id.isNotEmpty() && "null" != short_play_id) { +// try { +// val toInt = short_play_id.toInt() +// binding?.root?.postDelayed({ +// startActivity(Intent( +// this, PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, toInt +// ) +// }) +// }, 700) +// } catch (e: Exception) { +// e.printStackTrace() +// } +// } +// } +// +// "orderDetail" -> { +// binding?.root?.postDelayed({ +// startActivity( +// Intent( +// this, StoreActivity::class.java +// ) +// ) +// }, 500) +// } +// +// "feedback" -> { +// binding?.root?.postDelayed({ +// if (message_id.isNotBlank() && message_id != "null") { +// Memory.getMMKV() +// .putString(Constants.CONSTANTS_Detail_id, message_id) +// startActivity( +// Intent( +// this, FeedBackDetailActivity::class.java +// ) +// ) +// } else { +// startActivity( +// Intent( +// this, FeedBackListActivity::class.java +// ) +// ) +// } +// }, 500) +// } +// } +// } +// +// +// private fun uploadDDL(webpageURL: Uri?) { +// val ddl = webpageURL.toString() +// if (ddl.isNotEmpty() && !ddl.contentEquals("null")) { +// w2aSelfAttribution(ddl) +// val regex = """short_play_id=(\d+).*""".toRegex() +// val matchResult = regex.find(ddl) +// if (matchResult != null) { +// val shortPlayId = matchResult.groupValues[1] +// shortVideoId = shortPlayId.toInt() +// if (shortVideoId != 0) { +// binding.root.postDelayed({ +// startActivity( +// Intent( +// this, PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, shortVideoId +// ) +// }) +// }, 1000) +// } +// Memory.getMMKV() +// .putString(Constants.Constants_DDL_Url, "") +// clearClipboardContent(this) +// } +// } +// } +// +// fun getClip() { +// this.window.decorView.post { +// val clipContent = getClipContent() +// if (clipContent.isNotEmpty()) { +// if (clipContent.startsWith("[QJ]")) { +// val urlString = clipContent.removePrefix("[QJ]").trim() +// val extractVideoInfo = parseVideoAndShortPlayIds(urlString) +// if (urlString.contains("reelcrush")) { +// shortVideoId = extractVideoInfo.second?.toInt() ?: 0 +// w2aSelfAttribution(clipContent) +// if (shortVideoId != 0) { +// binding.root.postDelayed({ +// startActivity( +// Intent( +// this, PlayerDetailActivity::class.java +// ).apply { +// putExtra( +// Constants.CONSTANTS_short_play_id, shortVideoId +// ) +// }) +// }, 3000) +// } +// Memory.getMMKV() +// .putString(Constants.Constants_DDL_Url, "") +// clearClipboardContent(this) +// } +// } +// } +// } +// } + + private fun switchFragment(position: Int) { + val transaction = supportFragmentManager.beginTransaction() + hideFragments(transaction) + when (position) { + 0 -> homeFragment?.let { + transaction.show(it) + } ?: HomeFragment().let { + homeFragment = it + transaction.add(R.id.container, it, "HomeFragment") + } + + 1 -> reelsFragment?.let { + transaction.show(it) + } ?: ReelsFragment().let { + reelsFragment = it + transaction.add( + R.id.container, it, "ReelsFragment" + ) + } + + 2 -> myListFragment?.let { + transaction.show(it) + } ?: SavedFragment().let { + myListFragment = it + transaction.add(R.id.container, it, "SavedFragment") + } + + + 3 -> meFragment?.let { + transaction.show(it) + } ?: MeFragment().let { + meFragment = it + transaction.add(R.id.container, it, "MeFragment") + } + + else -> { + + } + } + + index = position + binding?.tabLayout?.currentTab = index + transaction.commitAllowingStateLoss() + } + + + private fun hideFragments(transaction: FragmentTransaction) { + homeFragment?.let { transaction.hide(it) } + reelsFragment?.let { transaction.hide(it) } + myListFragment?.let { transaction.hide(it) } + meFragment?.let { transaction.hide(it) } + } + +// private fun getClipContent(): String { +// val manager: ClipboardManager = getSystemService( +// CLIPBOARD_SERVICE +// ) as ClipboardManager +// val primaryClip = manager.primaryClip +// val itemCount = primaryClip?.itemCount +// if (itemCount != null) { +// if (manager.hasPrimaryClip() && itemCount > 0) { +// val itemAt = manager.primaryClip?.getItemAt(0) +// val addedText: CharSequence = itemAt?.text.toString() +// val addedTextString = addedText.toString() +// if (!TextUtils.isEmpty(addedTextString)) { +// return addedTextString +// } +// } +// } +// return "" +// } +// +// private fun w2aSelfAttribution(data: String?) { +// data?.let { mViewModel.w2aSelfAttribution(it) } +// } +// +// private fun clearClipboardContent(context: Context) { +// val clipboardManager = +// context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager +// +// val emptyClip = ClipData.newPlainText("", "") +// +// clipboardManager.setPrimaryClip(emptyClip) +// } +// +// private fun parseVideoAndShortPlayIds(clipboardContent: String): Pair { +// +// val queryStartIndex = clipboardContent.indexOf('?') +// val queryString = +// if (queryStartIndex != -1) clipboardContent.substring(queryStartIndex + 1) else "" +// +// val videoIdRegex = Regex("video_id=(\\d+)") +// val shortPlayIdRegex = Regex("short_play_id=(\\d+)") +// +// val videoIdMatch = videoIdRegex.find(queryString)?.groupValues?.get(1) +// val shortPlayIdMatch = shortPlayIdRegex.find(queryString)?.groupValues?.get(1) +// +// return Pair(videoIdMatch, shortPlayIdMatch) +// } + + override fun getViewBinding(): ActivityMainBinding { + return ActivityMainBinding.inflate(layoutInflater) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onEvent(event: String) { + if (Constants.CONSTANTS_auth_refresh == event) { + mViewModel.createUserAccount() + } + if (Constants.CONSTANTS_main_stop == event) { + binding?.root?.postDelayed({ hideLoading() }, 300) + } +// if (Constants.CONSTANTS_enterTheApp == event) { +// mViewModel.enterTheApp() +// } +// if (Constants.CONSTANTS_leaveApp == event) { +// mViewModel.leaveApp() +// } +// if (Constants.CONSTANTS_onLine == event) { +// mViewModel.onLine() +// } +// if (Constants.Constants_onTokenRefresh == event) { +// NotificationUtils.firebase(mViewModel) +// } +// if (Constants.Constants_getClip == event) { +// getClip() +// } +// if (Constants.CONSTANTS_web_Login == event) { +// if (!NetworkUtils.isConnected()) { +// toast(getString(R.string.example_no_network)) +// return +// } +// showLogin() +// } + } + +// private var callbackManager: CallbackManager? = null +// private var loginDialog: LoginDialog? = null +// +// private fun showLogin() { +// callbackManager = CallbackManager.Factory.create() +// LoginManager.getInstance().registerCallback(callbackManager, +// object : FacebookCallback { +// override fun onSuccess(loginResult: LoginResult) { +// val enableButtons = AccessToken.getCurrentAccessToken() != null +// if (enableButtons) { +// val mGraphRequest = GraphRequest.newMeRequest( +// loginResult.accessToken +// ) { jsonObject, response -> +// if (response!!.error != null) { +// toast("Facebook login exception.${response.error?.exception.toString()}") +// loginDialog?.dismiss() +// } else { +// val id = jsonObject?.optString("id") +// val name = jsonObject?.optString("name") +// val object_pic: JSONObject? = +// jsonObject!!.optJSONObject("picture") +// val object_data = object_pic?.optJSONObject("data") +// val photo = object_data?.optString("url") +// showLoading() +// EventBus.getDefault() +// .post(Constants.CONSTANTS_leaveApp) +// mViewModel.doLogin( +// LoginReq( +// photo.toString(), +// "", +// name.toString(), +// "", +// "facebook", +// id.toString() +// ) +// ) +// } +// } +// val parameters = Bundle() +// parameters.putString("fields", "id,name,email,picture") +// mGraphRequest.parameters = parameters +// mGraphRequest.executeAsync() +// } +// } +// +// override fun onCancel() { +// toast("Facebook login Cancel") +// loginDialog?.dismiss() +// } +// +// override fun onError(exception: FacebookException) { +// toast("Facebook login exception.$exception") +// loginDialog?.dismiss() +// } +// }) +// loginDialog = LoginDialog(this) +// val tv_facebook_login = +// loginDialog?.findViewById(R.id.tv_facebook_login) +// tv_facebook_login?.setOnClickListener { +// singleClick { +// callbackManager?.let { it1 -> +// LoginManager.getInstance() +// .logInWithReadPermissions(this, it1, arrayListOf("public_profile", "email")) +// } +// } +// } +// loginDialog?.show() +// loginDialog?.setOnDismissListener { +// LoginManager.getInstance().unregisterCallback(callbackManager) +// callbackManager = null +// loginDialog = null +// } +// } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + moveTaskToBack(true) + return true + } + return super.onKeyDown(keyCode, event) + } + + override fun onDestroy() { +// scheduler?.shutdown() +// scheduler = null + super.onDestroy() + EventBus.getDefault().unregister(this) + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/main/SplashActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/main/SplashActivity.kt new file mode 100644 index 0000000..cd09b2d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/main/SplashActivity.kt @@ -0,0 +1,54 @@ +package com.jia.er.nebuluxe.app.main + +import android.content.Intent +import androidx.lifecycle.ViewModelProvider +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.databinding.ActivitySplashBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.Memory + +class SplashActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + override fun top() { + + val toString = Memory.getMMKV() + .getString(Constants.CONSTANTS_AuthorizationExample, "") + .toString() + if (toString.isEmpty()) { + mViewModel.createUserAccount() + } else { + goMain() + } + } + + + + override fun center() { + mViewModel.userRegisterData.observe(this) { + if (it != null) { + Memory.getMMKV() + .putString(Constants.CONSTANTS_AuthorizationExample, it.data?.token) + goMain() + } else { + goMain() + } + } + } + + private fun goMain() { + binding?.root?.postDelayed({ + startActivity( + Intent( + this, + MainActivity::class.java + ) + ) + finish() + }, 1000) + } + + override fun getViewBinding(): ActivitySplashBinding { + return ActivitySplashBinding.inflate(layoutInflater) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt new file mode 100644 index 0000000..c76f7c8 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt @@ -0,0 +1,42 @@ +package com.jia.er.nebuluxe.app.me + +import android.content.Intent +import android.net.Uri +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.databinding.ActivityAboutBinding +import com.jia.er.nebuluxe.app.utils.PackageUtils +import com.jia.er.nebuluxe.app.utils.singleClick + +class AboutActivity : BaseActivity() { + override fun top() { + binding.exampleIvBack.setOnClickListener { finish() } + } + + override fun center() { + binding.tvVersion.text = "V".plus(PackageUtils.getPackageVersion(this)) + binding.tvPrivacyPolicy.setOnClickListener { + singleClick { + val webIntent = + Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com/private")) + startActivity(webIntent) + } + } + binding.tvUserAgreement.setOnClickListener { + singleClick { + val webIntent = + Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com/user_policy")) + startActivity(webIntent) + } + } + binding.tvVisitWebsite.setOnClickListener { + singleClick { + val webIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com")) + startActivity(webIntent) + } + } + } + + override fun getViewBinding(): ActivityAboutBinding { + return ActivityAboutBinding.inflate(layoutInflater) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt new file mode 100644 index 0000000..26d1928 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt @@ -0,0 +1,247 @@ +package com.jia.er.nebuluxe.app.me + +import android.annotation.SuppressLint +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import android.text.Spannable +import android.text.SpannableString +import android.text.style.UnderlineSpan +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.bitmap.CircleCrop +import com.bumptech.glide.request.RequestOptions +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseFragment +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.databinding.FragmentMeBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.Memory +import com.jia.er.nebuluxe.app.utils.singleClick +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +class MeFragment : BaseFragment() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + + override fun top() { + EventBus.getDefault().register(this) + mViewModel.noticeNum() + binding.srMe.setOnRefreshListener { + mViewModel.getInfo() + mViewModel.noticeNum() + } +// binding.llFeedback.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// requireActivity(), +// FeedBackActivity::class.java +// ) +// ) +// } +// } +// binding.clTopUp.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// requireActivity(), +// StoreActivity::class.java +// ) +// ) +// } +// } +// binding.clVip.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// requireActivity(), +// StoreActivity::class.java +// ) +// ) +// } +// } +// binding.tvExampleAbout.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// requireActivity(), +// AboutActivity::class.java +// ) +// ) +// } +// } +// binding.tvExampleSettings.setOnClickListener { +// singleClick { +// startActivity( +// Intent( +// requireActivity(), +// SettingActivity::class.java +// ) +// ) +// } +// } +// binding.tvId.setOnClickListener { +// val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager +// clipboard.setPrimaryClip( +// ClipData.newPlainText( +// "label", +// Memory.getCustomId() +// ) +// ) +// toast("Copied") +// } +// binding.wallet.setOnClickListener { +// startActivity( +// Intent( +// requireActivity(), +// MyWalletActivity::class.java +// ) +// ) +// } +// setUserUI() +// binding.tvVipStatus.applyTextSkew(-10f) + } + + override fun onResume() { + super.onResume() + setUserUI() + } + + override fun center() { + mViewModel.infoData.observe(this) { + if (it != null) { + it.data?.let { it1 -> + Memory.saveUserInfo(it1) + setUserUI() + } + } + binding.srMe.finishRefresh() + } +// mViewModel.noticeNumData.observe(this) { +// if (it != null) { +// if (it.data?.feedback_notice_num != 0) { +// binding?.tvBackNum?.visibility = View.VISIBLE +// binding?.tvBackNum?.text = it.data?.feedback_notice_num.toString() +// } else { +// binding?.tvBackNum?.visibility = View.INVISIBLE +// } +// } else { +// binding?.tvBackNum?.visibility = View.INVISIBLE +// } +// } + } + + + @SuppressLint("UseCompatLoadingForDrawables") + private fun setUserUI() { + if (Memory.isTourist()) { + binding?.ivAvatar?.let { + Glide.with(this).load(Memory.getUserInfo()?.avator).skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .apply(RequestOptions.bitmapTransform(CircleCrop())) + .placeholder(R.drawable.iv_avatar) + .error(R.drawable.iv_avatar).into(it) + } + } else { + binding?.tvUserName?.text = + Memory.getUserInfo()?.family_name.plus(Memory.getUserInfo()?.giving_name) + binding?.ivAvatar?.let { + Glide.with(this).load(Memory.getUserInfo()?.avator).skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .apply(RequestOptions.bitmapTransform(CircleCrop())) + .placeholder(R.drawable.iv_avatar) + .error(R.drawable.iv_avatar).into(it) + } + } +// if (Memory.isVip()) { +// binding.clVip.background = context?.getDrawable(R.drawable.iv_me_vip_h) +// binding.tvVipStatus.text = Memory.getUserInfo()?.vip_type +// val content = binding.tvVipStatus.text +// val spannableString = SpannableString(content) +// spannableString.setSpan( +// UnderlineSpan(), +// 0, +// content.length, +// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE +// ) +// binding.tvVipStatus.text = spannableString +// binding?.tvInfoVip?.text = +// "Expiration Time:".plus(Memory.getUserInfo()?.vip_end_time?.toLong() +// ?.let { transToString(it) }) +// binding?.tvInfoVip?.setCompoundDrawablesWithIntrinsicBounds( +// context?.getDrawable(R.drawable.iv_time), +// null, +// null, +// null +// ) +// binding?.tvVipStatus?.setCompoundDrawablesWithIntrinsicBounds( +// context?.getDrawable(R.drawable.iv_vip_h), +// null, +// context?.getDrawable(R.drawable.iv_vip_right), +// null +// ) +// binding.tvGo.text = "Renew" +// binding.tvGo.background = context?.getDrawable(R.drawable.bg_vip_go_h) +// } else { +// binding?.tvInfoVip?.setCompoundDrawablesWithIntrinsicBounds( +// null, +// null, +// null, +// null +// ) +// val spannableString = SpannableString("VIP Membership") +// spannableString.setSpan( +// UnderlineSpan(), +// 0, +// spannableString.length, +// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE +// ) +// binding.tvVipStatus.text = spannableString +// binding?.tvVipStatus?.setCompoundDrawablesWithIntrinsicBounds( +// context?.getDrawable(R.drawable.iv_vip), +// null, +// context?.getDrawable(R.drawable.iv_vip_right), +// null +// ) +// binding.tvGo.text = "Go" +// binding.tvGo.background = context?.getDrawable(R.drawable.bg_vip_go) +// binding?.tvInfoVip?.text = "Unlock VIP Now" +// binding.clVip.background = context?.getDrawable(R.drawable.iv_me_vip_n) +// +// } + binding?.tvId?.text = "ID:".plus(Memory.getUserInfo()?.customer_id) +// binding?.tvCoinNum?.text = Memory.getUserInfo()?.coin_left_total.toString() +// binding?.tvDonateNum?.text = Memory.getUserInfo()?.send_coin_left_total.toString() + } + + + override fun onHiddenChanged(hidden: Boolean) { + super.onHiddenChanged(hidden) + if (!hidden) { + mViewModel.getInfo() + mViewModel.noticeNum() + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onEvent(event: String) { + if (Constants.CONSTANTS_refresh_me == event) { + mViewModel.getInfo() + mViewModel.noticeNum() + } + } + + override fun getViewBinding(): FragmentMeBinding { + return FragmentMeBinding.inflate(layoutInflater) + } + + override fun onDestroy() { + super.onDestroy() + EventBus.getDefault().unregister(this) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt new file mode 100644 index 0000000..7fe71a5 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt @@ -0,0 +1,131 @@ +package com.jia.er.nebuluxe.app.me + +import android.content.Context +import android.content.Intent +import androidx.appcompat.widget.AppCompatTextView +import androidx.lifecycle.ViewModelProvider +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.databinding.ActivitySettingBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.toast +import org.greenrobot.eventbus.EventBus +import java.io.File + +class SettingActivity : BaseActivity() { + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + + override fun top() { + binding.exampleIvBack.setOnClickListener { finish() } + binding.tvClearCache.setOnClickListener { + clearCache(this) + toast(getString(R.string.success)) + } + binding.exampleIvBack.setOnClickListener { finish() } +// binding.tvExampleLogOut.setOnClickListener { +// singleClick { +// if (!Memory.isTourist()) { +// startActivity( +// Intent( +// this, +// AccountDeleteActivity::class.java +// ) +// ) +// } else { +// toast(getString(R.string.log_first)) +// } +// } +// } +// binding?.tvExampleQuit?.setOnClickListener { +// singleClick { +// if (!Memory.isTourist()) { +// val exampleUnFavoriteDialog = NotificationDialog(this) +// val tvThinkAgain = +// exampleUnFavoriteDialog.findViewById(R.id.example_tv_think_again) +// val tvUnfavorite = +// exampleUnFavoriteDialog.findViewById(R.id.example_tv_unfavorite) +// val tvTitle = +// exampleUnFavoriteDialog.findViewById(R.id.example_tv_title) +// val tvContent = +// exampleUnFavoriteDialog.findViewById(R.id.example_tv_content) +// tvThinkAgain.text = "Cancel" +// tvUnfavorite.text = "Confirm" +// tvTitle.text = "Tips" +// tvContent.text = "Are you sure you want to log out?" +// tvThinkAgain.setOnClickListener { exampleUnFavoriteDialog.dismiss() } +// tvUnfavorite.setOnClickListener { +// singleClick { +// showLoading() +// EventBus.getDefault() +// .post(Constants.CONSTANTS_leaveApp) +// mViewModel.doSignout() +// exampleUnFavoriteDialog.dismiss() +// } +// } +// exampleUnFavoriteDialog.show() +// } else { +// toast(getString(R.string.log_first)) +// } +// } +// } + } + +// override fun onResume() { +// super.onResume() +// if (Constants.WebRefresh){ +// finish() +// } +// } + + + override fun center() { +// mViewModel.signoutData.observe(this) { +// if (it != null) { +// toast(getString(R.string.success)) +// LoginManager.getInstance().logOut() +// Memory.getMMKV() +// .putString(Constants.CONSTANTS_AuthorizationExample, it.data?.token) +// EventBus.getDefault() +// .post(Constants.CONSTANTS_enterTheApp) +// EventBus.getDefault() +// .post(Constants.CONSTANTS_onLine) +// EventBus.getDefault() +// .post(Constants.CONSTANTS_refresh_me) +// Constants.WebRefresh = true +// finish() +// } else { +// toast(getString(R.string.network_error)) +// } +// hideLoading() +// } + } + + override fun getViewBinding(): ActivitySettingBinding { + return ActivitySettingBinding.inflate(layoutInflater) + } + + + private fun clearCache(context: Context) { + deleteFilesInDirectory(context.cacheDir) + + context.externalCacheDir?.let { + deleteFilesInDirectory(it) + } + } + + private fun deleteFilesInDirectory(directory: File) { + if (directory.isDirectory) { + val files = directory.listFiles() + if (files != null) { + for (file in files) { + if (file.isDirectory) { + deleteFilesInDirectory(file) + } else { + file.delete() + } + } + } + } + directory.delete() + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/AppService.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/AppService.kt new file mode 100644 index 0000000..38de78f --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/AppService.kt @@ -0,0 +1,258 @@ +package com.jia.er.nebuluxe.app.net + +import com.jia.er.nebuluxe.app.data.BaseRes +import com.jia.er.nebuluxe.app.data.BuyVideoRes +import com.jia.er.nebuluxe.app.data.CategoriesDataRes +import com.jia.er.nebuluxe.app.data.CollectionRes +import com.jia.er.nebuluxe.app.data.CreateOrderReq +import com.jia.er.nebuluxe.app.data.CreateOrderRes +import com.jia.er.nebuluxe.app.data.CustomerBuyRecordsRes +import com.jia.er.nebuluxe.app.data.CustomerOrderRes +import com.jia.er.nebuluxe.app.data.DetailsRecommendRes +import com.jia.er.nebuluxe.app.data.ExampleKeywordDataRes +import com.jia.er.nebuluxe.app.data.FbNotificationReq +import com.jia.er.nebuluxe.app.data.FreeSeriesMoreRes +import com.jia.er.nebuluxe.app.data.HistoryDataRes +import com.jia.er.nebuluxe.app.data.HomeModuleBean +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayNoPaginateRes +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayRes +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.data.HomeTopRes +import com.jia.er.nebuluxe.app.data.LoginReq +import com.jia.er.nebuluxe.app.data.LoginRes +import com.jia.er.nebuluxe.app.data.NoticeNumRes +import com.jia.er.nebuluxe.app.data.PayReq +import com.jia.er.nebuluxe.app.data.PayRes +import com.jia.er.nebuluxe.app.data.PaySettingRes +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes +import com.jia.er.nebuluxe.app.data.RecommendDataRes +import com.jia.er.nebuluxe.app.data.RewardCoinsRes +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo +import com.jia.er.nebuluxe.app.data.UploadHistoryReq +import com.jia.er.nebuluxe.app.data.VideoListDataRes +import com.jia.er.nebuluxe.app.data.UserInfoRes +import com.jia.er.nebuluxe.app.data.UserRegisterRes +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.Field +import retrofit2.http.FormUrlEncoded +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Query + +interface AppService { + + @POST("customer/register") + fun register(): Call> + + @GET("customer/info") + fun getInfo(): Call> + + + @POST("homeTop") + fun homeTop(): Call> + + @POST("newShortPlay") + fun newShortPlay( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @GET("myCollections") + fun getCollections( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @GET("getVideoDetails") + fun getVideoDetails( + @Query("short_play_id") short_play_id: Int, + @Query("video_id") video_id: Int, + @Query("activity_id") activity_id: Int, + @Query("revolution") revolution: String, + @Query("no_ads") no_ads: Boolean?, + ): Call> + + @POST("newShortPlayNoPaginate") + fun newShortPlayNoPaginate(): Call> + + @FormUrlEncoded + @POST("createHistory") + fun createHistory( + @Field("short_play_id") short_play_id: Int, + @Field("video_id") video_id: Int, + ): Call> + + @GET("getRecommands") + fun getRecommands( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int, + @Query("revolution") revolution: String, + ): Call> + + @FormUrlEncoded + @POST("collect") + fun collect( + @Field("short_play_id") short_play_id: Int, + @Field("video_id") video_id: Int + ): Call> + + @FormUrlEncoded + @POST("cancelCollect") + fun cancelCollect( + @Field("short_play_id") short_play_id: Int, + @Field("video_id") video_id: Int + ): Call> + + + @GET("myHistorys") + fun myHistorys( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @GET("search") + fun getVideoList(@Query("search") search: String): Call> + + @GET("videoList") + fun getVideoList( + @Query("current_page") current_page: Int, + @Query("category_id") category_id: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @POST("homeRanking") + fun homeRanking(@Query("type") type: String): Call> + + @POST("uploadHistorySeconds") + fun uploadHistorySeconds( + @Body uploadHistoryReq: UploadHistoryReq + ): Call> + + @GET("freeShorPlayListNoPaginate") + fun freeMoreVideo(): Call> + + @GET("getDetailsRecommand") + fun getDetailsRecommand( + ): Call> + + @GET("search/hots") + fun hots(): Call> + + @POST("search/click") + fun click( + @Query("short_play_id") short_play_id: Int, + ): Call> + + + @GET("search") + fun keyword(@Query("search") search: String): Call> + + @GET("home/all-modules") + fun allModules(): Call> + + @FormUrlEncoded + @POST("buy_video") + fun buyVideo( + @Field("short_play_id") short_play_id: Int, + @Field("video_id") video_id: Int, + ): Call> + + @GET("getCategories") + fun getCategories(): Call> + + @POST("customer/onLine") + fun onLine( + ): Call> + + @POST("customer/enterTheApp") + fun enterTheApp(): Call> + + @POST("customer/leaveApp") + fun leaveApp(): Call> + + @FormUrlEncoded + @POST("customer/firebaseToken") + fun firebaseToken(@Field("fcm_token") fcm_token: String): Call> + + @FormUrlEncoded + @POST("w2aSelfAttribution") + fun w2aSelfAttribution( + @Field("data") data: String + ): Call> + + + @POST("openNotify") + fun openNotify( + ): Call> + + @POST("customer/uploadNoticeStatus") + fun uploadNoticeStatus( + @Body fbNotificationReq: FbNotificationReq + ): Call> + + @FormUrlEncoded + @POST("message/sendReport") + fun sendReport( + @Field("message_id") message_id: String, @Field("title") title: String + ): Call> + + @POST("noticeNum") + fun noticeNum(): Call> + + @GET("getCustomerOrder") + fun getCustomerOrder( + @Query("current_page") current_page: Int, + @Query("buy_type") buy_type: String, + @Query("page_size") page_size: Int = 10 + ): Call> + + @GET("getCustomerBuyRecords") + fun getCustomerBuyRecords( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @POST("sendCoinList") + fun sendCoinList( + @Query("current_page") current_page: Int, + @Query("page_size") page_size: Int = 10 + ): Call> + + @GET("paySettingsV3") + fun getPaySetting( + @Query("short_play_id") short_play_id: Int?, + @Query("short_play_video_id") short_play_video_id: Int? + ): Call> + + + @POST("createOrder") + fun createOrder(@Body createOrderReq: CreateOrderReq): Call> + + @POST("googlePaid") + fun googlePaid(@Body examplePayReq: PayReq?): Call> + + @POST("event/add") + suspend fun upError(@Body body: Map): Call> + + @POST("customer/login") + fun login(@Body exampleLoginReq: LoginReq): Call> + + @POST("customer/logoff") + fun logoff(): Call> + + @POST("customer/signout") + fun signout(): Call> + + @GET("highestPaymentAndHottestVideo") + fun homeHot( + @Query("buy_count_num") buycount: Int, + @Query("hottest_num") hottestnum: Int, + ): Call> + + @GET("categoryListAppendShortPlay") + fun userCenterRecommend( + @Query("short_play_num") shortplaynum: Int, + ): Call> + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt new file mode 100644 index 0000000..04e43f4 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt @@ -0,0 +1,30 @@ +package com.jia.er.nebuluxe.app.net + +import com.jia.er.nebuluxe.app.net.Decryption.EN_STR_TAG +import okhttp3.Interceptor +import okhttp3.Response +import okhttp3.ResponseBody +import java.io.IOException + + +class BodyInterceptor : Interceptor { + + @kotlin.jvm.Throws(IOException::class) + override fun intercept(chain: Interceptor.Chain): Response { + val k_center = chain.proceed(chain.request()) + return if (k_center.body != null && k_center.body!!.contentType() != null) { + val actiity = k_center.body!!.contentType() + val circle = k_center.body!!.string() + val str: String = if (!circle.startsWith(EN_STR_TAG)) { + circle + } else { + Decryption.deStr(circle) + } + val current = ResponseBody.create(actiity, str) + k_center.newBuilder().body(current).build() + } else { + k_center + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/Decryption.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/Decryption.kt new file mode 100644 index 0000000..b5edb57 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/Decryption.kt @@ -0,0 +1,66 @@ +package com.jia.er.nebuluxe.app.net + + +object Decryption { + const val BF_SIZE = 2048 + const val EN_STR_TAG = '$' + + fun deStr(data: String): String { + return String(deStrBytes(data), Charsets.UTF_8) + } + + // Decrypt bytes from hex string + fun deStrBytes(data: String): ByteArray { + if (!data.startsWith(EN_STR_TAG)) { + throw IllegalArgumentException("Invalid encoded string") + } + val hexData = data.substring(1) + val bytes = hexData.chunked(2).map { it.toInt(16).toByte() }.toByteArray() + return desadasd(bytes) + } + + // Decrypt data + fun desadasd(data: ByteArray): ByteArray { + if (data.isEmpty()) { + return data + } + val saltLen = data[0].toInt() + val salt = data.slice(1 until 1 + saltLen).toByteArray() + return deWithSalt(data.slice(1 + saltLen until data.size).toByteArray(), salt) + } + + // Decrypt data with salt + fun deWithSalt(data: ByteArray, salt: ByteArray): ByteArray { + val decryptedData = cxEd(data) + return removeSalt(decryptedData, salt) + } + + // Encrypt/Decrypt data by flipping bits + fun cxEd(data: ByteArray): ByteArray { + return data.map { (it.toInt() xor 0xFF).toByte() }.toByteArray() + } + + // Remove salt from data + fun removeSalt(data: ByteArray, salt: ByteArray): ByteArray { + if (salt.isEmpty()) return data + val ret = mutableListOf() + var idx = 0 + val sl = salt.size + data.forEach { + val s = salt[idx % sl] + ret.add(ssadcalRemoveSalt(it, s)) + idx++ + } + return ret.toByteArray() + } + + fun ssadcalRemoveSalt(v: Byte, s: Byte): Byte { + return if (v >= s) { + (v - s).toByte() + } else { + (0xFF - (s - v) + 1).toByte() + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt new file mode 100644 index 0000000..eb4291e --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainRequest.kt @@ -0,0 +1,316 @@ +package com.jia.er.nebuluxe.app.net + +import androidx.lifecycle.LiveData +import com.jia.er.nebuluxe.app.data.BaseRes +import com.jia.er.nebuluxe.app.data.BuyVideoRes +import com.jia.er.nebuluxe.app.data.CollectionRes +import com.jia.er.nebuluxe.app.data.CreateOrderReq +import com.jia.er.nebuluxe.app.data.CreateOrderRes +import com.jia.er.nebuluxe.app.data.CustomerBuyRecordsRes +import com.jia.er.nebuluxe.app.data.CustomerOrderRes +import com.jia.er.nebuluxe.app.data.DetailsRecommendRes +import com.jia.er.nebuluxe.app.data.ExampleKeywordDataRes +import com.jia.er.nebuluxe.app.data.FbNotificationReq +import com.jia.er.nebuluxe.app.data.FreeSeriesMoreRes +import com.jia.er.nebuluxe.app.data.HistoryDataRes +import com.jia.er.nebuluxe.app.data.HomeModuleBean +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayNoPaginateRes +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayRes +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.data.HomeTopRes +import com.jia.er.nebuluxe.app.data.NoticeNumRes +import com.jia.er.nebuluxe.app.data.PayReq +import com.jia.er.nebuluxe.app.data.PayRes +import com.jia.er.nebuluxe.app.data.PaySettingRes +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes +import com.jia.er.nebuluxe.app.data.RecommendDataRes +import com.jia.er.nebuluxe.app.data.RewardCoinsRes +import com.jia.er.nebuluxe.app.data.UploadHistoryReq +import com.jia.er.nebuluxe.app.data.VideoListDataRes +import com.jia.er.nebuluxe.app.data.UserInfoRes +import com.jia.er.nebuluxe.app.data.UserRegisterRes +import com.jia.er.nebuluxe.app.net.Retrofit.handleData +import com.jia.er.nebuluxe.app.net.Retrofit.response +import com.jia.er.nebuluxe.app.data.CategoriesDataRes +import com.jia.er.nebuluxe.app.data.LoginReq +import com.jia.er.nebuluxe.app.data.LoginRes +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo + +object MainRequest { + private val appService = Retrofit.build(AppService::class.java) + + + fun userRegister(): LiveData>> = handleData { + appService.register().response() + } + + fun getInfo(): LiveData>> = handleData { + appService.getInfo().response() + } + + + fun homeTop(): LiveData>> = handleData { + appService.homeTop() + .response() + } + + + fun newShortPlay(current_page: Int): LiveData>> = + handleData { + appService.newShortPlay(current_page) + .response() + } + + + fun getCollections(current_page: Int): LiveData>> = + handleData { + appService.getCollections(current_page).response() + } + + fun getVideoDetails( + short_play_id: Int, video_id: Int, activity_id: Int, revolution: String, no_ads: Boolean? + ): LiveData>> = handleData { + appService.getVideoDetails( + short_play_id, + video_id, + activity_id, + revolution, + no_ads + ) + .response() + } + + + fun newShortPlayNoPaginate(): LiveData>> = + handleData { + appService.newShortPlayNoPaginate() + .response() + } + + + fun doCreateHistory( + short_play_id: Int, video_id: Int + ): LiveData>> = handleData { + appService.createHistory(short_play_id, video_id).response() + } + + + fun getRecommands( + current_page: Int, page_size: Int, revolution: String + ): LiveData>> = handleData { + appService.getRecommands(current_page, page_size, revolution).response() + } + + + private suspend fun collect(short_play_id: Int, video_id: Int) = + appService.collect(short_play_id, video_id).response() + + fun doCollect( + short_play_id: Int, video_id: Int + ): LiveData>> = handleData { + collect(short_play_id, video_id) + } + + private suspend fun cancelCollect(short_play_id: Int, video_id: Int) = + appService.cancelCollect(short_play_id, video_id).response() + + fun doCancelCollect( + short_play_id: Int, video_id: Int + ): LiveData>> = handleData { + cancelCollect(short_play_id, video_id) + } + + + fun myHistorys( + current_page: Int + ): LiveData>> = handleData { + appService.myHistorys(current_page).response() + } + + + fun getVideoList(search: String): LiveData>> = + handleData { + appService.getVideoList(search).response() + } + + fun getVideoList( + current_page: Int, + category_id: Int + ): LiveData>> = + handleData { + appService.getVideoList(current_page, category_id).response() + } + + + fun homeRanking(type: String): LiveData>> = handleData { + appService.homeRanking(type) + .response() + } + + fun freeMoreVideo( + ): LiveData>> = + handleData { + appService.freeMoreVideo().response() + } + + + fun getDetailsRecommand( + ): LiveData>> = + handleData { + appService.getDetailsRecommand().response() + } + + fun uploadHistorySeconds( + uploadHistoryReq: UploadHistoryReq + ): LiveData>> = + handleData { + appService.uploadHistorySeconds(uploadHistoryReq).response() + } + + + fun hots(): LiveData>> = + handleData { + appService.hots().response() + } + + fun click(short_play_id: Int): LiveData>> = + handleData { + appService.click(short_play_id).response() + } + + fun keyword(search: String): LiveData>> = + handleData { + appService.keyword(search).response() + } + + + fun allModules(): LiveData>> = handleData { + appService.allModules().response() + } + + fun doBuyVideo( + short_play_id: Int, video_id: Int + ): LiveData>> = handleData { + appService.buyVideo(short_play_id, video_id).response() + } + + fun getCategories(): LiveData>> = + handleData { + appService.getCategories().response() + } + + fun enterTheApp(): LiveData>> = handleData { + appService.enterTheApp().response() + } + + fun leaveApp(): LiveData>> = handleData { + appService.leaveApp().response() + } + + fun onLine( + ): LiveData>> = + handleData { + appService.onLine().response() + } + + fun firebaseToken(fcm_token: String): LiveData>> = handleData { + appService.firebaseToken(fcm_token).response() + } + + fun w2aSelfAttribution( + data: String + ): LiveData>> = + handleData { + appService.w2aSelfAttribution(data).response() + } + + fun openNotify( + ): LiveData>> = + handleData { + appService.openNotify().response() + } + + fun uploadNoticeStatus(fbNotificationReq: FbNotificationReq): LiveData>> = + handleData { + appService.uploadNoticeStatus(fbNotificationReq) + .response() + } + + fun sendReport( + message_id: String, title: String + ): LiveData>> = + handleData { + appService.sendReport(message_id, title).response() + } + + fun noticeNum(): LiveData>> = + handleData { + appService.noticeNum().response() + } + + fun getCustomerOrder( + current_page: Int, + buy_type: String + ): LiveData>> = handleData { + appService.getCustomerOrder(current_page, buy_type).response() + } + + fun getCustomerBuyRecords(current_page: Int): LiveData>> = + handleData { + appService.getCustomerBuyRecords(current_page).response() + } + + + fun sendCoinList(current_page: Int): LiveData>> = + handleData { + appService.sendCoinList(current_page).response() + } + + fun getPaySetting( + short_play_id: Int?, + video_id: Int? + ): LiveData>> = handleData { + appService.getPaySetting(short_play_id, video_id).response() + } + + fun doGooglePaid(examplePayReq: PayReq?): LiveData>> = + handleData { + appService.googlePaid(examplePayReq).response() + } + + fun doCreateOrder(createOrderReq: CreateOrderReq): LiveData>> = + handleData { + appService.createOrder(createOrderReq).response() + } + + + fun upError(body: Map): LiveData>> = + handleData { + appService.upError(body).response() + } + + fun doLogin(exampleLoginReq: LoginReq): LiveData>> = + handleData { + appService.login(exampleLoginReq).response() + } + + fun doLogoff(): LiveData>> = handleData { + appService.logoff().response() + } + + fun doSignout(): LiveData>> = handleData { + appService.signout().response() + } + + fun homeHot(buycount: Int, hottestnum: Int): LiveData>> = + handleData { + appService.homeHot(buycount, hottestnum) + .response() + } + + fun userCenterRecommend(): LiveData>> = + handleData { + appService.userCenterRecommend(5) + .response() + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/MainViewModel.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainViewModel.kt new file mode 100644 index 0000000..dee5ef1 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/MainViewModel.kt @@ -0,0 +1,403 @@ +package com.jia.er.nebuluxe.app.net + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.jia.er.nebuluxe.app.data.LoginRes +import com.jia.er.nebuluxe.app.data.BaseRes +import com.jia.er.nebuluxe.app.data.BuyVideoRes +import com.jia.er.nebuluxe.app.data.CategoriesDataRes +import com.jia.er.nebuluxe.app.data.CollectionRes +import com.jia.er.nebuluxe.app.data.CreateOrderReq +import com.jia.er.nebuluxe.app.data.CreateOrderRes +import com.jia.er.nebuluxe.app.data.CustomerBuyRecordsRes +import com.jia.er.nebuluxe.app.data.CustomerOrderRes +import com.jia.er.nebuluxe.app.data.DetailsRecommendRes +import com.jia.er.nebuluxe.app.data.ExampleKeywordDataRes +import com.jia.er.nebuluxe.app.data.FbNotificationReq +import com.jia.er.nebuluxe.app.data.FreeSeriesMoreRes +import com.jia.er.nebuluxe.app.data.HistoryDataRes +import com.jia.er.nebuluxe.app.data.HomeModuleBean +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayNoPaginateRes +import com.jia.er.nebuluxe.app.data.HomeNewShortPlayRes +import com.jia.er.nebuluxe.app.data.HomeRankingRes +import com.jia.er.nebuluxe.app.data.LoginReq +import com.jia.er.nebuluxe.app.data.NoticeNumRes +import com.jia.er.nebuluxe.app.data.PayReq +import com.jia.er.nebuluxe.app.data.PayRes +import com.jia.er.nebuluxe.app.data.PaySettingRes +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes +import com.jia.er.nebuluxe.app.data.RecommendDataRes +import com.jia.er.nebuluxe.app.data.RewardCoinsRes +import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo +import com.jia.er.nebuluxe.app.data.UploadHistoryReq +import com.jia.er.nebuluxe.app.data.UserInfoRes +import com.jia.er.nebuluxe.app.data.UserRegisterRes +import com.jia.er.nebuluxe.app.data.VideoListDataRes +import com.jia.er.nebuluxe.app.net.MainRequest + +class MainViewModel : ViewModel() { + private val userRegisterLiveData = MutableLiveData>() + val userRegisterData: MutableLiveData> get() = userRegisterLiveData + fun createUserAccount( + ) { + MainRequest.userRegister().observeForever { result -> + userRegisterLiveData.value = result.getOrNull() + } + } + + private val infoLiveData = MutableLiveData>() + val infoData: MutableLiveData> get() = infoLiveData + fun getInfo() { + MainRequest.getInfo().observeForever { result -> + infoLiveData.value = result.getOrNull() + } + } + + + private val newShortPlayLiveData = MutableLiveData>() + val newShortPlayData: MutableLiveData> get() = newShortPlayLiveData + fun newShortPlay(current_page: Int) { + MainRequest.newShortPlay(current_page) + .observeForever { + newShortPlayLiveData.value = it.getOrNull() + } + } + + private val videoDetailsLiveData = MutableLiveData>() + val videoDetailsData: MutableLiveData> get() = videoDetailsLiveData + fun getVideoDetails( + short_play_id: Int, + video_id: Int, + activity_id: Int, + revolution: String, + no_ads: Boolean? + ) { + MainRequest.getVideoDetails( + short_play_id, + video_id, + activity_id, + revolution, + no_ads + ) + .observeForever { result -> + videoDetailsLiveData.value = result.getOrNull() + } + } + + private val homeNewLiveData = MutableLiveData>() + val homeNewData: MutableLiveData> get() = homeNewLiveData + fun newShortPlayNoPaginate() { + MainRequest.newShortPlayNoPaginate() + .observeForever { + homeNewLiveData.value = it.getOrNull() + } + } + + + fun doCreateHistory(short_play_id: Int, video_id: Int) { + MainRequest.doCreateHistory(short_play_id, video_id).observeForever {} + } + + private val searchLiveData = MutableLiveData>() + val searchData: MutableLiveData> get() = searchLiveData + fun getVideoList(search: String) { + MainRequest.getVideoList(search).observeForever { result -> + searchLiveData.value = result.getOrNull() + } + } + + private val videoListLiveData = MutableLiveData>() + val videoListData: MutableLiveData> get() = videoListLiveData + fun getVideoList(current_page: Int, category_id: Int) { + MainRequest.getVideoList(current_page, category_id).observeForever { result -> + videoListLiveData.value = result.getOrNull() + } + } + + private val homeRankingLiveData = MutableLiveData>() + val homeRankingData: MutableLiveData> get() = homeRankingLiveData + fun homeRanking(type: String) { + MainRequest.homeRanking(type) + .observeForever { + homeRankingLiveData.value = it.getOrNull() + } + } + + + private val freeMoreLiveData = MutableLiveData>() + val freeMoreData: MutableLiveData> get() = freeMoreLiveData + + fun freeMoreVideo() { + MainRequest.freeMoreVideo().observeForever { result -> + freeMoreLiveData.value = result.getOrNull() + } + } + + private val recommendLiveData = MutableLiveData>() + val recommendData: MutableLiveData> get() = recommendLiveData + fun getRecommands(current_page: Int, page_size: Int, revolution: String) { + MainRequest.getRecommands(current_page, page_size, revolution) + .observeForever { result -> + recommendLiveData.value = result.getOrNull() + } + } + + + private val collectLiveData = MutableLiveData>() + val collectData: MutableLiveData> get() = collectLiveData + fun doCollect(short_play_id: Int, video_id: Int) { + MainRequest.doCollect(short_play_id, video_id).observeForever { result -> + collectLiveData.value = result.getOrNull() + } + } + + private val cancelCollectLiveData = MutableLiveData>() + val cancelCollectData: MutableLiveData> get() = cancelCollectLiveData + fun doCancelCollect(short_play_id: Int, video_id: Int) { + MainRequest.doCancelCollect(short_play_id, video_id).observeForever { result -> + cancelCollectLiveData.value = result.getOrNull() + } + } + + private val collectionsLiveData = MutableLiveData>() + val collectionsData: MutableLiveData> get() = collectionsLiveData + fun getCollections(current_page: Int) { + MainRequest.getCollections(current_page).observeForever { result -> + collectionsLiveData.value = result.getOrNull() + } + } + + private val historysLiveData = MutableLiveData>() + val historysData: MutableLiveData> get() = historysLiveData + fun myHistorys( + current_page: Int + ) { + MainRequest.myHistorys(current_page).observeForever { result -> + historysLiveData.value = result.getOrNull() + } + } + + private val getDetailsRecommandLiveData = MutableLiveData>() + val getDetailsRecommandData: MutableLiveData> get() = getDetailsRecommandLiveData + + fun getDetailsRecommand() { + MainRequest.getDetailsRecommand().observeForever { result -> + getDetailsRecommandLiveData.value = result.getOrNull() + } + } + + fun uploadHistorySeconds(uploadHistoryReq: UploadHistoryReq) { + MainRequest.uploadHistorySeconds(uploadHistoryReq).observeForever {} + } + + + private val hotsLiveData = MutableLiveData>() + val hotsData: MutableLiveData> get() = hotsLiveData + fun hots() { + MainRequest.hots().observeForever { result -> + hotsLiveData.value = result.getOrNull() + } + } + + fun click(short_play_id: Int) { + MainRequest.click(short_play_id).observeForever {} + } + + private val keywordLiveData = MutableLiveData>() + val keywordData: MutableLiveData> get() = keywordLiveData + fun keyword(search: String) { + MainRequest.keyword(search).observeForever { result -> + keywordLiveData.value = result.getOrNull() + } + } + + private val allModulesLiveData = MutableLiveData>() + val allModulesData: MutableLiveData> get() = allModulesLiveData + fun allModules() { + MainRequest.allModules().observeForever { result -> + allModulesLiveData.value = result.getOrNull() + } + } + + private val buy_videoLiveData = MutableLiveData>() + val buy_videoData: MutableLiveData> get() = buy_videoLiveData + fun doBuyVideo(short_play_id: Int, video_id: Int) { + MainRequest.doBuyVideo(short_play_id, video_id).observeForever { result -> + buy_videoLiveData.value = result.getOrNull() + } + } + + private val categoriesLiveData = MutableLiveData>() + val categoriesData: MutableLiveData> get() = categoriesLiveData + fun getCategories() { + MainRequest.getCategories().observeForever { result -> + categoriesLiveData.value = result.getOrNull() + } + } + + fun enterTheApp() { + MainRequest.enterTheApp().observeForever {} + } + + fun leaveApp() { + MainRequest.leaveApp().observeForever {} + } + + fun onLine() { + MainRequest.onLine().observeForever {} + } + + fun firebaseToken( + fcm_token: String + ) { + MainRequest.firebaseToken(fcm_token).observeForever {} + } + + private val w2aSelfAttributionLiveData = + MutableLiveData>() + + fun w2aSelfAttribution(data: String) { + MainRequest.w2aSelfAttribution(data).observeForever { result -> + w2aSelfAttributionLiveData.value = result.getOrNull() + } + } + + private val openNotifyLiveData = MutableLiveData>() + val openNotifyData: MutableLiveData> get() = openNotifyLiveData + + fun openNotify() { + MainRequest.openNotify().observeForever { result -> + openNotifyLiveData.value = result.getOrNull() + } + } + + private val notificationLiveData = MutableLiveData>() + fun uploadNoticeStatus(fbNotificationReq: FbNotificationReq) { + MainRequest.uploadNoticeStatus(fbNotificationReq) + .observeForever { + notificationLiveData.value = it.getOrNull() + } + } + + fun sendReport(message_id: String, title: String) { + MainRequest.sendReport(message_id, title).observeForever {} + } + + private val noticeNumLiveData = + MutableLiveData>() + val noticeNumData: MutableLiveData> get() = noticeNumLiveData + fun noticeNum() { + MainRequest.noticeNum().observeForever { result -> + noticeNumLiveData.value = result.getOrNull() + } + } + + private val getPaySettingLiveData = MutableLiveData>() + val getPaySettingData: MutableLiveData> get() = getPaySettingLiveData + fun getPaySetting( + short_play_id: Int?, + video_id: Int? + ) { + MainRequest.getPaySetting(short_play_id, video_id).observeForever { result -> + getPaySettingLiveData.value = result.getOrNull() + } + } + + private val restorePaidLiveData = MutableLiveData>() + val restorePaidData: MutableLiveData> get() = restorePaidLiveData + fun restorePaid(examplePayReq: PayReq?) { + MainRequest.doGooglePaid(examplePayReq).observeForever { result -> + restorePaidLiveData.value = result.getOrNull() + } + } + + private val createOrderLiveData = MutableLiveData>() + val createOrderData: MutableLiveData> get() = createOrderLiveData + fun createOrder(createOrderReq: CreateOrderReq) { + MainRequest.doCreateOrder(createOrderReq).observeForever { result -> + createOrderLiveData.value = result.getOrNull() + } + } + + private val googlePaidLiveData = MutableLiveData>() + val googlePaidData: MutableLiveData> get() = googlePaidLiveData + fun googlePaid(examplePayReq: PayReq?) { + MainRequest.doGooglePaid(examplePayReq).observeForever { result -> + googlePaidLiveData.value = result.getOrNull() + } + } + + private val customerOrderLiveData = MutableLiveData>() + val customerOrderData: MutableLiveData> get() = customerOrderLiveData + fun getCustomerOrder(current_page: Int, buy_type: String) { + MainRequest.getCustomerOrder(current_page, buy_type).observeForever { result -> + customerOrderLiveData.value = result.getOrNull() + } + } + + private val customerBuyRecordsLiveData = + MutableLiveData>() + val customerBuyRecordsData: MutableLiveData> get() = customerBuyRecordsLiveData + fun getCustomerBuyRecords(current_page: Int) { + MainRequest.getCustomerBuyRecords(current_page).observeForever { result -> + customerBuyRecordsLiveData.value = result.getOrNull() + } + } + + + private val sendCoinListLiveData = + MutableLiveData>() + val sendCoinListData: MutableLiveData> get() = sendCoinListLiveData + fun sendCoinList(current_page: Int) { + MainRequest.sendCoinList(current_page).observeForever { result -> + sendCoinListLiveData.value = result.getOrNull() + } + } + + fun upError(body: Map) { + MainRequest.upError(body).observeForever {} + } + + private val loginLiveData = MutableLiveData>() + val loginData: MutableLiveData> get() = loginLiveData + fun doLogin(exampleLoginReq: LoginReq) { + MainRequest.doLogin(exampleLoginReq).observeForever { result -> + loginLiveData.value = result.getOrNull() + } + } + + private val logoffLiveData = MutableLiveData>() + val logoffData: MutableLiveData> get() = logoffLiveData + fun doLogoff() { + MainRequest.doLogoff().observeForever { result -> + logoffLiveData.value = result.getOrNull() + } + } + + private val signoutLiveData = MutableLiveData>() + val signoutData: MutableLiveData> get() = signoutLiveData + fun doSignout() { + MainRequest.doSignout().observeForever { result -> + signoutLiveData.value = result.getOrNull() + } + } + + private val homeHotLiveData = MutableLiveData?>() + val homeHotData: MutableLiveData?> get() = homeHotLiveData + fun homeHot(buycount: Int, hottestnum: Int) { + MainRequest.homeHot(buycount, hottestnum) + .observeForever { + homeHotLiveData.value = it.getOrNull() + } + } + + private val userCenterRecommendLiveData = MutableLiveData?>() + val userCenterRecommendData: MutableLiveData?> get() = userCenterRecommendLiveData + fun userCenterRecommend(){ + MainRequest.userCenterRecommend() + .observeForever { + userCenterRecommendLiveData.value = it.getOrNull() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt new file mode 100644 index 0000000..ffeedbb --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt @@ -0,0 +1,221 @@ +package com.jia.er.nebuluxe.app.net + +import android.os.Build +import android.provider.Settings +import androidx.lifecycle.LiveData +import androidx.lifecycle.liveData +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.basics.MyApplication.Companion.context +import com.jia.er.nebuluxe.app.data.BaseRes +import com.jia.er.nebuluxe.app.utils.Memory +import com.jia.er.nebuluxe.app.utils.PackageUtils +import com.jia.er.nebuluxe.app.utils.getAdvertisingIdInfo +import com.jia.er.nebuluxe.app.utils.getUserAgent +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.greenrobot.eventbus.EventBus +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.util.TimeZone +import java.util.concurrent.TimeUnit +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException +import kotlin.coroutines.suspendCoroutine + + +object Retrofit { + private val retrofit: Retrofit + fun

build(serviceClass: Class

): P = retrofit.create(serviceClass) + private val httpLoggingInterceptor = HttpLoggingInterceptor() + private const val DELAY_TIME_MILLIS = 2000L + private var lastPostTime: Long = 0L + private val lock = Any() + private val lock1 = Any() + + init { + httpLoggingInterceptor.level = + if (Constants.isUat) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE + val okHttpClient = OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS) + .addInterceptor(httpLoggingInterceptor) + .addInterceptor(BodyInterceptor()) + .addInterceptor { chain -> + val request = + chain.request().newBuilder().header("Content-Type", "application/json") + .addHeader( + Constants.CONSTANTS_AuthorizationExample, + Memory.getMMKV() + .getString(Constants.CONSTANTS_AuthorizationExample, "") + .toString() + ) + .addHeader( + Constants.CONSTANTS_device_id, + Settings.Secure.getString( + context.contentResolver, + Settings.Secure.ANDROID_ID + ) + ).addHeader("User-Agent", getUserAgent()) + .addHeader( + Constants.CONSTANTS_device_gaid, + getAdvertisingIdInfo(context) + ) + .addHeader( + Constants.CONSTANTS_app_name, + context.getString(R.string.app_name) + ).addHeader( + Constants.CONSTANTS_app_version, + PackageUtils.getPackageVersion(context) + ) + .addHeader( + Constants.CONSTANTS_system_type, + "android" + ) + .addHeader( + Constants.CONSTANTS_lang_key, + Memory.getMMKV() + .getString(Constants.CONSTANTS_lang_key, "en").toString() + ) + .addHeader( + Constants.CONSTANTS_time_zone, + getCurrentTimeZone() + ) + .addHeader( + Constants.CONSTANTS_model, + Build.MODEL + ) + .addHeader( + Constants.CONSTANTS_brand, + Build.BRAND + ) + .addHeader( + Constants.CONSTANTS_system_version, + Build.VERSION.RELEASE + ) + .build() + if (Constants.isUat) { + for (headerName in request.headers.names()) { + println(headerName + ": " + request.header(headerName)) + } + } + chain.proceed(request) + } + .build() + retrofit = + Retrofit.Builder() + .baseUrl(Constants.Constants_BASE_URL_RES) + .addConverterFactory( + GsonConverterFactory.create() + ) + .client(okHttpClient) + .build() + } + + suspend fun Call.response(): T { + return suspendCoroutine { continuation -> + enqueue(object : Callback { + override fun onFailure(call: Call, t: Throwable) { + continuation.resumeWithException(t) + } + + override fun onResponse(call: Call, response: Response) { + val body = response.body() + if (response.raw().code == 401) { + GlobalScope.launch(Dispatchers.Main) { + handle401Response() + } + } + if (response.raw().code == 402) { + GlobalScope.launch(Dispatchers.Main) { + handle402Response() + } + } + if (body != null) continuation.resume(body) + else continuation.resumeWithException(RuntimeException("response body is null")) + } + }) + } + } + + + private suspend fun handle402Response() = withContext(Dispatchers.Main) { + synchronized(lock) { + val currentTime = System.currentTimeMillis() + if (currentTime - lastPostTime >= DELAY_TIME_MILLIS) { + EventBus.getDefault() + .post(Constants.CONSTANTS_auth_refresh) + lastPostTime = currentTime + } + } + } + + private suspend fun handle401Response() = withContext(Dispatchers.Main) { + synchronized(lock1) { + val currentTime = System.currentTimeMillis() + if (currentTime - lastPostTime >= DELAY_TIME_MILLIS) { + EventBus.getDefault() + .post(Constants.CONSTANTS_auth_refresh) + lastPostTime = currentTime + } + } + } + + + fun handleData(apiCall: suspend () -> BaseRes): LiveData>> { + return liveData(Dispatchers.IO) { + val result = try { + val response = apiCall.invoke() + if (response.code == 200) { + Result.success(response) + } else { + Memory.getMMKV().putString("errorMsg", response.msg) + Result.failure(RuntimeException("Result failure")) + } + } catch (e: Exception) { + Result.failure(e) + } + emit(result) + } + } + + fun getCurrentTimeZone(): String { + return createGmtOffsetString(true, true, TimeZone.getDefault().rawOffset) + } + + private fun createGmtOffsetString( + includeGmt: Boolean, includeMinuteSeparator: Boolean, offsetMillis: Int + ): String { + var offsetMinutes = offsetMillis / 60000 + var sign = '+' + if (offsetMinutes < 0) { + sign = '-' + offsetMinutes = -offsetMinutes + } + val builder: StringBuilder = StringBuilder(9) + if (includeGmt) { + builder.append("GMT") + } + builder.append(sign) + appendNumber(builder, 2, offsetMinutes / 60) + if (includeMinuteSeparator) { + builder.append(':') + } + appendNumber(builder, 2, offsetMinutes % 60) + return builder.toString() + } + + private fun appendNumber(builder: StringBuilder, count: Int, value: Int) { + val string = value.toString() + for (i in 0 until count - string.length) { + builder.append('0') + } + builder.append(string); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/CustomRoundedCorners.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/CustomRoundedCorners.kt new file mode 100644 index 0000000..75e206b --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/CustomRoundedCorners.kt @@ -0,0 +1,56 @@ +package com.jia.er.nebuluxe.app.ui + +import android.graphics.* +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation +import java.security.MessageDigest + +class CustomRoundedCorners( + private val topLeft: Float = 0f, + private val topRight: Float = 0f, + private val bottomRight: Float = 0f, + private val bottomLeft: Float = 0f +) : BitmapTransformation() { + + override fun updateDiskCacheKey(messageDigest: MessageDigest) { + messageDigest.update("$topLeft-$topRight-$bottomRight-$bottomLeft".toByteArray()) + } + + override fun transform( + pool: BitmapPool, + toTransform: Bitmap, + outWidth: Int, + outHeight: Int + ): Bitmap { + return roundCrop(pool, toTransform) + } + + private fun roundCrop(pool: BitmapPool, source: Bitmap?): Bitmap { + if (source == null) return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) + + val result = pool.get(source.width, source.height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(result) + + val paint = Paint().apply { + isAntiAlias = true + shader = BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) + } + + val path = Path() + val radii = floatArrayOf( + topLeft, topLeft, + topRight, topRight, + bottomRight, bottomRight, + bottomLeft, bottomLeft + ) + path.addRoundRect( + RectF(0f, 0f, source.width.toFloat(), source.height.toFloat()), + radii, + Path.Direction.CW + ) + + canvas.drawPath(path, paint) + return result + } +} + diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/FfmpegRenderersFactory.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/FfmpegRenderersFactory.kt new file mode 100644 index 0000000..9c8daeb --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/FfmpegRenderersFactory.kt @@ -0,0 +1,44 @@ +package com.jia.er.nebuluxe.app.ui + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Handler +import androidx.media3.decoder.ffmpeg.FfmpegAudioRenderer +import androidx.media3.exoplayer.DefaultRenderersFactory +import androidx.media3.exoplayer.Renderer +import androidx.media3.exoplayer.audio.AudioRendererEventListener +import androidx.media3.exoplayer.audio.AudioSink +import androidx.media3.exoplayer.mediacodec.MediaCodecSelector + + +@SuppressLint("UnsafeOptInUsageError") +internal class FfmpegRenderersFactory(context: Context?) : DefaultRenderersFactory( + context!! +) { + init { + setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) + } + + override fun buildAudioRenderers( + context: Context, + extensionRendererMode: Int, + mediaCodecSelector: MediaCodecSelector, + enableDecoderFallback: Boolean, + audioSink: AudioSink, + eventHandler: Handler, + eventListener: AudioRendererEventListener, + out: ArrayList + ) { + out.add(FfmpegAudioRenderer()) + super.buildAudioRenderers( + context, + extensionRendererMode, + mediaCodecSelector, + enableDecoderFallback, + audioSink, + eventHandler, + eventListener, + out + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/ListItemsVisibilityCalculator.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/ListItemsVisibilityCalculator.kt new file mode 100644 index 0000000..78851af --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/ListItemsVisibilityCalculator.kt @@ -0,0 +1,9 @@ +package com.jia.er.nebuluxe.app.ui + +import androidx.recyclerview.widget.RecyclerView + +interface ListItemsVisibilityCalculator { + fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) + fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) + fun detachToSnapHelper() +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/LoadingLine.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/LoadingLine.kt new file mode 100644 index 0000000..3506255 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/LoadingLine.kt @@ -0,0 +1,59 @@ +package com.jia.er.nebuluxe.app.ui + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.AlphaAnimation +import android.view.animation.Animation +import android.view.animation.AnimationSet +import android.view.animation.ScaleAnimation +import android.widget.FrameLayout +import com.jia.er.nebuluxe.app.R + + +class LoadingLine : FrameLayout { + private var loadView: View? = null + + constructor(context: Context) : super(context) { + initView(context) + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + initView(context) + } + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int + ) : super(context, attrs, defStyleAttr) { + initView(context) + } + + private fun initView(mContext: Context) { + val view: View = LayoutInflater.from(mContext).inflate(R.layout.line_layout, null) + loadView = view.findViewById(R.id.loadingView) + this.addView(view) + } + + fun startAnimation() { + val scale = ScaleAnimation( + 0.3f, 1f, 1f, 1f, + Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f + ) + val alpha = AlphaAnimation(1f, 0.2f) + scale.repeatCount = -1 + alpha.repeatCount = -1 + val set = AnimationSet(true) + set.addAnimation(scale) + set.addAnimation(alpha) + set.duration = 500 + loadView!!.startAnimation(set) + } + + fun endAnimation(){ + loadView!!.clearAnimation() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/OnSnapHelperCurrentListener.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/OnSnapHelperCurrentListener.kt new file mode 100644 index 0000000..2346ad8 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/OnSnapHelperCurrentListener.kt @@ -0,0 +1,10 @@ +package com.jia.er.nebuluxe.app.ui + +import android.view.View + +interface OnSnapHelperCurrentListener { + + fun setActive(currentView: View?, position: Int, previousView: View?, previousPosition: Int) + + fun disActive(detachedView: View?, detachedPosition: Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/PosterStyleImageView.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/PosterStyleImageView.kt new file mode 100644 index 0000000..dbf1537 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/PosterStyleImageView.kt @@ -0,0 +1,244 @@ +package com.jia.er.nebuluxe.app.ui + +import android.content.Context +import android.graphics.* +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.util.TypedValue +import android.view.View +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition + +/** + * 海报风格图片视图 - 简化版 + * 使用顶部略倾斜的大圆角路径,贴合上传海报的形状 + */ +class PosterStyleImageView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : View(context, attrs, defStyleAttr) { + + // 画笔 + private val imagePaint = Paint(Paint.ANTI_ALIAS_FLAG) + + // 路径 + private val imagePath = Path() + + // 图片相关 + private var imageBitmap: Bitmap? = null + private var imageMatrix = Matrix() + private var imageShader: BitmapShader? = null + + // 尺寸和位置 + private var imageRect = RectF() + + // 圆角(像素)——默认左上更短,其余正常 + private var cornerRadiusTopLeft = dpToPx(12f) + private var cornerRadiusTopRight = dpToPx(18f) + private var cornerRadiusBottomRight = dpToPx(18f) + private var cornerRadiusBottomLeft = dpToPx(18f) + + // 顶边倾斜偏移(像素):左上相对右上向下偏移,正值代表左侧更低 + private var topSlantOffset = dpToPx(10f) + + init { + setupPaint() + } + + private fun setupPaint() { + imagePaint.style = Paint.Style.FILL + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + + imageRect.set( + paddingLeft.toFloat(), + paddingTop.toFloat(), + (w - paddingRight).toFloat(), + (h - paddingBottom).toFloat() + ) + + createImagePath() + } + + private fun createImagePath() { + imagePath.reset() + + // 四个角的半径,限定不要超过边长的一半 + val rTL = cornerRadiusTopLeft.coerceAtMost(minOf(imageRect.width(), imageRect.height()) / 2f) + val rTR = cornerRadiusTopRight.coerceAtMost(minOf(imageRect.width(), imageRect.height()) / 2f) + val rBR = cornerRadiusBottomRight.coerceAtMost(minOf(imageRect.width(), imageRect.height()) / 2f) + val rBL = cornerRadiusBottomLeft.coerceAtMost(minOf(imageRect.width(), imageRect.height()) / 2f) + + // 顶部两点,形成倾斜 + val left = imageRect.left + val right = imageRect.right + val topLeftY = imageRect.top + topSlantOffset + val topRightY = imageRect.top + val bottom = imageRect.bottom + + // 起点:左上边内切圆起始点(顺时针) + imagePath.moveTo(left + rTL, topLeftY) + + // 顶边(倾斜)到右上角前 + imagePath.lineTo(right - rTR, topRightY) + // 右上角圆弧(用二阶贝塞尔逼近) + imagePath.quadTo(right, topRightY, right, topRightY + rTR) + + // 右边到右下角前 + imagePath.lineTo(right, bottom - rBR) + // 右下角 + imagePath.quadTo(right, bottom, right - rBR, bottom) + + // 底边到左下角前 + imagePath.lineTo(left + rBL, bottom) + // 左下角 + imagePath.quadTo(left, bottom, left, bottom - rBL) + + // 左边到左上角前(注意顶边是倾斜的,终点是 topLeftY) + imagePath.lineTo(left, topLeftY + rTL) + // 左上角(小圆角) + imagePath.quadTo(left, topLeftY, left + rTL, topLeftY) + + imagePath.close() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + drawImage(canvas) + } + + private fun drawImage(canvas: Canvas) { + imageBitmap?.let { bitmap -> + if (imageShader == null) { + imageShader = BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) + } + + val bitmapWidth = bitmap.width.toFloat() + val bitmapHeight = bitmap.height.toFloat() + val scaleX = imageRect.width() / bitmapWidth + val scaleY = imageRect.height() / bitmapHeight + val scale = maxOf(scaleX, scaleY) + + imageMatrix.reset() + imageMatrix.setScale(scale, scale) + imageMatrix.postTranslate( + imageRect.left + (imageRect.width() - bitmapWidth * scale) / 2, + imageRect.top + (imageRect.height() - bitmapHeight * scale) / 2 + ) + + imageShader?.setLocalMatrix(imageMatrix) + imagePaint.shader = imageShader + canvas.drawPath(imagePath, imagePaint) + } + } + + fun setImage(bitmap: Bitmap) { + imageBitmap = bitmap + invalidate() + } + + fun setImageResource(resId: Int) { + ContextCompat.getDrawable(context, resId)?.let { drawable -> + setImage(drawable.toBitmap()) + } + } + + /** + * 使用 Glide 从网络加载图片 + */ + fun loadImage(url: String, placeholderRes: Int? = null, errorRes: Int? = null) { + val requestOptions = RequestOptions() + placeholderRes?.let { requestOptions.placeholder(it) } + errorRes?.let { requestOptions.error(it) } + + Glide.with(this) + .asBitmap() + .load(url) + .apply(requestOptions) + .into(object : CustomTarget() { + override fun onResourceReady(resource: Bitmap, transition: Transition?) { + setImage(resource) + } + override fun onLoadCleared(placeholder: Drawable?) { + placeholder?.toBitmap()?.let { setImage(it) } + } + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + errorDrawable?.toBitmap()?.let { setImage(it) } + } + }) + } + + // 统一设置四角圆角(像素) + fun setCornerRadius(radiusPx: Float) { + cornerRadiusTopLeft = radiusPx + cornerRadiusTopRight = radiusPx + cornerRadiusBottomRight = radiusPx + cornerRadiusBottomLeft = radiusPx + createImagePath() + invalidate() + } + + // 分别设置四角圆角(像素) + fun setCornerRadii( + topLeftPx: Float, + topRightPx: Float, + bottomRightPx: Float, + bottomLeftPx: Float + ) { + cornerRadiusTopLeft = topLeftPx + cornerRadiusTopRight = topRightPx + cornerRadiusBottomRight = bottomRightPx + cornerRadiusBottomLeft = bottomLeftPx + createImagePath() + invalidate() + } + + // 统一设置四角圆角(dp) + fun setCornerRadiusDp(radiusDp: Float) { + setCornerRadius(dpToPx(radiusDp)) + } + + // 分别设置四角圆角(dp) + fun setCornerRadiiDp( + topLeftDp: Float, + topRightDp: Float, + bottomRightDp: Float, + bottomLeftDp: Float + ) { + setCornerRadii( + dpToPx(topLeftDp), + dpToPx(topRightDp), + dpToPx(bottomRightDp), + dpToPx(bottomLeftDp) + ) + } + + // 便捷方法:左上短、其他正常(传入dp) + fun setTopLeftShortStyle(topLeftDp: Float = 12f, otherDp: Float = 18f) { + setCornerRadiiDp(topLeftDp, otherDp, otherDp, otherDp) + } + + // 设置顶边倾斜偏移 + fun setTopSlantOffsetPx(offsetPx: Float) { + topSlantOffset = offsetPx + createImagePath() + invalidate() + } + fun setTopSlantOffsetDp(offsetDp: Float) { + setTopSlantOffsetPx(dpToPx(offsetDp)) + } + + fun getCornerRadius(): Float = cornerRadiusTopLeft + + private fun dpToPx(dp: Float): Float { + return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.displayMetrics) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/RecyclerViewScrollerDetection.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/RecyclerViewScrollerDetection.kt new file mode 100644 index 0000000..67dc2a1 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/RecyclerViewScrollerDetection.kt @@ -0,0 +1,120 @@ +package com.jia.er.nebuluxe.app.ui + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener +import androidx.recyclerview.widget.SnapHelper + +class RecyclerViewScrollerDetection : ListItemsVisibilityCalculator { + + private var mSnapHelper: SnapHelper? = null + private var mCurrentListener: OnSnapHelperCurrentListener? = null + var position = RecyclerView.NO_POSITION + private var previousPosition = RecyclerView.NO_POSITION + var isFirstAttached = false + private var recyclerView: RecyclerView? = null + val mSnapScrollListener = SnapScrollListener() + var mSnapChildAttachStateListener: SnapChildAttachStateChangeListener? = null + + var isFirstActive = true + private var currentItemView: View? = null + private var previousView: View? = null + + + fun attachToSnapHelper(snapHelper: SnapHelper) { + mSnapHelper = snapHelper + } + + fun addOnScrollListener(recyclerView: RecyclerView) { + this.recyclerView = recyclerView + recyclerView.addOnScrollListener(mSnapScrollListener) + mSnapChildAttachStateListener = SnapChildAttachStateChangeListener(recyclerView) + mSnapChildAttachStateListener?.run { + recyclerView.addOnChildAttachStateChangeListener(this) + } + } + + inner class SnapScrollListener : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + this@RecyclerViewScrollerDetection.onScrollStateChanged(recyclerView, newState) + } + } + + inner class SnapChildAttachStateChangeListener(var recyclerView: RecyclerView) : + OnChildAttachStateChangeListener { + override fun onChildViewAttachedToWindow(view: View) { + if (!isFirstActive || isFirstAttached) return + position = recyclerView.getChildAdapterPosition(view) + currentItemView = view + mCurrentListener?.setActive(view, position, null, previousPosition) + previousPosition = position + previousView = view + isFirstAttached = true + } + + override fun onChildViewDetachedFromWindow(view: View) { + val previousPosition = recyclerView.getChildAdapterPosition(view) + currentItemView?.run { + val position = recyclerView.getChildAdapterPosition( + this + ) + mCurrentListener?.let { + if (position == previousPosition) { + it.disActive(view, previousPosition) + } + } + } + } + + } + + fun setCurrentListener(mCurrentListener: OnSnapHelperCurrentListener?) { + this.mCurrentListener = mCurrentListener + } + + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + try { + when (newState) { + RecyclerView.SCROLL_STATE_IDLE -> { + val layoutManager = recyclerView.layoutManager + currentItemView = mSnapHelper?.findSnapView(layoutManager) + if (null == currentItemView) return + val currentPosition = recyclerView.getChildAdapterPosition(currentItemView!!) + if (previousPosition == currentPosition || null == mCurrentListener) return + position = recyclerView.getChildAdapterPosition(currentItemView!!) + val mPreviousView = previousView + val mPreviousPosition = previousPosition + mCurrentListener?.setActive( + currentItemView, + position, + mPreviousView, + mPreviousPosition + ) + previousPosition = currentPosition + previousView = currentItemView + } + + RecyclerView.SCROLL_STATE_DRAGGING -> { + } + + RecyclerView.SCROLL_STATE_SETTLING -> { + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun detachToSnapHelper() { + recyclerView?.removeOnScrollListener(mSnapScrollListener) + mSnapChildAttachStateListener?.run { + recyclerView?.removeOnChildAttachStateChangeListener( + this + ) + } + } + + override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {} + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/RotateDownPageTransformer.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/RotateDownPageTransformer.kt new file mode 100644 index 0000000..5dfc840 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/RotateDownPageTransformer.kt @@ -0,0 +1,67 @@ + +package com.jia.er.nebuluxe.app.ui + +import android.view.View +import androidx.viewpager2.widget.ViewPager2 + + +class RotateDownPageTransformer( + private val maxRotate: Float = DEFAULT_MAX_ROTATE, + private val sideMargin: Float = 0f, // Positive value creates visible gap + private val scaleFactor: Float = 0.95f +) : ViewPager2.PageTransformer { + + companion object { + private const val DEFAULT_MAX_ROTATE = 15.0f + private const val DEFAULT_CENTER = 0.5f + } + + override fun transformPage(view: View, position: Float) { + val scale = if (abs(position) <= 1) { + (1 - abs(position)) * (1 - scaleFactor) + scaleFactor + } else { + scaleFactor + } + + when { + position < -1 -> { + // [-Infinity,-1) + view.rotation = maxRotate * -1 + view.pivotX = view.width.toFloat() + view.pivotY = view.height.toFloat() + view.scaleX = scaleFactor + view.scaleY = scaleFactor + view.translationX = -sideMargin * 2 + } + position <= 1 -> { // [-1,1] + // Calculate direction (left or right) + val direction = if (position < 0) -1f else 1f + + view.pivotX = if (position < 0) { + view.width * (DEFAULT_CENTER + DEFAULT_CENTER * -position) + } else { + view.width * DEFAULT_CENTER * (1 - position) + } + + view.pivotY = view.height.toFloat() + view.rotation = maxRotate * position + view.scaleX = scale + view.scaleY = scale + view.translationX = (sideMargin * position) + (sideMargin * direction) + } + else -> { + // (1,+Infinity] + view.rotation = maxRotate + view.pivotX = 0f + view.pivotY = view.height.toFloat() + view.scaleX = scaleFactor + view.scaleY = scaleFactor + view.translationX = sideMargin * 2 + } + } + } + + private fun abs(value: Float): Float { + return if (value < 0) -value else value + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/ScrollTextView.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/ScrollTextView.kt new file mode 100644 index 0000000..79f0939 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/ScrollTextView.kt @@ -0,0 +1,61 @@ +package com.jia.er.nebuluxe.app.ui + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView + + +class ScrollTextView @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 +) : AppCompatTextView(context, attrs, defStyleAttr) { + + private var animator: ObjectAnimator? = null + private var currentIndex = 0 + private var dataList: MutableList = mutableListOf() + + fun setData(data: MutableList) { + dataList.clear() + dataList = data + currentIndex = 0 + animator?.cancel() + animator?.removeAllListeners() + if (dataList.isNotEmpty()) { + animateText(dataList[currentIndex]) + startSwitchAnimation() + } + } + + private fun startSwitchAnimation() { + animator = ObjectAnimator.ofFloat(this, "alpha", 1f, 0f) + animator?.duration = 500 + animator?.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) + if (dataList.size != 0) { + currentIndex = (currentIndex + 1) % dataList.size + text = dataList[currentIndex] + animateText(dataList[currentIndex]) + animate().alpha(1f).start() + startSwitchAnimation() + } + } + }) + animator?.startDelay = 4500 + animator?.start() + } + + private fun animateText(text: String) { + animate().cancel() + alpha = 0f + this.text = text + animate().alpha(1f).setDuration(500).start() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + animator?.cancel() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/ui/UnFavoriteDialog.kt b/app/src/main/java/com/jia/er/nebuluxe/app/ui/UnFavoriteDialog.kt new file mode 100644 index 0000000..9ad5d8a --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/ui/UnFavoriteDialog.kt @@ -0,0 +1,31 @@ +package com.jia.er.nebuluxe.app.ui + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.Gravity +import android.view.Window +import android.view.WindowManager +import com.jia.er.nebuluxe.app.R + +class UnFavoriteDialog(context: Context) : Dialog(context) { + + init { + init() + } + + private fun init() { + requestWindowFeature(Window.FEATURE_NO_TITLE) + setContentView(R.layout.dialog_un_collection) + + window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window?.setLayout( + WindowManager.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.WRAP_CONTENT + ) + window?.setGravity(Gravity.CENTER) + setCancelable(true) + } + +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt new file mode 100644 index 0000000..db86578 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt @@ -0,0 +1,35 @@ +package com.jia.er.nebuluxe.app.utils + +import android.content.Context +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.ui.UnFavoriteDialog +import com.jia.er.nebuluxe.app.utils.singleClick + + +object DialogUtils { + + + fun unFavoriteDialog( + context: Context, + short_play_id: Int, + video_id: Int, + genresViewModel: MainViewModel + ) { + val exampleUnFavoriteDialog = UnFavoriteDialog(context) + val tvThinkAgain = + exampleUnFavoriteDialog.findViewById(R.id.example_tv_think_again) + val iv_close_notification = + exampleUnFavoriteDialog.findViewById(R.id.iv_close_notification) + iv_close_notification.setOnClickListener { exampleUnFavoriteDialog.dismiss() } + tvThinkAgain.setOnClickListener { + singleClick { + genresViewModel.doCancelCollect(short_play_id, video_id) + } + exampleUnFavoriteDialog.dismiss() + } + exampleUnFavoriteDialog.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/Memory.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Memory.kt new file mode 100644 index 0000000..d647cc9 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Memory.kt @@ -0,0 +1,104 @@ +package com.jia.er.nebuluxe.app.utils + +import com.jia.er.nebuluxe.app.data.PayReq +import com.jia.er.nebuluxe.app.data.UserInfoRes +import com.google.gson.Gson +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.basics.Constants.CONSTANTS_SEARCH_STRINGExample +import com.tencent.mmkv.MMKV + + +object Memory { + + private var mmkv: MMKV? = null + + + fun getMMKV(): MMKV { + if (mmkv == null) { + mmkv = MMKV.mmkvWithID("nebuluxe") + } + return mmkv!! + } + + fun saveUserInfo(infoRes: UserInfoRes?) { + val toJson = Gson().toJson(infoRes) + getMMKV() + .putString(Constants.CONSTANTS_User_STRING, toJson) + } + + fun getUserInfo(): UserInfoRes? { + val string = getMMKV().getString(Constants.CONSTANTS_User_STRING, "{}") + if ("{}" == string) { + return UserInfoRes.createWithDefaults() + } + return Gson().fromJson(string, UserInfoRes::class.java) + } + + fun saveSearchString(search: String) { + val strings = getSearch() + if (!strings.contains(search)) { + strings.add(0, search) + } + val toJson = Gson().toJson(strings) + getMMKV().putString(CONSTANTS_SEARCH_STRINGExample, toJson) + } + + fun getSearch(): MutableList { + val string = getMMKV().getString(CONSTANTS_SEARCH_STRINGExample, "[]") + return Gson().fromJson(string, Array::class.java).toMutableList() + } + + fun isTourist(): Boolean { + return getUserInfo()?.is_tourist == true + } + + fun getCustomId(): String { + return getUserInfo()?.customer_id.toString() + } + + fun getAllCoin(): Int { + if (getUserInfo() == null) { + return 0 + } + return getUserInfo()?.coin_left_total!! + getUserInfo()?.send_coin_left_total!! + } + + fun isVip(): Boolean { + return getUserInfo()?.is_vip == true + } + + fun saveOrder(payReq: PayReq) { + val list = getOrder() + if (!list.contains(payReq)) { + list.add(payReq) + } + val toJson = Gson().toJson(list) + getMMKV().putString(Constants.CONSTANTS_examplePayReq, toJson) + } + + fun removeOrderString(order: String) { + val updatedList = getOrder().filterNot { it.order_code == order } + getMMKV().putString( + Constants.CONSTANTS_examplePayReq, + Gson().toJson(updatedList) + ) + } + + fun getOrder(): MutableList { + try { + val string = getMMKV().getString(Constants.CONSTANTS_examplePayReq, "[]") + if (null != string && "[]" != string) { + return Gson().fromJson(string, Array::class.java).toMutableList() + } + } catch (e: Exception) { + e.printStackTrace() + getMMKV().putString( + Constants.CONSTANTS_examplePayReq, + "[]" + ) + } + return mutableListOf() + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/PackageUtils.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/PackageUtils.kt new file mode 100644 index 0000000..612bd4e --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/PackageUtils.kt @@ -0,0 +1,40 @@ +package com.jia.er.nebuluxe.app.utils + +import android.content.Context +import android.content.pm.PackageManager +import com.jia.er.nebuluxe.app.basics.MyApplication + +object PackageUtils { + + fun getPackageName(): String { + var packageName = "" + try { + packageName = MyApplication.context.packageName + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + return packageName + } + + fun getPackageVersion(context: Context): String { + var packageVersion = "" + try { + val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) + packageVersion = packageInfo.versionName.toString() + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + return packageVersion + } + + fun getPackageVersionCode(context: Context): Int { + var versionCode = 0 + try { + val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) + versionCode = packageInfo.versionCode + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + return versionCode + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt new file mode 100644 index 0000000..217561c --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt @@ -0,0 +1,183 @@ +package com.jia.er.nebuluxe.app.utils + + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.graphics.LinearGradient +import android.graphics.Shader +import android.graphics.Typeface +import android.os.Handler +import android.os.Looper +import android.text.Spannable +import android.text.SpannableStringBuilder +import android.text.style.ForegroundColorSpan +import android.text.style.StyleSpan +import android.widget.TextView +import android.widget.Toast +import androidx.appcompat.widget.AppCompatTextView +import com.google.android.gms.ads.identifier.AdvertisingIdClient +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.basics.Constants.ONE_DAY_IN_MILLIS +import com.jia.er.nebuluxe.app.basics.MyApplication +import com.jia.er.nebuluxe.app.net.MainViewModel +import java.text.SimpleDateFormat +import java.util.Date +import kotlin.math.tan + +private val handler = Handler(Looper.getMainLooper()) +fun toast(text: String) { + handler.post { + Toast.makeText(MyApplication.context, text, Toast.LENGTH_SHORT).show() + } +} + + +fun formatNumber(num: Int): String { + return when { + num >= 1000000 -> "${(num / 1000000.0).format(1)}M" + num >= 1000 -> "${(num / 1000.0).format(1)}K" + else -> num.toString() + } +} + +fun formatNumberByLong(num: Long): String { + return when { + num >= 1000000 -> "${(num / 1000000.0).format(1)}M" + num >= 1000 -> "${(num / 1000.0).format(1)}K" + else -> num.toString() + } +} + +private fun Double.format(digits: Int) = "%.${digits}f".format(this) + + +var lastClickTime = 0L +fun singleClick(during: Long = 500L, callBack: () -> Unit) { + val now = Date().time + if (now - lastClickTime > during) { + callBack() + } + lastClickTime = now +} + +@SuppressLint("SimpleDateFormat") +fun transToString(time: Long): String { + val date = Date(time * 1000) + return SimpleDateFormat("yyyy-MM-dd").format(date) +} + +fun getUserAgent(): String { + return System.getProperty("http.agent") ?: "" +} + +fun formatTimestamp(timestampInSeconds: Long): String { + val minutes = timestampInSeconds / 60 + val seconds = timestampInSeconds % 60 + return String.format("%02d:%02d", minutes, seconds) +} + + +fun SpannableStringBuilder.appendWithStyle( + text: String, + color: Int = Color.BLACK, + isBold: Boolean = false +): SpannableStringBuilder { + val start = this.length + append(text) + val end = this.length + setSpan(ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) + setSpan( + StyleSpan(if (isBold) Typeface.BOLD else Typeface.NORMAL), + start, + end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + return this +} + +fun shouldShowNotification(): Boolean { + val lastPopupTime = + Memory.getMMKV().getLong(Constants.CONSTANTS_PREF_LAST_POPUP_TIME_Notification, 0) + val currentTime = System.currentTimeMillis() + + return currentTime - lastPopupTime > ONE_DAY_IN_MILLIS +} + +fun getAdvertisingIdInfo(context: Context): String { + try { + return AdvertisingIdClient.getAdvertisingIdInfo(context).id.toString() + } catch (e: Exception) { + e.printStackTrace() + } + return "" +} + +fun AppCompatTextView.applyTextSkew(angle: Float) { + val skewX = tan(Math.toRadians(angle.toDouble())).toFloat() + paint.textSkewX = skewX + post { + val extraWidth = (height * skewX).toInt() + layoutParams.width = measuredWidth + extraWidth + paddingEnd + requestLayout() + } +} + +fun dpToPx(dp: Int, context: Context): Int { + return (dp * context.resources.displayMetrics.density).toInt() +} +fun dpToPxByFloat(dp: Int, context: Context): Float { + return (dp * context.resources.displayMetrics.density) +} + +fun upError( + event_name: String, + viewModel: MainViewModel, + error_msg: String, + event_key: String, + type: String? = "", + pay_data: String? = "", + short_play_id: Int, + short_play_video_id: Int +) { + val map = HashMap() + map.put("error_msg", error_msg) + map.put("userId", Memory.getCustomId()) + map.put("event_name", event_name) + map.put("event_key", event_key) + if (pay_data?.isNotEmpty() == true) { + map.put("pay_data", pay_data) + } + if (type?.isNotEmpty() == true) { + map.put("type", type) + } + map.put("short_play_id", short_play_id) + map.put("short_play_video_id", short_play_video_id) + viewModel.upError(map) +} + +fun setLeftRightGradient(textView: TextView, colors: IntArray) { + textView.paint.shader = LinearGradient( + 0f, 0f, + textView.textSize * textView.text.length, 0f, + colors, + null, + Shader.TileMode.CLAMP + ) + textView.invalidate() +} + +fun setUpDownGradient(textView: TextView, colors: IntArray) { + textView.paint.shader = LinearGradient( + 0f, 0f, + 0f, textView.textSize, + colors, + null, + Shader.TileMode.CLAMP + ) + textView.invalidate() +} + + + + diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/NewRecommendBannerAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/NewRecommendBannerAdapter.kt new file mode 100644 index 0000000..deb9172 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/NewRecommendBannerAdapter.kt @@ -0,0 +1,158 @@ +package com.jia.er.nebuluxe.app.video + +import android.annotation.SuppressLint +import android.content.Context +import android.net.Uri +import android.os.Handler +import android.os.Looper +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatImageView +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.exoplayer.DefaultRenderersFactory +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.LoadControl +import androidx.media3.ui.PlayerView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.DetailsRecommendRes +import com.youth.banner.adapter.BannerAdapter + + +@SuppressLint("UnsafeOptInUsageError") +class NewRecommendBannerAdapter(items: List?, context: Context) : + BannerAdapter(items) { + var currentPlayingPosition = -1 + private var context: Context? = null + val playerMap = mutableMapOf() + val imageMap = mutableMapOf() + + init { + this.context = context + } + + override fun onCreateHolder(parent: ViewGroup, viewType: Int): BannerViewHolder { + val view: View = LayoutInflater.from(parent.context) + .inflate(R.layout.new_detail_player_banner_view, parent, false) + view.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + return BannerViewHolder(view) + } + + + override fun onBindView( + holder: BannerViewHolder?, + data: DetailsRecommendRes.Item?, + position: Int, + size: Int + ) { + val playerView = holder?.view?.findViewById(R.id.player_view) + val imageView = holder?.view?.findViewById(R.id.iv_cover) + if (null != imageView) { + Glide.with(context!!) + .load(data?.image_url) + .placeholder(R.drawable.iv_placeholder_v) + .into(imageView) + } + imageView?.visibility = View.VISIBLE + imageView?.let { imageMap[position] = it } + var exoPlayer = playerMap[position] + if (exoPlayer == null) { + val mediaItem = MediaItem.fromUri(Uri.parse(data?.video_url)) + exoPlayer = ExoPlayer.Builder(context!!) + .setRenderersFactory( + DefaultRenderersFactory(context!!).setEnableDecoderFallback( + true + ) + ) + .setLoadControl(getLoadControl()) + .build().apply { + setMediaItem(mediaItem) + prepare() + } + playerMap[position] = exoPlayer + } + playerView?.player = exoPlayer + exoPlayer.let { player -> + + player.addListener(object : Player.Listener { + override fun onPlaybackStateChanged(playbackState: Int) { + super.onPlaybackStateChanged(playbackState) + when (playbackState) { + Player.STATE_READY -> { + if (position == currentPlayingPosition) { + player.play() + imageView?.visibility = View.INVISIBLE + } else { + player.playWhenReady = false + player.pause() + } + } + + Player.STATE_ENDED -> { + player.seekTo(0) + player.play() + } + } + } + + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + Handler(Looper.getMainLooper()).post { + imageView?.visibility = View.VISIBLE + } + } + }) + + } + } + + private fun getLoadControl(): LoadControl { + return androidx.media3.exoplayer.DefaultLoadControl.Builder() + .setBufferDurationsMs( + 2500, 15000, 1500, 2000 + ) + .setTargetBufferBytes(50 * 1024 * 1024) + .setPrioritizeTimeOverSizeThresholds(false) + .build() + } + + + inner class BannerViewHolder(var view: View) : RecyclerView.ViewHolder( + view + ) + + + fun resumeCurrentPlayer() { + playerMap[currentPlayingPosition]?.let { player -> + if (player.playbackState != Player.STATE_ENDED) { + player.play() + imageMap[currentPlayingPosition]?.visibility = View.INVISIBLE + } + } + } + + fun pauseAllPlayers() { + playerMap.values.forEach { player -> + if (player.isPlaying) { + player.pause() + } + } + imageMap[currentPlayingPosition]?.visibility = View.VISIBLE + } + + fun releaseAllPlayers() { + playerMap.values.forEach { player -> + player.stop() + player.release() + } + playerMap.clear() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt new file mode 100644 index 0000000..69b461c --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt @@ -0,0 +1,820 @@ +package com.jia.er.nebuluxe.app.video + +import android.annotation.SuppressLint +import android.graphics.Color +import android.net.Uri +import android.os.Bundle +import android.text.SpannableStringBuilder +import android.view.View +import android.view.WindowManager +import android.widget.FrameLayout +import android.widget.SeekBar +import androidx.activity.OnBackPressedCallback +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatSeekBar +import androidx.appcompat.widget.AppCompatTextView +import androidx.fragment.app.DialogFragment +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.datasource.DataSource +import androidx.media3.datasource.DefaultDataSourceFactory +import androidx.media3.exoplayer.DefaultRenderersFactory +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.hls.HlsMediaSource +import androidx.media3.exoplayer.source.MediaSource +import androidx.media3.exoplayer.source.ProgressiveMediaSource +import androidx.media3.ui.PlayerView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.PagerSnapHelper +import com.blankj.utilcode.util.ViewUtils +import com.bumptech.glide.Glide +import com.google.gson.Gson +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.data.DetailsRecommendRes +import com.jia.er.nebuluxe.app.data.MainDataHis +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes +import com.jia.er.nebuluxe.app.data.UploadHistoryReq +import com.jia.er.nebuluxe.app.databinding.ActivityPlayDetailBinding +import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.ui.FfmpegRenderersFactory +import com.jia.er.nebuluxe.app.ui.LoadingLine +import com.jia.er.nebuluxe.app.ui.OnSnapHelperCurrentListener +import com.jia.er.nebuluxe.app.ui.RecyclerViewScrollerDetection +import com.jia.er.nebuluxe.app.utils.DialogUtils +import com.jia.er.nebuluxe.app.utils.Memory +import com.jia.er.nebuluxe.app.utils.appendWithStyle +import com.jia.er.nebuluxe.app.utils.formatTimestamp +import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast +import com.youth.banner.listener.OnPageChangeListener +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +@SuppressLint("UnsafeOptInUsageError") +class PlayerDetailActivity : BaseActivity(), + OnSnapHelperCurrentListener, SeriesDialogFragment.SeriesCallBack { + private var builder: ExoPlayer.Builder? = null + private var player: ExoPlayer? = null + private val pagerSnapHelper = PagerSnapHelper() + private val recyclerViewScrollerDetection = RecyclerViewScrollerDetection() + private var playerDetailAdapter: PlayerDetailAdapter? = null + private var playerView: PlayerView? = null + private var currentView: View? = null + private var loadingLine: LoadingLine? = null + private var tvName: AppCompatTextView? = null + private var tvTime: AppCompatTextView? = null + private var tvEpTotal: AppCompatTextView? = null + private var tvCollectionNum: AppCompatTextView? = null + private var play: AppCompatImageView? = null + private var collection: AppCompatImageView? = null + private var ivIconPlayer: AppCompatImageView? = null + private var ivCover: AppCompatImageView? = null + private var ivBackController: AppCompatImageView? = null + private var exampleSeekbarPlayerController: AppCompatSeekBar? = null + private var exampleProgressJob: Job? = null + private var isDragging = false + private var isPlaying = false + private var shortVideoId: Int = 0 + private var dataRes: PlayerDetailDataRes.Episode? = null + private var currentPosition = 0 + private val mViewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] } + private var activityId: Int = 0 + private var progress: Long = 0L + private var seek = true + private var needRestart: Boolean = false + private var startTime: Long = 0 + private var recommendBannerAdapter: NewRecommendBannerAdapter? = null + private var revolution = "" + private var needRefresh: Boolean = false + private var payPosition = 0 + private var isCanPlay = false +// private var isLock = false + private var exampleSeriesDialogFragment: SeriesDialogFragment? = null + + @SuppressLint("UnsafeOptInUsageError") + override fun top() { + EventBus.getDefault().register(this) + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + showLoading() + startTime = System.currentTimeMillis() + shortVideoId = intent.getIntExtra(Constants.CONSTANTS_short_play_id, 0) + activityId = intent.getIntExtra(Constants.CONSTANTS_activity_id, 0) + builder = ExoPlayer.Builder(this, FfmpegRenderersFactory(this)) + .setRenderersFactory( + DefaultRenderersFactory(this).setEnableDecoderFallback( + true + ) + ) + player = builder?.build() + playerView = ViewUtils.layoutId2View(R.layout.include_detail_player_view) as PlayerView + playerView?.player = player + loadingLine = playerView?.findViewById(R.id.load_line) + tvName = playerView?.findViewById(R.id.example_tv_title_player_controller) + tvTime = playerView?.findViewById(R.id.tv_player_seek_time) + tvEpTotal = playerView?.findViewById(R.id.tv_ep_total) + tvCollectionNum = playerView?.findViewById(R.id.example_tv_collection_num_controller) + collection = playerView?.findViewById(R.id.example_iv_collection_controller) + play = playerView?.findViewById(R.id.example_iv_play_player_controller) + ivIconPlayer = playerView?.findViewById(R.id.iv_icon_player) + ivBackController = playerView?.findViewById(R.id.iv_back_controller) + exampleSeekbarPlayerController = + playerView?.findViewById(R.id.example_seekBar_player_controller) + play?.setOnClickListener { + singleClick { + if (isPlaying) { + pause() + } else { + play() + } + } + } + ivBackController?.setOnClickListener { + singleClick { + handleCustomLogic() + } + } + player?.addListener(object : Player.Listener { + override fun onPlaybackStateChanged(playbackState: Int) { + super.onPlaybackStateChanged(playbackState) + when (playbackState) { + Player.STATE_BUFFERING -> { + loadingLine?.visibility = View.VISIBLE + loadingLine?.startAnimation() + ivIconPlayer?.visibility = View.VISIBLE + } + + Player.STATE_READY -> { +// if (!isLock) { + if (isCanPlay) { + if (seek && progress > 0) { + player?.seekTo(progress) + seek = false + } + canPlay() + } +// } else { +// loadingLine?.endAnimation() +// loadingLine?.visibility = View.INVISIBLE +// ivCover = currentView?.findViewById(R.id.iv_icon) +// ivCover?.visibility = View.INVISIBLE +// ivIconPlayer?.visibility = View.INVISIBLE +// pause() +// } + } + + Player.STATE_ENDED -> { + needRestart = true + uploadSeconds() + val plus = currentPosition.plus(1) + recyclerViewScrollerDetection.isFirstAttached = false + binding.rvDetail.scrollToPosition(plus) + } + + Player.STATE_IDLE -> { + } + } + } + + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + ivIconPlayer?.visibility = View.VISIBLE + toast(getString(R.string.network_error)) + } + }) + collection?.setOnClickListener { + singleClick { + doCollect() + } + } + tvEpTotal?.setOnClickListener { + singleClick { + exampleSeriesDialogFragment = SeriesDialogFragment() + val bundle = Bundle() + dataRes?.episode?.let { it1 -> + bundle.putInt( + Constants.Constants_Episodes_Series_Data_currentPositionExample, + it1 + ) + } + bundle.putParcelable( + Constants.Constants_Episodes_Series_DataExample, + dataRes?.shortPlayInfo + ) + bundle.putParcelableArrayList( + Constants.Constants_Episodes_Series_Data_ListExample, + playerDetailAdapter?.items?.let { it1 -> ArrayList(it1) } + ) + exampleSeriesDialogFragment?.seriesCallBack = this + exampleSeriesDialogFragment?.arguments = bundle + exampleSeriesDialogFragment?.show( + supportFragmentManager, + "SeriesDialogFragment" + ) + } + } + mViewModel.getVideoDetails( + shortVideoId, + 0, + activityId, + revolution, + null + ) + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (handleCustomLogic()) { + return + } + } + }) +// binding.tvLockEpisode.setOnClickListener { +// singleClick { +// if (currentPosition > 0) { +// val beforeItem = +// playerDetailAdapter?.getItem(currentPosition - 1) as PlayerDetailDataRes.Episode +// if (beforeItem.is_lock && !Memory.isVip()) { +// toast(getString(R.string.prequel_before)) +// return@singleClick +// } +// } +// val allCoin = Memory.getAllCoin() +// val coins = dataRes?.coins!! +// if (allCoin >= coins) { +// showLoading() +// dataRes?.short_play_id?.let { it1 -> +// dataRes?.short_play_video_id?.let { it2 -> +// mViewModel.doBuyVideo( +// it1, +// it2 +// ) +// } +// } +// } else { +// rechargeDialog(dataRes) +// } +// } +// } + binding?.viewVideoRecommend?.ivCloseRecommend?.setOnClickListener { finish() } + binding?.viewVideoRecommend?.tvWatchNowRecommend?.setOnClickListener { + singleClick { + val data = recommendBannerAdapter?.getData(recommendBannerPosition) + watchNow(data) + } + } + } + + private fun doCollect() { + if (dataRes?.shortPlayInfo?.is_collect == true) { + dataRes?.short_play_id?.let { it1 -> + dataRes?.short_play_video_id?.let { it2 -> + DialogUtils.unFavoriteDialog( + this, + it1, + it2, + mViewModel + ) + } + } + } else { + dataRes?.short_play_id?.let { + dataRes?.short_play_video_id.let { it1 -> + if (it1 != null) { + mViewModel.doCollect( + it, it1 + ) + } + } + } + } + } + + private fun canPlay() { + loadingLine?.endAnimation() + loadingLine?.visibility = View.INVISIBLE + ivCover = currentView?.findViewById(R.id.iv_icon) + play() + setProgress() + ivCover?.visibility = View.INVISIBLE + ivIconPlayer?.visibility = View.INVISIBLE + } +// private var storeDialogFragment: StoreDialogFragment? = null +// private fun rechargeDialog(dataRes: PlayerDetailDataRes.Episode?) { +// try { +// storeDialogFragment = +// StoreDialogFragment() +// val bundle = Bundle() +// bundle.putParcelable(Constants.CONSTANTS_Episode, dataRes) +// storeDialogFragment?.setStyle(DialogFragment.STYLE_NO_FRAME, 0) +// storeDialogFragment?.arguments = bundle +// storeDialogFragment?.show( +// supportFragmentManager, +// "StoreDialogFragment" +// ) +// } catch (e: Exception) { +// e.printStackTrace() +// } +// } + + private fun watchNow( + data: DetailsRecommendRes.Item? + ) { + binding?.viewVideoRecommend?.exampleBannerRecommend?.postDelayed({ + if (data?.short_play_id != null) { + shortVideoId = data.short_play_id + recommendBannerAdapter?.releaseAllPlayers() + detailRefresh() + } + }, 300) + binding?.viewVideoRecommend?.root?.visibility = View.INVISIBLE + } + + private fun handleCustomLogic(): Boolean { + if (binding?.viewVideoRecommend?.root?.visibility == View.INVISIBLE) { + val currentTime = System.currentTimeMillis() + val duration = currentTime - startTime + if (duration > 3000) { + mViewModel.getDetailsRecommand() + binding.root.postDelayed({ + pause() + player?.stop() + }, 500) + } else { + finish() + } + } + return false + } + + private var recommendBannerPosition = 0 + + override fun center() { + mViewModel.getDetailsRecommandData.observe(this) { + if (it != null) { + if (it.data?.list?.isNotEmpty() == true) { + binding.viewVideoRecommend.root.visibility = View.VISIBLE + binding.viewVideoRecommend.bottom.setOnClickListener { } + recommendBannerAdapter = + NewRecommendBannerAdapter(it.data.list, this) + binding?.viewVideoRecommend?.exampleBannerRecommend?.setBannerGalleryEffect( + 52, + 12 + ) + binding?.viewVideoRecommend?.exampleBannerRecommend?.setAdapter( + recommendBannerAdapter + ) + val i = it.data.list.size / 2 + binding?.viewVideoRecommend?.exampleBannerRecommend?.setCurrentItem( + i, + false + ) + recommendBannerAdapter?.currentPlayingPosition = i + recommendBannerPosition = i + recommendBannerAdapter?.resumeCurrentPlayer() + binding?.viewVideoRecommend?.exampleBannerRecommend?.addOnPageChangeListener( + object : + OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + } + + @SuppressLint("UnsafeOptInUsageError") + override fun onPageSelected(position: Int) { + recommendBannerPosition = position + recommendBannerAdapter?.pauseAllPlayers() + recommendBannerAdapter?.currentPlayingPosition = position + recommendBannerAdapter?.playerMap?.get(position)?.let { newPlayer -> + recommendBannerAdapter?.resumeCurrentPlayer() + } + } + + override fun onPageScrollStateChanged(state: Int) { + } + }) + } else { + finish() + } + } else { + finish() + } + } + mViewModel.infoData.observe(this) { + if (it != null) { + it.data?.let { it1 -> + Memory.saveUserInfo(it1) + if (needRefresh) { + detailRefresh() + } + } + } + } +// mViewModel.buy_videoData.observe(this) { +// if (it != null) { +// when (it.data?.status) { +// "not_enough" -> { +// rechargeDialog(dataRes) +// hideLoading() +// } +// +// "success" -> { +// needRefresh = false +// mViewModel.getInfo() +// toast(getString(R.string.success)) +// val get = playerDetailAdapter?.items?.get(currentPosition) +// get?.is_lock = false +// collection?.isEnabled = true +// tvEpTotal?.isEnabled = true +// play?.isEnabled = true +// binding.tvLockEpisode.postDelayed({ +// binding.tvLockEpisode.visibility = View.INVISIBLE +// binding.clLock.visibility = View.INVISIBLE +// canPlay() +// hideLoading() +// }, 1000) +// } +// +// else -> { +// hideLoading() +// toast(it.data?.status.toString()) +// } +// } +// } else { +// hideLoading() +// toast(getString(R.string.network_error)) +// } +// } + mViewModel.videoDetailsData.observe(this) { it -> + if (it != null) { + playerDetailAdapter = PlayerDetailAdapter() + val layoutManager = + LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) + binding?.rvDetail?.layoutManager = layoutManager + binding?.rvDetail?.adapter = playerDetailAdapter + binding?.rvDetail?.isNestedScrollingEnabled = false + pagerSnapHelper.attachToRecyclerView(binding?.rvDetail) + recyclerViewScrollerDetection.setCurrentListener(this) + recyclerViewScrollerDetection.attachToSnapHelper(pagerSnapHelper) + binding?.rvDetail?.let { it1 -> + recyclerViewScrollerDetection.addOnScrollListener( + it1 + ) + } + it.data?.episodeList?.forEach { it1 -> + it1.shortPlayInfo = it.data.shortPlayInfo + } + ivIconPlayer?.let { it1 -> + Glide.with(this).load(it.data?.shortPlayInfo?.image_url) + .into(it1) + } + playerDetailAdapter?.submitList(it.data?.episodeList) + if (needRefresh) { + recyclerViewScrollerDetection.isFirstAttached = false + binding.rvDetail.scrollToPosition(payPosition) + needRefresh = false + } else { + if (it.data?.video_info != null) { + if (it.data.video_info.episode > 1) { + it.data.video_info.episode.minus(1) + .let { it1 -> + recyclerViewScrollerDetection.isFirstAttached = false + binding.rvDetail.scrollToPosition(it1) + } + } + } + } + hideLoading() + } else { + showNoDrama() + toast(getString(R.string.network_error)) + hideLoading() + } + } + mViewModel.collectData.observe(this) { + if (it != null) { + collection?.setImageResource(R.drawable.iv_example_collection_h) + dataRes?.shortPlayInfo?.collect_total = + dataRes?.shortPlayInfo?.collect_total?.plus(1)!! + tvCollectionNum?.text = dataRes?.shortPlayInfo?.collect_total.toString() + dataRes?.shortPlayInfo?.is_collect = true + EventBus.getDefault().post(Constants.CONSTANTS_collect_refresh) + toast(getString(R.string.success)) + } else { + toast(getString(R.string.network_error)) + } + } + mViewModel.cancelCollectData.observe(this) { + if (it != null) { + collection?.setImageResource(R.drawable.iv_example_collection_n) + dataRes?.shortPlayInfo?.collect_total = + dataRes?.shortPlayInfo?.collect_total?.minus(1)!! + tvCollectionNum?.text = dataRes?.shortPlayInfo?.collect_total.toString() + dataRes?.shortPlayInfo?.is_collect = false + toast(getString(R.string.success)) + EventBus.getDefault().post(Constants.CONSTANTS_collect_refresh) + } else { + toast(getString(R.string.network_error)) + } + } + } + + + @SuppressLint("UnsafeOptInUsageError") + private fun buildMediaSource(videoPath: String): MediaSource { + val dataSourceFactory: DataSource.Factory = + DefaultDataSourceFactory(this, "reelcrush") + + return if (videoPath.endsWith(".m3u8")) { + HlsMediaSource.Factory(dataSourceFactory) + .createMediaSource(MediaItem.fromUri(Uri.parse(videoPath))) + } else { + ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(MediaItem.fromUri(Uri.parse(videoPath))) + } + } + + override fun onPause() { + super.onPause() + isCanPlay = false + binding.root.postDelayed({ player?.pause() }, 300) + recommendBannerAdapter?.pauseAllPlayers() + } + + override fun onResume() { + super.onResume() +// if (!isLock && player?.isPlaying == false) { + isCanPlay = true + binding.root.postDelayed({ canPlay() }, 300) +// } + recommendBannerAdapter?.resumeCurrentPlayer() + } + + private fun setProgress() { + exampleProgressJob?.cancel() + val duration = player!!.duration + exampleSeekbarPlayerController?.max = duration.toInt() + exampleSeekbarPlayerController?.progress = player!!.currentPosition.toInt() + exampleSeekbarPlayerController?.setOnSeekBarChangeListener(null) + exampleProgressJob = lifecycleScope.launch { + while (isActive) { + if (!isDragging) { + withContext(Dispatchers.Main) { + exampleSeekbarPlayerController?.progress = player!!.currentPosition.toInt() + } + } + delay(1000) + } + } + + exampleSeekbarPlayerController?.setOnSeekBarChangeListener(object : + SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if (fromUser) { + seekTo(progress) + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + tvTime?.visibility = FrameLayout.VISIBLE + isDragging = true + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + isDragging = false + tvTime?.visibility = FrameLayout.INVISIBLE + } + }) + } + + fun play() { + player?.play() + play?.setImageResource(R.drawable.iv_example_stop) + isPlaying = true + isDragging = false + } + + fun pause() { + player?.pause() + play?.setImageResource(R.drawable.iv_example_play) + isPlaying = false + isDragging = true + } + + private fun seekTo(progress: Int) { + player?.seekTo(progress.toLong()) + seekTime() + } + + private fun seekTime() { + val currentPosition = player!!.currentPosition + val currentTime = formatTimestamp(currentPosition / 1000) + val totalDuration = player!!.duration + val totalTime = formatTimestamp(totalDuration / 1000) + tvTime?.text = "$currentTime/$totalTime" + } + + override fun getViewBinding(): ActivityPlayDetailBinding { + return ActivityPlayDetailBinding.inflate(layoutInflater) + } + + override fun onDestroy() { + isCanPlay = false + player?.stop() + player?.release() +// storeDialogFragment?.storeCallBack = null + exampleSeriesDialogFragment?.seriesCallBack = null + recommendBannerAdapter?.releaseAllPlayers() + super.onDestroy() + recyclerViewScrollerDetection.detachToSnapHelper() + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + EventBus.getDefault().unregister(this) + System.gc() + } + + @SuppressLint("UnsafeOptInUsageError") + override fun setActive( + currentView: View?, + position: Int, + previousView: View?, + previousPosition: Int + ) { + seek = true + isCanPlay = true + this.currentView = currentView + currentPosition = position + val frameLayout = currentView?.findViewById(R.id.video) + (playerView?.parent as FrameLayout?)?.removeView(playerView) + frameLayout?.removeAllViews() + frameLayout?.addView(playerView) + playerView?.showController() + dataRes = playerDetailAdapter?.getItem(position) + progress = if (dataRes?.play_seconds?.isNotEmpty() == true) { + dataRes?.play_seconds!!.toLong() + } else { + 0 + } +// isLock = (dataRes?.is_lock == true && !Memory.isVip()) +// collection?.isEnabled = !isLock +// tvEpTotal?.isEnabled = !isLock +// play?.isEnabled = !isLock +// binding.tvLockEpisode.visibility = if (isLock) View.VISIBLE else View.INVISIBLE +// binding.clLock.visibility = if (isLock) View.VISIBLE else View.INVISIBLE +// if (currentPosition > 0) { +// playerDetailAdapter?.items?.get(currentPosition - 1) +// ?.let { it2 -> +// if (!it2.is_lock) { +// binding.tvLockEpisode.text = +// "Unlocking costs ".plus(dataRes?.coins).plus(" coins") +// } else { +// binding.tvLockEpisode.text = "Prev. locked" +// } +// } +// } else { +// binding.tvLockEpisode.text = "Unlocking costs ".plus(dataRes?.coins).plus(" coins") +// } + dataRes?.video_url?.let { buildMediaSource(it) }?.let { player?.setMediaSource(it) } + player?.prepare() + tvName?.text = dataRes?.shortPlayInfo?.name + tvCollectionNum?.text = dataRes?.shortPlayInfo?.collect_total.toString() + val builder = SpannableStringBuilder() + builder.appendWithStyle( + "Ep.".plus(dataRes?.episode), + Color.parseColor("#FFDAA4"), + isBold = true + ) + .appendWithStyle( + "/Ep.".plus(dataRes?.shortPlayInfo?.episode_total), + Color.parseColor("#FFFFFF"), + isBold = false + ) + tvEpTotal?.text = builder + if (dataRes?.is_lock == false || Memory.isVip()) { + dataRes?.short_play_video_id?.let { + mViewModel.doCreateHistory( + shortVideoId, + it + ) + } + } + collection?.setImageResource(if (dataRes?.shortPlayInfo?.is_collect == true) R.drawable.iv_example_collection_h else R.drawable.iv_example_collection_n) + } + + + override fun disActive(detachedView: View?, detachedPosition: Int) { + if (null == detachedView) return + ivCover = detachedView.findViewById(R.id.iv_icon) + ivCover?.visibility = View.VISIBLE + if (player?.isPlaying == true) { + pause() + } + exampleSeekbarPlayerController?.progress = 0 + uploadSeconds() + } + + private fun uploadSeconds() { + if (dataRes?.is_lock == false) { + playerDetailAdapter?.getItem(currentPosition)?.play_seconds = + if (needRestart) "0" else lastProgress() + .toString() + mViewModel.uploadHistorySeconds( + UploadHistoryReq( + if (needRestart) 0 else lastProgress(), + shortVideoId, + dataRes?.short_play_video_id + ) + ) + needRestart = false + } + } + + override fun chooseSeries(episode: PlayerDetailDataRes.Episode) { +// isLock = episode.is_lock + uploadSeconds() + val index = playerDetailAdapter?.items?.withIndex()?.firstOrNull { + (episode.episode == it.value.episode) && (episode.shortPlayInfo?.name == it.value.shortPlayInfo?.name + ) + }?.index + recyclerViewScrollerDetection.isFirstAttached = false + index?.let { binding.rvDetail.scrollToPosition(it) } + } + + override fun collection() { + doCollect() + } + + override fun onStop() { + super.onStop() + if (dataRes?.is_lock == false || Memory.isVip()) { + dataRes?.short_play_id?.let { + UploadHistoryReq( + lastProgress(), + it, + dataRes?.short_play_video_id + ) + }?.let { + mViewModel.uploadHistorySeconds( + it + ) + } + } + if (dataRes?.shortPlayInfo?.image_url?.isNotEmpty() == true) { + val toJson = Gson().toJson( + dataRes?.short_play_id?.let { + MainDataHis( + dataRes?.shortPlayInfo?.episode_total.toString(), + it, + dataRes?.episode.toString(), + dataRes?.shortPlayInfo?.image_url.toString() + ) + } + ) + Memory.getMMKV() + .putString(Constants.Constants_Main_Video_info, toJson) + Memory.getMMKV() + .putBoolean(Constants.Constants_Main_Video_status, true) + } + } + + private fun lastProgress(): Long { + return player?.currentPosition ?: 0 + } + + private fun detailRefresh() { + recyclerViewScrollerDetection.isFirstAttached = false + player?.pause() + player?.stop() + mViewModel.getVideoDetails( + shortVideoId, + 0, + activityId, + revolution, + null + ) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onEvent(event: String) { + if (Constants.CONSTANTS_pay_refresh == event) { + payPosition = dataRes?.episode?.minus(1)!! + needRefresh = true + mViewModel.getInfo() + } + } + + override fun onReturn() { + super.onReturn() + finish() + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailAdapter.kt new file mode 100644 index 0000000..dffdf2d --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailAdapter.kt @@ -0,0 +1,29 @@ +package com.jia.er.nebuluxe.app.video + +import android.content.Context +import android.view.ViewGroup +import com.bumptech.glide.Glide +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes + +class PlayerDetailAdapter : + BaseQuickAdapter() { + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: PlayerDetailDataRes.Episode? + ) { + Glide.with(context).load(item?.shortPlayInfo?.image_url).placeholder(R.drawable.iv_placeholder_v) + .into(holder.getView(R.id.iv_icon)) + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_home_for_you, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDataAdapter.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDataAdapter.kt new file mode 100644 index 0000000..cd452c6 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDataAdapter.kt @@ -0,0 +1,48 @@ +package com.jia.er.nebuluxe.app.video + +import android.content.Context +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatTextView +import com.chad.library.adapter4.BaseQuickAdapter +import com.chad.library.adapter4.viewholder.QuickViewHolder +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes + +class SeriesDataAdapter : + BaseQuickAdapter() { + var currentPosition = -1 + override fun onBindViewHolder( + holder: QuickViewHolder, + position: Int, + item: PlayerDetailDataRes.Episode? + ) { + val view = holder.getView(R.id.example_tv_num_data) + view.text = item?.episode.toString() + if (currentPosition == view.text.toString().toInt()) { + holder.setBackgroundResource(R.id.example_tv_num_data, R.drawable.bg_example_num_h) + holder.setTextColor( + R.id.example_tv_num_data, + context.getColor(R.color.black) + ) + } else { + holder.setBackgroundResource(R.id.example_tv_num_data, R.drawable.bg_example_num_n) + holder.setTextColor( + R.id.example_tv_num_data, + context.getColor(R.color.white) + ) + } +// if (item?.is_lock == true && !Memory.isVip()) { +// holder.setVisible(R.id.iv_example_lock, true) +// } else { +// holder.setVisible(R.id.iv_example_lock, false) +// } + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ): QuickViewHolder { + return QuickViewHolder(R.layout.item_num_data, parent) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDialogFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDialogFragment.kt new file mode 100644 index 0000000..a30a109 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/SeriesDialogFragment.kt @@ -0,0 +1,105 @@ +package com.jia.er.nebuluxe.app.video + +import android.app.AlertDialog +import android.app.Dialog +import android.os.Bundle +import android.view.Gravity +import android.view.View +import android.view.WindowManager +import androidx.fragment.app.DialogFragment +import androidx.recyclerview.widget.GridLayoutManager +import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.basics.Constants.Constants_Episodes_Series_DataExample +import com.jia.er.nebuluxe.app.basics.Constants.Constants_Episodes_Series_Data_ListExample +import com.jia.er.nebuluxe.app.basics.Constants.Constants_Episodes_Series_Data_currentPositionExample +import com.jia.er.nebuluxe.app.data.PlayerDetailDataRes +import com.jia.er.nebuluxe.app.databinding.DialogSeriesBinding +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +class SeriesDialogFragment : DialogFragment() { + var seriesCallBack: SeriesCallBack? = null + var is_collect = false + var exampleDialogSeriesBinding: DialogSeriesBinding? = null + + interface SeriesCallBack { + fun chooseSeries(episode: PlayerDetailDataRes.Episode) + fun collection() + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + EventBus.getDefault().register(this) + val builder = AlertDialog.Builder(requireActivity()) + val inflater = requireActivity().layoutInflater + val view = inflater.inflate(R.layout.dialog_series, null) + exampleDialogSeriesBinding = DialogSeriesBinding.bind(view) + val episodeList: List? = + arguments?.getParcelableArrayList(Constants_Episodes_Series_Data_ListExample) + val data: PlayerDetailDataRes.ShortPlayInfo? = + arguments?.getParcelable(Constants_Episodes_Series_DataExample) + val currentPosition = + arguments?.getInt(Constants_Episodes_Series_Data_currentPositionExample, 0) + val exampleSeriesDataAdapter = SeriesDataAdapter() + val spanCount = 6 + val layoutManager = GridLayoutManager(context, spanCount) + exampleDialogSeriesBinding?.rvDataDialogSeries?.layoutManager = layoutManager + exampleDialogSeriesBinding?.rvDataDialogSeries?.adapter = exampleSeriesDataAdapter + exampleSeriesDataAdapter.submitList(episodeList) + if (currentPosition != null) { + exampleSeriesDataAdapter.currentPosition = currentPosition + } + exampleDialogSeriesBinding?.tvDesDialogSeries?.text = data?.description + if (data?.category?.isNotEmpty() == true) { + exampleDialogSeriesBinding?.tvTag?.visibility = View.VISIBLE + exampleDialogSeriesBinding?.tvTag?.text = data?.category?.get(0) + } else { + exampleDialogSeriesBinding?.tvTag?.visibility = View.GONE + } + is_collect = data?.is_collect == true + exampleDialogSeriesBinding?.ivCollect?.setImageResource(if (data?.is_collect == true) R.drawable.iv_example_collection_h else R.drawable.iv_example_collection_n) + exampleDialogSeriesBinding?.ivCollect?.setOnClickListener { + seriesCallBack?.collection() + } + exampleSeriesDataAdapter.setOnItemClickListener { adapter, view, position -> + val item = adapter.getItem(position) as PlayerDetailDataRes.Episode +// if (position > 0) { +// val beforeItem = adapter.getItem(position - 1) as PlayerDetailDataRes.Episode +// if (beforeItem.is_lock && !Memory.isVip()) { +// toast(getString(R.string.prequel_before)) +// dismiss() +// return@setOnItemClickListener +// } +// } + seriesCallBack?.chooseSeries(item) + dismiss() + } + isCancelable = true + exampleDialogSeriesBinding?.tvContentDialogSeries?.text = data?.name + builder.setView(exampleDialogSeriesBinding?.root) + val dialog = builder.create() + dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) + val window = dialog.window + window?.decorView?.setPadding(0, 0, 0, 0) + window?.setGravity(Gravity.BOTTOM) + val layoutParams = window?.attributes + layoutParams?.width = WindowManager.LayoutParams.MATCH_PARENT + layoutParams?.height = WindowManager.LayoutParams.WRAP_CONTENT + window?.attributes = layoutParams + return dialog + } + + override fun onStop() { + super.onStop() + EventBus.getDefault().unregister(this) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onEvent(event: String) { + if (Constants.CONSTANTS_collect_refresh == event) { + is_collect = !is_collect + exampleDialogSeriesBinding?.ivCollect?.setImageResource(if (is_collect == true) R.drawable.iv_example_collection_h else R.drawable.iv_example_collection_n) + } + } +} diff --git a/app/src/main/res/drawable-xxhdpi/bg_rank_1.png b/app/src/main/res/drawable-xxhdpi/bg_rank_1.png new file mode 100644 index 0000000000000000000000000000000000000000..91ff98fbd09c165cebbb305ecb102770bc06816a GIT binary patch literal 13150 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 Ef`X_54*&oF literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/bg_rank_2.png b/app/src/main/res/drawable-xxhdpi/bg_rank_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2dc0a63263d70a0e4d0df385827c4723cb92b2 GIT binary patch literal 9167 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%0A;#y; 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%0D0tV9Y3?9a$-c>*Q@NhOhRWB~jz5 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 vKmO$qN1r9M`Vg)=m|hKO#A?YMjO~>Prk! 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 R2gU#Z002ovPDHLkV1nI^>6icj literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_me_top.png b/app/src/main/res/drawable-xxhdpi/ic_me_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a036c4be9216606c9e57f2ab27c8c2c78af61cfb GIT binary patch literal 532814 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 z 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%0An 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