From e32dce2ef98079b24d625383de76c637a39bb13e Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Sat, 21 Dec 2019 14:28:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=88=E5=9F=BA=E7=A1=80=E5=8A=9F=E8=83=BD=EF=BC=89?= =?UTF-8?q?(=E4=B8=89.=E5=9B=9B)https://gitlab.ghzs.com/pm/halo-app-issues?= =?UTF-8?q?/issues/715?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/Extensions.kt | 16 ++-- .../com/gh/gamecenter/SuggestionActivity.java | 2 +- .../retrofit/service/ApiService.java | 8 +- .../com/gh/gamecenter/video/ViewHolder.kt | 4 +- .../video/upload/view/UploadVideoActivity.kt | 11 +++ .../video/videomanager/VideoVerifyAdapter.kt | 70 ++++++++++++++++-- .../videomanager/VideoVerifyViewModel.kt | 35 ++++++++- .../res/drawable-xxhdpi/video_verify_more.png | Bin 0 -> 329 bytes app/src/main/res/layout/game_comment_hint.xml | 3 +- .../res/layout/layout_user_history_filter.xml | 3 +- .../res/layout/layout_video_verify_more.xml | 63 ++++++++++++++++ app/src/main/res/layout/video_verify_item.xml | 49 ++++++++++++ 12 files changed, 239 insertions(+), 25 deletions(-) create mode 100644 app/src/main/res/drawable-xxhdpi/video_verify_more.png create mode 100644 app/src/main/res/layout/layout_video_verify_more.xml create mode 100644 app/src/main/res/layout/video_verify_item.xml diff --git a/app/src/main/java/com/gh/common/util/Extensions.kt b/app/src/main/java/com/gh/common/util/Extensions.kt index 5626d44543..74d3e2f6a3 100644 --- a/app/src/main/java/com/gh/common/util/Extensions.kt +++ b/app/src/main/java/com/gh/common/util/Extensions.kt @@ -285,8 +285,9 @@ fun Float.px2dip(): Int { /** * PopupWindow 自动适配方向 + * 弹出与锚点右对齐 */ -fun PopupWindow.showAutoOrientation(anchorView: View, distanceY: Int = 0) { +fun PopupWindow.showAutoOrientation(anchorView: View, distanceY: Int = 0, distanceX: Int = 0) { val windowPos = IntArray(2) val anchorLoc = IntArray(2) // 获取锚点View在屏幕上的左上角坐标位置 @@ -294,21 +295,18 @@ fun PopupWindow.showAutoOrientation(anchorView: View, distanceY: Int = 0) { val anchorHeight = anchorView.height + distanceY // 获取屏幕的高宽 val screenHeight = anchorView.context.resources.displayMetrics.heightPixels - val screenWidth = anchorView.context.resources.displayMetrics.widthPixels // 测量contentView contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED) // 计算contentView的高宽 val windowHeight = contentView.measuredHeight val windowWidth = contentView.measuredWidth + // 判断需要向上弹出还是向下弹出显示 val isNeedShowUp = screenHeight - anchorLoc[1] - anchorHeight < windowHeight - if (isNeedShowUp) { - windowPos[0] = screenWidth - windowWidth - windowPos[1] = anchorLoc[1] - windowHeight - } else { - windowPos[0] = screenWidth - windowWidth - windowPos[1] = anchorLoc[1] + anchorHeight - } + windowPos[1] = if (isNeedShowUp) { + anchorLoc[1] - windowHeight + } else anchorLoc[1] + anchorHeight + windowPos[0] = anchorLoc[0] - windowWidth + anchorView.width - distanceX animationStyle = R.style.popwindow_option_anim_style showAtLocation(anchorView, Gravity.TOP or Gravity.START, windowPos[0], windowPos[1]) diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index d8efcc76de..5d25e13ab9 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -663,7 +663,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall String filter = UrlFilterUtils.getFilterQuery("package", mSelectGameEntity.getPackageName(), "type", "suggestion_check"); RetrofitManager.getInstance(getBaseContext()) .getApi() - .getSuggestGameCollectHintdata(filter) + .getSuggestGameCollectHintData(filter) .map(ApkActiveUtils.filterMapperList) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) 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 fef6e8d96e..26d2119d27 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 @@ -2188,5 +2188,11 @@ public interface ApiService { * 获取意见反馈游戏收录提示数据 */ @GET("games") - Observable> getSuggestGameCollectHintdata(@Query("filter") String filter); + Observable> getSuggestGameCollectHintData(@Query("filter") String filter); + + /** + * 删除视频 + */ + @DELETE("videos/{video_id}") + Observable deleteVideo(@Path("video_id") String videoId); } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/video/ViewHolder.kt b/app/src/main/java/com/gh/gamecenter/video/ViewHolder.kt index 9417835778..a3a009bb8f 100644 --- a/app/src/main/java/com/gh/gamecenter/video/ViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/video/ViewHolder.kt @@ -3,6 +3,8 @@ package com.gh.gamecenter.video import com.gh.base.BaseRecyclerViewHolder import com.gh.gamecenter.databinding.VideoDraftItemBinding import com.gh.gamecenter.databinding.VideoItemBinding +import com.gh.gamecenter.databinding.VideoVerifyItemBinding class VideoDraftItemViewHolder(var binding: VideoDraftItemBinding) : BaseRecyclerViewHolder(binding.root) -class VideoItemViewHolder(var binding: VideoItemBinding) : BaseRecyclerViewHolder(binding.root) \ No newline at end of file +class VideoItemViewHolder(var binding: VideoItemBinding) : BaseRecyclerViewHolder(binding.root) +class VideoVerifyItemViewHolder(var binding: VideoVerifyItemBinding) : BaseRecyclerViewHolder(binding.root) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt index e91040b4df..1be59f88a5 100644 --- a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoActivity.kt @@ -127,6 +127,7 @@ class UploadVideoActivity : ToolBarActivity() { verifyData(false) } mBinding.videoPoster.setOnClickListener { + MtaHelper.onEvent("上传视频", "上传视频", "换封面") startMediaStore() } @@ -572,5 +573,15 @@ class UploadVideoActivity : ToolBarActivity() { intent.putExtra(VideoDraftEntity::class.java.simpleName, videoDraft) return intent } + + /** + * 修改视频 + */ + fun getIntent(context: Context, videoDraft: VideoVerifyEntity, entrance: String, path: String): Intent { + val intent = Intent(context, UploadVideoActivity::class.java) + intent.putExtra(EntranceUtils.KEY_ENTRANCE, mergeEntranceAndPath(entrance, path)) + intent.putExtra(VideoDraftEntity::class.java.simpleName, videoDraft) + return intent + } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyAdapter.kt b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyAdapter.kt index 9b297a76c6..180f6811e6 100644 --- a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyAdapter.kt @@ -1,20 +1,22 @@ package com.gh.gamecenter.video.videomanager import android.content.Context +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.LinearLayout import androidx.recyclerview.widget.RecyclerView import com.gh.common.constant.ItemViewType -import com.gh.common.util.DirectUtils -import com.gh.common.util.ImageUtils -import com.gh.common.util.toColor +import com.gh.common.util.* +import com.gh.common.view.BugFixedPopupWindow import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.baselist.ListAdapter -import com.gh.gamecenter.databinding.VideoDraftItemBinding +import com.gh.gamecenter.databinding.VideoVerifyItemBinding import com.gh.gamecenter.entity.VideoVerifyEntity -import com.gh.gamecenter.video.VideoDraftItemViewHolder +import com.gh.gamecenter.video.VideoVerifyItemViewHolder import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel +import com.lightgame.utils.Utils class VideoVerifyAdapter(context: Context, private val mViewModel: VideoVerifyViewModel) : ListAdapter(context) { @@ -38,14 +40,14 @@ class VideoVerifyAdapter(context: Context, FooterViewHolder(view) } else -> { - view = mLayoutInflater.inflate(R.layout.video_draft_item, parent, false) - return VideoDraftItemViewHolder(VideoDraftItemBinding.bind(view)) + view = mLayoutInflater.inflate(R.layout.video_verify_item, parent, false) + return VideoVerifyItemViewHolder(VideoVerifyItemBinding.bind(view)) } } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if (holder is VideoDraftItemViewHolder) { + if (holder is VideoVerifyItemViewHolder) { val entity = mEntityList[position] ImageUtils.display(holder.binding.videoCover, entity.poster) holder.binding.videoStatus.text = when (entity.status) { @@ -67,11 +69,63 @@ class VideoVerifyAdapter(context: Context, holder.itemView.setOnClickListener { DirectUtils.directToVideoDetail(mContext, entity.id, VideoDetailContainerViewModel.Location.USER_UPLOADED_VIDEO.value, false, path = "视频投稿-已投稿") } + holder.binding.more.setOnClickListener { + showMorePopWindow(holder.binding.more, entity) + } } else if (holder is FooterViewHolder) { holder.initFooterViewHolder(mViewModel, mIsLoading, mIsNetworkError, mIsOver) } } + private fun showMorePopWindow(view: View, entity: VideoVerifyEntity) { + val inflater = LayoutInflater.from(view.context) + val layout = inflater.inflate(R.layout.layout_video_verify_more, null) + val popupWindow = BugFixedPopupWindow( + layout, + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ) + + val edit = layout.findViewById(R.id.edit) + val line = layout.findViewById(R.id.line) + val delete = layout.findViewById(R.id.delete) + + if (entity.status == "未通过") { + line.visibility = View.GONE + edit.visibility = View.GONE + } + edit.setOnClickListener { + if (entity.status == "pending") { + Utils.toast(mContext, "视频正在审核中") + } else { + PermissionHelper.checkReadPhoneStateAndStoragePermissionBeforeAction(mContext, + object : EmptyCallback { + override fun onCallback() { + + } + }) + } + popupWindow.dismiss() + } + + delete.setOnClickListener { + if (entity.status == "pending") { + Utils.toast(mContext, "视频正在审核中") + } else { + DialogUtils.showAlertDialog(mContext, "提示" + , "删除视频后不可恢复,确定删除吗?" + , "确定删除" + , "暂不删除" + , DialogUtils.ConfirmListener { mViewModel.deleteVideo(entity.id) }, null) + } + popupWindow.dismiss() + } + + popupWindow.isTouchable = true + popupWindow.isFocusable = true + popupWindow.showAutoOrientation(view) + } + override fun getItemCount(): Int { return if (mEntityList.size > 0) mEntityList.size + 1 else 0 } diff --git a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyViewModel.kt b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyViewModel.kt index d58aa2a84f..d537eab82f 100644 --- a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoVerifyViewModel.kt @@ -2,19 +2,52 @@ package com.gh.gamecenter.video.videomanager import android.app.Application import com.gh.common.constant.Config +import com.gh.common.util.ErrorHelper import com.gh.gamecenter.baselist.ListViewModel import com.gh.gamecenter.entity.VideoVerifyEntity import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager +import com.lightgame.utils.Utils import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import okhttp3.ResponseBody +import retrofit2.HttpException class VideoVerifyViewModel(application: Application) : ListViewModel(application) { + private val mApi = RetrofitManager.getInstance(getApplication()).api; override fun provideDataObservable(page: Int): Observable>? { - return RetrofitManager.getInstance(getApplication()).api.getVideoVerify(UserManager.getInstance().userId, page, Config.VIDEO_PAGE_SIZE) + return mApi.getVideoVerify(UserManager.getInstance().userId, page, Config.VIDEO_PAGE_SIZE) } override fun mergeResultLiveData() { mResultLiveData.addSource>(mListLiveData) { mResultLiveData.postValue(it) } } + + fun deleteVideo(videoId: String) { + mApi.deleteVideo(videoId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + Utils.toast(getApplication(), "操作成功") + + val list = mListLiveData.value ?: return + for (entity in list) { + if (entity.id == videoId) { + list.remove(entity) + mListLiveData.postValue(list) + break + } + } + } + + override fun onFailure(e: HttpException?) { + val string = e?.response()?.errorBody()?.string() ?: "" + ErrorHelper.handleError(getApplication(), string) + } + }) + } } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxhdpi/video_verify_more.png b/app/src/main/res/drawable-xxhdpi/video_verify_more.png new file mode 100644 index 0000000000000000000000000000000000000000..85fae51f87849e786247c400c3fd89bcd305d53a GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^JV0!~!3HE%&(1akQjEnx?oJHr&dIz4a$Hg)JkxxA z8MJ_G4hF{dOa>N^5+IfWVg?501&j>LK$;OGwtxvP%d>zP&NcukEWf+{7LeNP>EamT z!JC}W(DeWRe`BUX9)Wz;N7ey6NzF$j5?>wQSc3R4OmKLUBf)78&qol`;+0Pl!jg#Z8m literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/game_comment_hint.xml b/app/src/main/res/layout/game_comment_hint.xml index 8299b671c4..5c071f5d7a 100644 --- a/app/src/main/res/layout/game_comment_hint.xml +++ b/app/src/main/res/layout/game_comment_hint.xml @@ -2,8 +2,7 @@ + android:layout_height = "wrap_content" > + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/video_verify_item.xml b/app/src/main/res/layout/video_verify_item.xml new file mode 100644 index 0000000000..20481d47b8 --- /dev/null +++ b/app/src/main/res/layout/video_verify_item.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + +