diff --git a/app/src/main/java/com/gh/common/util/CommentHelper.kt b/app/src/main/java/com/gh/common/util/CommentHelper.kt index 2e0a01b807..9ac4273872 100644 --- a/app/src/main/java/com/gh/common/util/CommentHelper.kt +++ b/app/src/main/java/com/gh/common/util/CommentHelper.kt @@ -128,7 +128,7 @@ object CommentHelper { "投诉" -> { context.ifLogin("回答详情-评论-投诉") { - showReportTypeDialog(context) { reportType -> + showReportTypeDialog(context, !videoId.isNullOrEmpty()) { reportType -> val commentListener = object : PostCommentUtils.PostCommentListener { override fun postSuccess(response: JSONObject?) { @@ -346,16 +346,28 @@ object CommentHelper { } } - private fun showReportTypeDialog(context: Context, reportCallback: (reportType: String) -> Unit) { + private fun showReportTypeDialog(context: Context, isVideoComment: Boolean, reportCallback: (reportType: String) -> Unit) { val reportTypes = arrayListOf("垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", "其它") - DialogUtils.showListDialog(context, reportTypes, null) { text -> - val jsonObject = JSONObject() - try { - jsonObject.put("reason", text) - reportCallback.invoke(jsonObject.toString()) - } catch (e: JSONException) { - e.printStackTrace() + if (!isVideoComment) { + DialogUtils.showListDialog(context, reportTypes, null) { text -> + val jsonObject = JSONObject() + try { + jsonObject.put("reason", text) + reportCallback.invoke(jsonObject.toString()) + } catch (e: JSONException) { + e.printStackTrace() + } + } + } else { + DialogUtils.showVideoComplaintDialog(context, reportTypes, null) { text -> + val jsonObject = JSONObject() + try { + jsonObject.put("reason", text) + reportCallback.invoke(jsonObject.toString()) + } catch (e: JSONException) { + e.printStackTrace() + } } } } diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index bedd09900d..825d129e0d 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.CountDownTimer; import android.preference.PreferenceManager; import android.text.Html; @@ -25,16 +26,11 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.Button; +import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.core.content.ContextCompat; -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; - import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.gh.common.AppExecutor; import com.gh.common.constant.Config; @@ -69,6 +65,13 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + public class DialogUtils { public static Dialog showWaitDialog(Context context, String msg) { @@ -1603,6 +1606,84 @@ public class DialogUtils { dialog.show(); } + public static void showVideoComplaintDialog(Context context, + List options, + List disabledOptions, + OptionCallback callback) { + context = checkDialogContext(context); + + Dialog dialog = new Dialog(context); + + View view = LayoutInflater.from(context).inflate(R.layout.dialog_video_complaint, null, false); + LinearLayout complaintContainer = view.findViewById(R.id.complaintContainer); + ConstraintLayout otherComplaintContainer = view.findViewById(R.id.otherComplaintContainer); + EditText complaintCommentEt = view.findViewById(R.id.complaintCommentEt); + TextView backTv = view.findViewById(R.id.backTv); + TextView commitTv = view.findViewById(R.id.commitTv); + Context finalContext = context; + ExtensionsKt.setTextChangedListener(complaintCommentEt, (s, start, before, count) -> { + commitTv.setTextColor(ContextCompat.getColor(finalContext, s.toString().trim().isEmpty() ? R.color.text_999999 : R.color.theme_font)); + return null; + }); + + for (String option : options) { + TextView reportTv = new TextView(context); + reportTv.setText(option); + reportTv.setTextSize(16f); + if (disabledOptions != null && disabledOptions.contains(option)) { + reportTv.setTextColor(ContextCompat.getColor(context, R.color.btn_gray)); + } else { + reportTv.setTextColor(ContextCompat.getColor(context, R.color.title)); + reportTv.setBackgroundResource(R.drawable.textview_white_style); + } + reportTv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT)); + reportTv.setPadding(DisplayUtils.dip2px(context, 20f), DisplayUtils.dip2px(context, 17f), + DisplayUtils.dip2px(context, 20f), DisplayUtils.dip2px(context, 17f)); + if (option.equals("其它")) { + Drawable drawable = ContextCompat.getDrawable(context, R.drawable.ic_complaint_arrow_right); + drawable.setBounds(0, 0, DisplayUtils.dip2px(6f), DisplayUtils.dip2px(10f)); + reportTv.setCompoundDrawables(null, null, drawable, null); + } + complaintContainer.addView(reportTv); + + reportTv.setOnClickListener(v -> { + if (option.equals("其它")) { + complaintContainer.setVisibility(View.GONE); + otherComplaintContainer.setVisibility(View.VISIBLE); + } else { + dialog.cancel(); + callback.onClicked(reportTv.getText().toString()); + } + }); + } + + backTv.setOnClickListener(v -> { + Util_System_Keyboard.hideSoftKeyboard(finalContext, complaintCommentEt); + complaintContainer.setVisibility(View.VISIBLE); + otherComplaintContainer.setVisibility(View.GONE); + }); + commitTv.setOnClickListener(v -> { + if (complaintCommentEt.getText().toString().isEmpty()) { + ToastUtils.INSTANCE.showToast("请先输入说明~"); + return; + } + dialog.cancel(); + callback.onClicked(complaintCommentEt.getText().toString()); + }); + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(40f); + window.setAttributes(params); + } + } + /** * @param context may be is application context * @return activity context diff --git a/app/src/main/java/com/gh/common/view/CircleProgressBar.java b/app/src/main/java/com/gh/common/view/CircleProgressBar.java index fe5dbc325b..0d188713dd 100644 --- a/app/src/main/java/com/gh/common/view/CircleProgressBar.java +++ b/app/src/main/java/com/gh/common/view/CircleProgressBar.java @@ -28,9 +28,9 @@ public class CircleProgressBar extends View { private int disableProgressColor = Color.parseColor("#999999");//禁用已经走了的进度条颜色 private int disableTextColor = Color.parseColor("#999999");//禁用文字颜色 - private int currentNormalColor = normalColor; - private int currentProgressColor = progressColor; - private int currentTextColor = textColor; + private int currentNormalColor; + private int currentProgressColor; + private int currentTextColor; private float textSize = 20;//文字大小 private int progress = 0;//进度条 @@ -64,6 +64,9 @@ public class CircleProgressBar extends View { progress = array.getInt(R.styleable.CircleProgressBar_progress, progress); progress_style = array.getInt(R.styleable.CircleProgressBar_progress_style, 0) == 0 ? Paint.Style.STROKE : Paint.Style.FILL; + currentNormalColor = normalColor; + currentProgressColor = progressColor; + currentTextColor = textColor; array.recycle(); initPaint(); } diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/StairsCommentViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/StairsCommentViewHolder.kt index e06447db1a..b34815340c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/StairsCommentViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/StairsCommentViewHolder.kt @@ -154,7 +154,7 @@ class StairsCommentViewHolder(val binding: StairsCommentItemBinding, val isReply holder.itemView.setOnLongClickListener(View.OnLongClickListener { isChildLongClick = true - CommentHelper.showVideoCommentOptions(it, + CommentHelper.showVideoCommentOptions(holder.binding.commentLikeContainer, commentEntity, mIsShowingConversation, mViewModel.videoId, 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 608fe52495..77b2c3ca26 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 @@ -159,7 +159,7 @@ class UploadVideoActivity : ToolBarActivity() { verifyData(false) LogUtils.logVideoStreamingUpload("点击提交", mPath, mEntranceLink, "") } - mBinding.videoPoster.setOnClickListener { + mBinding.videoPosterPatchHint.setOnClickListener { startMediaStore() MtaHelper.onEvent("上传视频", "上传视频", "换封面") LogUtils.logVideoStreamingUpload("换封面", mPath, mEntranceLink, "") @@ -678,7 +678,6 @@ class UploadVideoActivity : ToolBarActivity() { mBinding.uploadButton.setOnClickListener { if (UploadManager.isUploading(videoPath)) { mBinding.uploadStatus.text = "上传已暂停" - mBinding.uploadStatus.setTextColor(R.color.text_333333.toColor()) mBinding.uploadSpeed.visibility = View.GONE mBinding.uploadButton.setImageResource(R.drawable.upload_resume) mBinding.uploadButton.visibility = View.VISIBLE @@ -687,7 +686,6 @@ class UploadVideoActivity : ToolBarActivity() { LogUtils.logVideoStreamingUpload("暂停上传", mPath, mEntranceLink, "") } else if (File(videoPath).exists()) { mBinding.uploadStatus.text = "视频上传中" - mBinding.uploadStatus.setTextColor(R.color.text_333333.toColor()) mBinding.uploadButton.setImageResource(R.drawable.upload_pause) mBinding.uploadButton.visibility = View.VISIBLE createUploadTask(videoPath) @@ -733,7 +731,7 @@ class UploadVideoActivity : ToolBarActivity() { mBinding.uploadSpeed.visibility = View.VISIBLE mBinding.uploadButton.visibility = View.VISIBLE mBinding.uploadSpeed.text = (SpeedUtils.getSpeed(speed) + "预计还需" + SpeedUtils.getRemainTime(totalSize, currentSize, speed)) - mBinding.uploadProgress.progress = (100 * currentSize / totalSize).toInt() + mBinding.uploadProgress.update(((360 * currentSize) / totalSize).toInt(), "") } } @@ -752,7 +750,6 @@ class UploadVideoActivity : ToolBarActivity() { toast("上传失败,视频文件不存在") } else { mBinding.uploadStatus.text = "网络错误,中断上传" - mBinding.uploadStatus.setTextColor(R.color.text_FF700F.toColor()) mBinding.uploadButton.setImageResource(R.drawable.upload_resume) mBinding.uploadButton.visibility = View.VISIBLE MtaHelper.onEvent("上传视频", "上传视频", "网络错误") @@ -766,15 +763,16 @@ class UploadVideoActivity : ToolBarActivity() { private fun handleUploadSuccess(url: String) { mBinding.uploadStatus.text = "视频已上传完成" - mBinding.uploadSpeed.visibility = View.GONE + mBinding.uploadStatusContainer.visibility = View.GONE + mBinding.uploadProgress.visibility = View.GONE mBinding.uploadButton.visibility = View.GONE - mBinding.uploadProgress.progress = 100 + mBinding.videoPosterMask.visibility = View.GONE + mBinding.uploadProgress.update(360, "") mVideoFileEntity?.url = url } private fun handleFileNotFound() { mBinding.uploadStatus.text = "上传失败,视频文件不存在" - mBinding.uploadStatus.setTextColor(R.color.text_EA3333.toColor()) mBinding.uploadButton.setImageResource(R.drawable.upload_warning) mBinding.uploadButton.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoManagerActivity.kt b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoManagerActivity.kt index 2b2d338de4..d9bddc5586 100644 --- a/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoManagerActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/video/videomanager/VideoManagerActivity.kt @@ -1,6 +1,5 @@ package com.gh.gamecenter.video.videomanager -import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle @@ -14,7 +13,6 @@ import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.entity.SimpleGameEntity import com.gh.gamecenter.entity.VideoLinkEntity -import com.gh.gamecenter.video.poster.PosterClipActivity import com.gh.gamecenter.video.upload.view.UploadVideoActivity import com.zhihu.matisse.Matisse import com.zhihu.matisse.MimeType @@ -31,17 +29,13 @@ class VideoManagerActivity : BaseActivity_TabLayout() { val uris = Matisse.obtainResult(data) if (uris.size > 0) { val videoPath = PathUtils.getPath(this, uris[0]) ?: "" - startActivityForResult(PosterClipActivity.getIntent(this, videoPath), REQUEST_CODE_CLIP) + val intent = if (mVideoLink != null) { + UploadVideoActivity.getIntent(this, videoPath, mVideoLink!!, mSimpleGameEntity, mEntrance, "视频投稿", "") + } else { + UploadVideoActivity.getIntent(this, videoPath, mEntrance, "视频投稿", "") + } + startActivityForResult(intent, REQUEST_CODE_VIDEO) } - } else if (REQUEST_CODE_CLIP == requestCode && resultCode == Activity.RESULT_OK && data != null) { - val videoPath = data.getStringExtra(EntranceUtils.KEY_PATH_VIDEO) - val videoPoster = data.getStringExtra(EntranceUtils.KEY_POSTER_PATH) - val intent = if (mVideoLink != null) { - UploadVideoActivity.getIntent(this, videoPath, mVideoLink!!, mSimpleGameEntity, mEntrance, "视频投稿", videoPoster) - } else { - UploadVideoActivity.getIntent(this, videoPath, mEntrance, "视频投稿", videoPoster) - } - startActivityForResult(intent, REQUEST_CODE_VIDEO) } if (UploadVideoActivity.RESULT_CODE_VIDEO == resultCode) { diff --git a/app/src/main/res/drawable-xxhdpi/upload_pause.png b/app/src/main/res/drawable-xxhdpi/upload_pause.png index 431f71a3f1..49266f7931 100644 Binary files a/app/src/main/res/drawable-xxhdpi/upload_pause.png and b/app/src/main/res/drawable-xxhdpi/upload_pause.png differ diff --git a/app/src/main/res/drawable-xxhdpi/upload_resume.png b/app/src/main/res/drawable-xxhdpi/upload_resume.png index 878b0e3864..dd4c29897e 100644 Binary files a/app/src/main/res/drawable-xxhdpi/upload_resume.png and b/app/src/main/res/drawable-xxhdpi/upload_resume.png differ diff --git a/app/src/main/res/drawable-xxhdpi/upload_warning.png b/app/src/main/res/drawable-xxhdpi/upload_warning.png index 6839929376..6dc72232d9 100644 Binary files a/app/src/main/res/drawable-xxhdpi/upload_warning.png and b/app/src/main/res/drawable-xxhdpi/upload_warning.png differ diff --git a/app/src/main/res/drawable/bg_shape_f5_radius_4.xml b/app/src/main/res/drawable/bg_shape_f5_radius_4.xml new file mode 100644 index 0000000000..ef69f33103 --- /dev/null +++ b/app/src/main/res/drawable/bg_shape_f5_radius_4.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_complaint_arrow_right.png b/app/src/main/res/drawable/ic_complaint_arrow_right.png new file mode 100644 index 0000000000..598fdda4bb Binary files /dev/null and b/app/src/main/res/drawable/ic_complaint_arrow_right.png differ diff --git a/app/src/main/res/layout/activity_video_uplaod.xml b/app/src/main/res/layout/activity_video_uplaod.xml index 843b929d86..ffb8bd3970 100644 --- a/app/src/main/res/layout/activity_video_uplaod.xml +++ b/app/src/main/res/layout/activity_video_uplaod.xml @@ -20,69 +20,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - - - - - - - - - - - + + + + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index ca102d0601..7d09d1e1e2 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -80,17 +80,17 @@ - + - + - + - + - + - +