diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 0061e71ec6..a742cfb460 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -148,6 +148,7 @@ object DefaultUrlHandler { val gameId = uri.getQueryParameter("gameId") ?: "" val fieldId = uri.getQueryParameter("fieldId") ?: "" val sectionName = uri.getQueryParameter("sectionName") ?: "" + val paginationType = uri.getQueryParameter("paginationType") ?: "page"//活动分页方式 page filter val location = if (!TextUtils.isEmpty(act)) { VideoDetailContainerViewModel.Location.VIDEO_ACTIVITY.value } else if (!TextUtils.isEmpty(fieldId)) { @@ -155,7 +156,7 @@ object DefaultUrlHandler { } else { id } - directToVideoDetail(context, id, location, false, gameId, entrance, "", referer, type, act, fieldId, sectionName) + directToVideoDetail(context, id, location, false, gameId, entrance, "", referer, type, act, paginationType, fieldId, sectionName) } EntranceUtils.HOST_VIDEO_SINGLE -> { val referer = uri.getQueryParameter("referer") ?: "" diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index 3a0b4a24d1..f2a2b0094a 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -722,7 +722,7 @@ object DirectUtils { */ @JvmStatic fun directToVideoDetail(context: Context, videoId: String, fromLocation: String, showComment: Boolean = false, gameId: String = "", entrance: String? = null, - path: String? = "", referer: String = "", type: String = "", act: String = "", fieldId: String = "", sectionName: String = "") { + path: String? = "", referer: String = "", type: String = "", act: String = "", paginationType: String = "", fieldId: String = "", sectionName: String = "") { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { val bundle = Bundle() bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) @@ -735,6 +735,7 @@ object DirectUtils { bundle.putString(KEY_REFERER, referer) bundle.putString(KEY_TYPE, type) bundle.putString(KEY_ACTIVITY_NAME, act) + bundle.putString(KEY_PAGINATION_TYPE, paginationType) bundle.putString(KEY_FIELD_ID, fieldId) bundle.putString(KEY_SECTION_NAME, sectionName) jumpActivity(context, bundle) diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index e8ef3f40f3..dba6425576 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -8,9 +8,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.text.TextUtils; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - import com.gh.common.avoidcallback.AvoidOnResultManager; import com.gh.common.avoidcallback.Callback; import com.gh.gamecenter.BuildConfig; @@ -26,6 +23,9 @@ import org.json.JSONObject; import java.util.Iterator; import java.util.Set; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + /** * @author CsHeng @@ -189,6 +189,7 @@ public class EntranceUtils { public static final String KEY_IS_HOME = "isHome"; public static final String KEY_WEB_SHARE = "webShare"; public static final String KEY_ACTIVITY_NAME = "activityName";//活动名称 + public static final String KEY_PAGINATION_TYPE = "paginationType";//活动分页方式 public static final String KEY_REQUIRE_REDIRECT = "require_redirect"; // 标记需要再跳转 public static final String KEY_FIELD_ID = "field_id"; // 专区板块id public static final String KEY_SECTION_NAME = "section_name"; // 专区专题名 diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index fdde4b3c5f..23bd769134 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -206,6 +206,7 @@ public class SkipActivity extends BaseActivity { String act = uri.getQueryParameter("act"); String fieldId = uri.getQueryParameter("fieldId"); String sectionName = uri.getQueryParameter("sectionName"); + String paginationType = uri.getQueryParameter("paginationType");//活动分页方式 page filter String location; if (!TextUtils.isEmpty(act)) { location = VideoDetailContainerViewModel.Location.VIDEO_ACTIVITY.getValue(); @@ -216,7 +217,7 @@ public class SkipActivity extends BaseActivity { } DirectUtils.directToVideoDetail(this, path, location, false, TextUtils.isEmpty(gameId) ? "" : gameId, ENTRANCE_BROWSER, "浏览器", TextUtils.isEmpty(referer) ? "" : referer, - TextUtils.isEmpty(type) ? "" : type, TextUtils.isEmpty(act) ? "" : act, TextUtils.isEmpty(fieldId) ? "" : fieldId, + TextUtils.isEmpty(type) ? "" : type, TextUtils.isEmpty(act) ? "" : act, TextUtils.isEmpty(paginationType) ? "page" : paginationType, TextUtils.isEmpty(fieldId) ? "" : fieldId, TextUtils.isEmpty(sectionName) ? "" : sectionName); break; case HOST_VIDEO_STREAMING_HOME: diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 88a0f68759..8c134514df 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -1966,6 +1966,15 @@ public interface ApiService { * @param type hot最热,new最新,award获奖(只返回获奖视频) * @param act 活动名称 */ + @GET("activities/videos/{video_id}/stream?page_size=20") + Single> getActivitiesVideoStream(@Path("video_id") String videoId, @Query("page") int page, @Query("type") String type, @Query("act") String act); + + /** + * 获取活动的视频流(新版) + * + * @param type hot最热,new最新,award获奖(只返回获奖视频) + * @param act 活动名称 + */ @GET("activities/videos/{video_id}/stream") Single> getActivitiesVideoStream(@Path("video_id") String videoId, @Query("type") String type, @Query("act") String act, @Query("filter") String filter); diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt index 2d003884f0..337e7eca7d 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerFragment.kt @@ -91,6 +91,8 @@ class VideoDetailContainerFragment : BaseLazyFragment(), OnBackPressedListener { mViewModel.gameId = arguments?.getString(EntranceUtils.KEY_GAMEID) ?: "" mViewModel.type = arguments?.getString(EntranceUtils.KEY_TYPE) ?: "" mViewModel.act = arguments?.getString(EntranceUtils.KEY_ACTIVITY_NAME) ?: "" + mViewModel.paginationType = arguments?.getString(EntranceUtils.KEY_PAGINATION_TYPE) + ?: "type" mViewModel.fieldId = arguments?.getString(EntranceUtils.KEY_FIELD_ID) ?: "" mViewModel.sectionName = arguments?.getString(EntranceUtils.KEY_SECTION_NAME) ?: "" mIsHomeVideo = arguments?.getBoolean(EntranceUtils.KEY_IS_HOME_VIDEO) ?: false @@ -574,7 +576,7 @@ class VideoDetailContainerFragment : BaseLazyFragment(), OnBackPressedListener { } } complaintContainer.setOnClickListener { - SuggestionActivity.startSuggestionActivity(requireContext(), SuggestType.normal, "video","视频投诉(${mViewModel.currentDisplayingVideo?.id}):") + SuggestionActivity.startSuggestionActivity(requireContext(), SuggestType.normal, "video", "视频投诉(${mViewModel.currentDisplayingVideo?.id}):") popupWindow.dismiss() } diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt index b193050566..4f6ab98173 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt @@ -47,8 +47,9 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel var location = "" var isHomeVideo = false // 是否是视频总入口 var gameId = "" - var type = ""//活动type,hot最热,new最新 + var type = ""//活动type var act = ""//活动名称 + var paginationType = "page"//活动分页方式 page(默认) filter var fieldId = ""//专区视频板块id var sectionName = ""//专区视频专题名 private var page = 1 @@ -83,6 +84,16 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel getNewestVideoStream(isLoadNext) } } + Location.VIDEO_ACTIVITY.value -> { + //判断是否是老版本活动,老版本活动使用page分页,新版本使用filter + if (paginationType == "page") { + if (isLoadNext) { + getActivityVideoStream(videoId, isLoadNext) + } + } else { + getNormalVideoStream(videoId, location, isLoadNext) + } + } else -> { getNormalVideoStream(videoId, location, isLoadNext) } @@ -93,14 +104,12 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel val videoListSingle = if (location == Location.GAME_ZONE.value) { RetrofitManager.getInstance(getApplication()) .api.getVideoDetailList(videoId, getFilter(location, isLoadNext), fieldId, sectionName) + } else if (location == Location.VIDEO_ACTIVITY.value) { + RetrofitManager.getInstance(getApplication()) + .api.getActivitiesVideoStream(videoId, type, act, getFilter(location, isLoadNext)) } else { - if (location == Location.VIDEO_ACTIVITY.value) { - RetrofitManager.getInstance(getApplication()) - .api.getActivitiesVideoStream(videoId, type, act, getFilter(location, isLoadNext)) - } else { - RetrofitManager.getInstance(getApplication()) - .api.getVideoDetailList(videoId, getFilter(location, isLoadNext)) - } + RetrofitManager.getInstance(getApplication()) + .api.getVideoDetailList(videoId, getFilter(location, isLoadNext)) } videoListSingle.subscribeOn(Schedulers.io()) @@ -209,6 +218,34 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel }) } + //获取活动的视频流 + private fun getActivityVideoStream(videoId: String, isLoadNext: Boolean) { + RetrofitManager.getInstance(getApplication()) + .api.getActivitiesVideoStream(videoId, page, type, act) + .subscribeOn(Schedulers.io()) + .subscribe(object : BiResponse>() { + override fun onSuccess(data: ArrayList) { + if (mIsFirstLoad) { + // 无数据时直接显示无数据页面 + if (data.size == 0) { + noDataError.postValue(true) + return + } + } + page++ + mergeVideoList(data, isLoadNext) + mIsFirstLoad = false + } + + override fun onFailure(exception: Exception) { + if (mIsFirstLoad) { + networkError.postValue(true) + mIsFirstLoad = false + } + } + }) + } + //获取视频缓存ids private fun getCacheVideoIds(): Single> { return if (cacheVideoIds != null) {