diff --git a/app/build.gradle b/app/build.gradle
index 636b2551b9..b0eb9c391d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -462,6 +462,8 @@ dependencies {
implementation(project(':feature:sentry'))
}
+ implementation(project(':feature:media_select'))
+
implementation(project(":module_va_api"))
implementation(project(":va-archive-common"))
if(!gradle.ext.excludeOptionalModules || gradle.ext.enableVa) {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 12864f1da5..4b5f8954ea 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -454,9 +454,6 @@
android:name="com.gh.gamecenter.video.game.GameVideoActivity"
android:screenOrientation="portrait" />
-
-
-
diff --git a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt
index d3566f9377..8a1aa06a8a 100644
--- a/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt
+++ b/app/src/main/java/com/gh/base/BaseRichEditorActivity.kt
@@ -21,6 +21,8 @@ import com.gh.common.view.RichEditor
import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.activity.ToolBarActivity
+import com.gh.gamecenter.common.entity.LocalVideoEntity
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.core.runOnIoThread
@@ -30,6 +32,7 @@ import com.gh.gamecenter.feature.entity.GameEntity
import com.gh.gamecenter.qa.editor.*
import com.gh.gamecenter.feature.entity.AnswerEntity
import com.gh.gamecenter.feature.entity.ArticleEntity
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.qa.entity.EditorInsertEntity
import com.gh.gamecenter.video.poster.PosterEditActivity
import com.gh.gamecenter.video.upload.UploadManager
@@ -502,7 +505,7 @@ abstract class BaseRichEditorActivity constructor(
startActivityForResult(
LocalMediaActivity.getIntent(
this@BaseRichEditorActivity,
- LocalMediaActivity.ChooseType.VIDEO,
+ ChooseType.VIDEO,
maxChooseCount,
if (mtaEventName() == "提问帖") "发提问帖" else "发帖子"
), INSERT_MEDIA_VIDEO_CODE
@@ -531,7 +534,7 @@ abstract class BaseRichEditorActivity constructor(
val maxChooseCount = if (imageCount + 10 <= MAX_IMAGE_COUNT) 10 else MAX_IMAGE_COUNT - imageCount
val intent = LocalMediaActivity.getIntent(
this@BaseRichEditorActivity,
- LocalMediaActivity.ChooseType.IMAGE,
+ ChooseType.IMAGE,
maxChooseCount,
if (mtaEventName() == "提问帖") "发提问帖" else "发帖子"
)
diff --git a/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt b/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt
index 4393385e60..7430659df8 100644
--- a/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt
+++ b/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt
@@ -20,7 +20,7 @@ import com.gh.gamecenter.core.runOnUiThread
import com.gh.gamecenter.core.utils.MD5Utils
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.entity.ForumDetailEntity
-import com.gh.gamecenter.entity.LocalVideoEntity
+import com.gh.gamecenter.common.entity.LocalVideoEntity
import com.gh.gamecenter.entity.QuoteCountEntity
import com.gh.gamecenter.qa.BbsType
import com.gh.gamecenter.retrofit.RetrofitManager
@@ -39,8 +39,6 @@ import retrofit2.HttpException
import java.io.File
import java.io.FileOutputStream
import java.util.*
-import kotlin.collections.ArrayList
-import kotlin.collections.HashMap
import kotlin.collections.LinkedHashMap
import kotlin.collections.set
diff --git a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt
index 3582734294..0cca418ee9 100644
--- a/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/ImageViewerActivity.kt
@@ -48,6 +48,7 @@ import com.gh.gamecenter.common.entity.SensorsEvent
import com.gh.gamecenter.common.retrofit.Response
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.common.utils.ImageUtils.getIdealImageUrl
+import com.gh.gamecenter.common.view.DragListener
import com.gh.gamecenter.common.view.DraggableBigImageView
import com.gh.gamecenter.common.view.Gh_RelativeLayout
import com.gh.gamecenter.core.runOnIoThread
@@ -815,18 +816,18 @@ class ImageViewerActivity : BaseActivity(), OnPageChangeListener {
if (mBigImageView == null) {
mBigImageView = imageView
}
- imageView.setDragListener(object : DraggableBigImageView.DragListener {
- override fun onRelease(draggableBigImageView: DraggableBigImageView, scale: Float) {
+ imageView.setDragListener(object : DragListener {
+ override fun onRelease(scale: Float) {
updateOriginPosition(mViewPager.currentItem)
- performExitAnimation(draggableBigImageView, scale, isFadeOnly())
+ performExitAnimation(imageView, scale, isFadeOnly())
}
- override fun onDrag(draggableBigImageView: DraggableBigImageView, fraction: Float) {
+ override fun onDrag(fraction: Float) {
mBackgroundView.alpha = 1 - fraction
mIndicatorMask.visibility = View.GONE
}
- override fun onRestore(draggableBigImageView: DraggableBigImageView, fraction: Float) {
+ override fun onRestore(fraction: Float) {
mBackgroundView.alpha = 1F
// mIndicatorMask.goneIf(mUrlList?.size == 1)
if (mUrlList?.size != 1 || mAnswerEntity != null) {
diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt
index 8427d72040..f62201aff3 100644
--- a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt
@@ -3,7 +3,6 @@ package com.gh.gamecenter.game.upload
import android.app.Dialog
import android.content.Intent
import android.os.Bundle
-import android.provider.MediaStore
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextPaint
@@ -29,18 +28,21 @@ import com.gh.gamecenter.WebActivity
import com.gh.gamecenter.common.base.fragment.ToolbarFragment
import com.gh.gamecenter.common.callback.OnListClickListener
import com.gh.gamecenter.common.constant.EntranceConsts
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.common.view.choosepic.ChoosePicAdapter
import com.gh.gamecenter.core.utils.GsonUtils
-import com.gh.gamecenter.core.utils.MtaHelper
import com.gh.gamecenter.core.utils.SpanBuilder
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.databinding.FragmentGameUploadBinding
import com.gh.gamecenter.feature.entity.InstallGameEntity
import com.gh.gamecenter.feature.game.SelectGameAdapter
+import com.gh.gamecenter.feature.selector.ChooseType
import com.halo.assistant.HaloApp
import com.lightgame.utils.Util_System_Keyboard
import com.lightgame.utils.Utils
+import com.zhihu.matisse.Matisse
+import com.zhihu.matisse.internal.utils.PathUtils
import io.reactivex.disposables.Disposable
import okhttp3.MediaType
import okhttp3.RequestBody
@@ -86,7 +88,6 @@ class GameUploadFragment : ToolbarFragment() {
mViewModel.upLoadSuccess.observe(viewLifecycleOwner, Observer {
if (it) {
ToastUtils.showToast("上传成功")
- MtaHelper.onEvent("游戏上传", "游戏上传", "上传成功")
mUploadDialog.dismiss()
requireActivity().finish()
} else {
@@ -119,17 +120,11 @@ class GameUploadFragment : ToolbarFragment() {
5,
object : OnListClickListener {
override fun onListClick(view: View?, position: Int, data: T) {
- MtaHelper.onEvent("游戏上传", "游戏图片", "添加图片")
- val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+ val intent = LocalMediaActivity.getIntent(requireContext(), ChooseType.IMAGE, 1, "游戏上传")
startActivityForResult(intent, MEDIA_STORE_REQUEST)
}
}
) {
- MtaHelper.onEvent(
- "游戏上传",
- "游戏图片",
- "删除图片"
- )
}
mAdapter?.setPicItem(R.layout.game_upload_pic_item)
mAdapter?.setSuggestAddPicIcon(R.drawable.icon_pic_add)
@@ -147,19 +142,13 @@ class GameUploadFragment : ToolbarFragment() {
1,
object : OnListClickListener {
override fun onListClick(view: View?, position: Int, data: T) {
- MtaHelper.onEvent("游戏上传", "游戏图标", "添加图片")
PermissionHelper.checkStoragePermissionBeforeAction(requireActivity()) {
- val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+ val intent = LocalMediaActivity.getIntent(requireContext(), ChooseType.IMAGE, 1, "游戏上传")
startActivityForResult(intent, MEDIA_ICON_STORE_REQUEST)
}
}
}
) {
- MtaHelper.onEvent(
- "游戏上传",
- "游戏图标",
- "删除图片"
- )
}
mIconAdapter?.setPicItem(R.layout.game_upload_pic_item)
mIconAdapter?.setSuggestAddPicIcon(R.drawable.icon_pic_add)
@@ -194,18 +183,15 @@ class GameUploadFragment : ToolbarFragment() {
private fun initListener() {
mBinding.chooseGameLl.setOnClickListener {
- MtaHelper.onEvent("游戏上传", "安装包", "点我选择")
showSelectDialog()
}
mBinding.gameIsNetworkingRg.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
R.id.gameNetworkingRb -> {
mIsOnline = "yes"
- MtaHelper.onEvent("游戏上传", "是否联网", "需要联网")
}
R.id.gameNoNetworkingRb -> {
mIsOnline = "no"
- MtaHelper.onEvent("游戏上传", "是否联网", "无需联网")
}
}
}
@@ -213,15 +199,12 @@ class GameUploadFragment : ToolbarFragment() {
when (checkedId) {
R.id.gameLanguageChineseRb -> {
mGameLanguage = "中文"
- MtaHelper.onEvent("游戏上传", "游戏语言", "中文")
}
R.id.gameLanguageEnglishRb -> {
mGameLanguage = "英文"
- MtaHelper.onEvent("游戏上传", "游戏语言", "英文")
}
R.id.gameLanguageOtherRb -> {
mGameLanguage = "其他"
- MtaHelper.onEvent("游戏上传", "游戏语言", "其他")
}
}
}
@@ -229,21 +212,17 @@ class GameUploadFragment : ToolbarFragment() {
when (checkedId) {
R.id.gameTypeLocalRb -> {
mGameType = "local"
- MtaHelper.onEvent("游戏上传", "游戏类型", "单机")
}
R.id.gameTypeOnlineRb -> {
mGameType = "online"
- MtaHelper.onEvent("游戏上传", "游戏类型", "网游")
}
R.id.gameTypeOtherRb -> {
mGameType = "other"
- MtaHelper.onEvent("游戏上传", "游戏类型", "其他")
}
}
}
mBinding.addGameLabeTv.setOnClickListener {
- MtaHelper.onEvent("游戏上传", "游戏标签", "添加标签")
if (mTags.size < mMaxTagSize) {
showAddTagDialog()
} else {
@@ -256,7 +235,6 @@ class GameUploadFragment : ToolbarFragment() {
}
private fun commit() {
- MtaHelper.onEvent("游戏上传", "提交", "提交")
if (TextUtils.isEmpty(mBinding.tvChoose.text.toString())) {
ToastUtils.showToast("请先选择游戏安装包")
return
@@ -471,11 +449,9 @@ class GameUploadFragment : ToolbarFragment() {
}
back.setOnClickListener {
- MtaHelper.onEvent("游戏上传", "安装包", "关闭")
mSelectGameDialog?.cancel()
}
manualBtn.setOnClickListener {
- MtaHelper.onEvent("游戏上传", "安装包", "从设备上选择")
val intent = CleanApkActivity.getIntent(requireContext(), true)
PermissionHelper.checkManageAllFilesOrStoragePermissionBeforeAction(requireActivity()) {
startActivityForResult(intent, CHOOSE_LOCAL_APK)
@@ -499,32 +475,20 @@ class GameUploadFragment : ToolbarFragment() {
super.onActivityResult(requestCode, resultCode, data)
if (data == null) return
if (requestCode == MEDIA_STORE_REQUEST || requestCode == MEDIA_ICON_STORE_REQUEST) {
- val selectedImage = data.data ?: return
- val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
+ val selectedPaths = Matisse.obtainResult(data) ?: return
+ val picturePath = PathUtils.getPath(requireContext(), selectedPaths[0])
- val cursor = requireContext().contentResolver.query(selectedImage, filePathColumn, null, null, null)
- ?: return
- cursor.moveToFirst()
+ Utils.log("picturePath = $picturePath")
- try {
- val columnIndex = cursor.getColumnIndex(filePathColumn[0])
- val picturePath = cursor.getString(columnIndex)
- cursor.close()
-
- Utils.log("picturePath = $picturePath")
-
- val file = File(picturePath)
- if (file.length() > 5 * 1024 * 1024) {
- ToastUtils.showToast(getString(R.string.pic_max_hint, 5))
+ val file = File(picturePath)
+ if (file.length() > 5 * 1024 * 1024) {
+ ToastUtils.showToast(getString(R.string.pic_max_hint, 5))
+ } else {
+ if (requestCode == MEDIA_STORE_REQUEST) {
+ mAdapter!!.addFileList(picturePath)
} else {
- if (requestCode == MEDIA_STORE_REQUEST) {
- mAdapter!!.addFileList(picturePath)
- } else {
- mIconAdapter!!.addFileList(picturePath)
- }
+ mIconAdapter!!.addFileList(picturePath)
}
- } catch (e: Exception) {
- ToastUtils.showToast(e.message ?: "")
}
} else if (requestCode == CHOOSE_LOCAL_APK) {
val packageName = data.getStringExtra(EntranceConsts.KEY_PACKAGENAME) ?: ""
@@ -610,7 +574,6 @@ class GameUploadFragment : ToolbarFragment() {
labelTv.text = tag
labelView.findViewById(R.id.picDelIv).setOnClickListener {
if (mTags.contains(tag)) {
- MtaHelper.onEvent("游戏上传", "游戏标签", "删除标签")
mBinding.gameLabelFl.removeView(labelView)
mTags.remove(tag)
mBinding.gameLabelFl.goneIf(mTags.isEmpty())
diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/publish/ChooseGameCollectionCoverTypeDialog.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/publish/ChooseGameCollectionCoverTypeDialog.kt
index 316e0204b8..983b35a519 100644
--- a/app/src/main/java/com/gh/gamecenter/gamecollection/publish/ChooseGameCollectionCoverTypeDialog.kt
+++ b/app/src/main/java/com/gh/gamecenter/gamecollection/publish/ChooseGameCollectionCoverTypeDialog.kt
@@ -16,12 +16,13 @@ import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.common.util.NewLogUtils
import com.gh.gamecenter.common.utils.PermissionHelper
import com.gh.gamecenter.R
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.setRootBackgroundDrawable
import com.gh.gamecenter.common.utils.toColor
import com.gh.gamecenter.common.utils.toDrawable
import com.gh.gamecenter.databinding.DialogChooseGameCollectionCoverTypeBinding
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.gamecollection.publish.GameCollectionEditActivity.Companion.REQUEST_CODE_IMAGE
-import com.gh.gamecenter.qa.editor.LocalMediaActivity
import com.halo.assistant.HaloApp
class ChooseGameCollectionCoverTypeDialog : BaseDialogFragment() {
@@ -42,7 +43,7 @@ class ChooseGameCollectionCoverTypeDialog : BaseDialogFragment() {
startActivityForResult(
LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.IMAGE,
+ ChooseType.IMAGE,
1,
"创建游戏单"
), REQUEST_CODE_IMAGE
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
index 7c40fc263c..9e1020e238 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
@@ -10,20 +10,20 @@ import android.view.View
import androidx.annotation.RequiresApi
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
-import com.gh.common.util.*
import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.fragment.ToolbarFragment
import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment
import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.common.entity.ErrorEntity
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.utils.*
import com.gh.gamecenter.databinding.FragmentBackgroundPreviewBinding
import com.gh.gamecenter.feature.entity.BackgroundImageEntity
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.login.user.UserManager
import com.gh.gamecenter.login.user.UserViewModel
-import com.gh.gamecenter.qa.editor.LocalMediaActivity
import com.halo.assistant.HaloApp
import com.zhihu.matisse.Matisse
import io.reactivex.Single
@@ -282,7 +282,7 @@ class BackgroundPreviewFragment : ToolbarFragment() {
startActivityForResult(
LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.IMAGE,
+ ChooseType.IMAGE,
1,
"个性背景"
), MEDIA_STORE_REQUEST
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt
index 0b42e20ad0..bad69b8d1d 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/background/PersonalityBackgroundFragment.kt
@@ -12,12 +12,13 @@ import com.gh.gamecenter.CropImageActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.fragment.ToolbarFragment
import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.PermissionHelper
import com.gh.gamecenter.common.utils.viewModelProvider
import com.gh.gamecenter.common.view.GridSpacingItemColorDecoration
import com.gh.gamecenter.databinding.PersonalityBackgroundFragmentBinding
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.login.user.UserViewModel
-import com.gh.gamecenter.qa.editor.LocalMediaActivity
import com.halo.assistant.HaloApp
import com.zhihu.matisse.Matisse
@@ -75,7 +76,7 @@ class PersonalityBackgroundFragment : ToolbarFragment() {
startActivityForResult(
LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.IMAGE,
+ ChooseType.IMAGE,
1,
"个性背景"
), MEDIA_STORE_REQUEST
diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt
index 3cd76e66eb..cce391858d 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt
@@ -28,6 +28,7 @@ import com.gh.gamecenter.common.baselist.ListAdapter
import com.gh.gamecenter.common.baselist.ListFragment
import com.gh.gamecenter.common.constant.EntranceConsts.KEY_COMMENT_ID
import com.gh.gamecenter.common.eventbus.EBReuse
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.syncpage.SyncDataEntity
import com.gh.gamecenter.common.syncpage.SyncFieldConstants
import com.gh.gamecenter.common.syncpage.SyncPageRepository
@@ -38,10 +39,10 @@ import com.gh.gamecenter.databinding.ItemCommentEditImageBinding
import com.gh.gamecenter.eventbus.EBCommentSuccess
import com.gh.gamecenter.feature.entity.CommentEntity
import com.gh.gamecenter.feature.eventbus.EBDeleteComment
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.qa.comment.CommentActivity.Companion.GAME_COLLECTION_ID
import com.gh.gamecenter.qa.comment.CommentActivity.Companion.GAME_COLLECTION_TITLE
import com.gh.gamecenter.qa.comment.CommentActivity.Companion.QUESTION_ID
-import com.gh.gamecenter.qa.editor.LocalMediaActivity
import com.halo.assistant.HaloApp
import com.lightgame.utils.Util_System_Keyboard
import com.lightgame.utils.Utils
@@ -494,7 +495,7 @@ open class NewCommentFragment : ListFragment
val maxChooseCount = 9 - mViewModel.pictureList.size
val intent = LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.IMAGE,
+ ChooseType.IMAGE,
maxChooseCount,
"评论列表"
)
@@ -521,11 +522,6 @@ open class NewCommentFragment : ListFragment
return
}
- if (mShowInputOnly) {
- // Fuck pm
- MtaHelper.onEvent("帖子详情", "评论详情-全部回复", "发送")
- }
-
mViewModel.postPictureAndComment(content, mCommentEntity)
}
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaActivity.kt
deleted file mode 100644
index 3e34118b59..0000000000
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaActivity.kt
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.gh.gamecenter.qa.editor
-
-import android.content.Context
-import android.content.Intent
-import android.database.Cursor
-import android.os.Bundle
-import android.view.View
-import android.widget.AdapterView
-import android.widget.ImageView
-import android.widget.PopupWindow
-import androidx.core.content.ContextCompat
-import com.gh.gamecenter.common.base.activity.ToolBarActivity
-import com.gh.gamecenter.common.constant.EntranceConsts
-import com.gh.gamecenter.R
-import com.gh.gamecenter.common.utils.updateStatusBarColor
-import com.halo.assistant.HaloApp
-import com.zhihu.matisse.Matisse
-import com.zhihu.matisse.MimeType
-import com.zhihu.matisse.internal.entity.Album
-import com.zhihu.matisse.internal.entity.SelectionSpec
-import com.zhihu.matisse.internal.model.AlbumCollection
-
-/**
- * 选择本地视频/图片
- */
-class LocalMediaActivity : ToolBarActivity(), AlbumCollection.AlbumCallbacks {
- private var mLocalMediaFragment: LocalMediaFragment? = null
- private lateinit var mAlbumsSpinner: VideoAlbumsSpanner
- private lateinit var mAlbumsAdapter: VideoAlbumsAdapter
- private val mAlbumCollection = AlbumCollection()
- private var mIsFirstAlbumLoad = true
- private var mChooseType = ""
-
- override fun getLayoutId(): Int = R.layout.activity_video_tablayout_viewpager
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- updateStatusBarColor(R.color.ui_surface, R.color.ui_surface)
- mChooseType = intent.getStringExtra(EntranceConsts.KEY_TYPE) ?: ""
- if (mChooseType == ChooseType.VIDEO.value) {
- setNavigationTitle("本地视频")
- } else {
- setNavigationTitle("本地图片")
- }
- mLocalMediaFragment = LocalMediaFragment().apply { arguments = intent.extras }
- supportFragmentManager.beginTransaction()
- .replace(R.id.container, mLocalMediaFragment!!, LocalMediaFragment::class.java.name)
- .commitAllowingStateLoss()
- initAlbumsSpinner()
- mTitleTv.setOnClickListener {
- mAlbumsSpinner.show(findViewById(R.id.container).height)
- setPhotoNavigationTitle(true)
- }
- }
-
- private fun initAlbumsSpinner() {
- mAlbumsSpinner = VideoAlbumsSpanner(this)
- mAlbumsAdapter = VideoAlbumsAdapter(this)
-
- mAlbumsSpinner.setPopupAnchorView(findViewById(R.id.normal_toolbar))
- mAlbumsSpinner.setAdapter(mAlbumsAdapter)
- mAlbumsSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
-
- override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
- mAlbumCollection.setStateCurrentSelection(position)
- mAlbumsAdapter.cursor.moveToPosition(position)
- val album = Album.valueOf(mAlbumsAdapter.cursor)
- if (album.isAll && SelectionSpec.getInstance().capture) {
- album.addCaptureCount()
- }
- if (mLocalMediaFragment?.isAdded == true) {
- mLocalMediaFragment?.loadVideos(album)
- }
- }
- }
-
- mAlbumsSpinner.setDismissListener(PopupWindow.OnDismissListener {
- setPhotoNavigationTitle(false)
- })
- //必须加这行代码,[SelectionSpec]是单例模式,下次使用必须先更新MimeType
- val mimeType = if (mChooseType == ChooseType.VIDEO.value) {
- MimeType.ofVideo()
- } else {
- MimeType.ofImage()
- }
- val maxChooseCount = intent.getIntExtra(EntranceConsts.KEY_CHOOSE_MAX_COUNT, 1)
- Matisse.from(this).choose(mimeType).showSingleMediaType(true).maxSelectable(maxChooseCount)
- mAlbumCollection.onCreate(this, this)
- mAlbumCollection.loadAlbums()
- }
-
- override fun onAlbumLoad(cursor: Cursor?) {
- if (mIsFirstAlbumLoad) {
- mIsFirstAlbumLoad = false
- mAlbumsAdapter.swapCursor(cursor)
- mBaseHandler.post {
- cursor?.moveToPosition(mAlbumCollection.currentSelection)
- val album = Album.valueOf(cursor)
- if (album.isAll && SelectionSpec.getInstance().capture) {
- album.addCaptureCount()
- }
- if (mLocalMediaFragment?.isAdded == true) {
- mLocalMediaFragment?.loadVideos(album)
- }
- }
- }
-
- }
-
- override fun onAlbumReset() {
-
- }
-
-
- private fun setPhotoNavigationTitle(up: Boolean) {
- val drawable = ContextCompat.getDrawable(
- HaloApp.getInstance().application,
- if (up) R.drawable.ic_video_arrow_up else R.drawable.ic_video_arrow_down
- )
- val arrowIv = findViewById(R.id.arrowIv)
- arrowIv?.setImageDrawable(drawable)
- }
-
- override fun isAutoResetViewBackgroundEnabled(): Boolean = true
-
- override fun onDarkModeChanged() {
- super.onDarkModeChanged()
- updateStatusBarColor(R.color.ui_surface, R.color.ui_surface)
- }
-
- companion object {
- fun getIntent(context: Context, chooseType: ChooseType, maxChooseCount: Int = 1, entrance: String): Intent {
- return Intent(context, LocalMediaActivity::class.java).apply {
- putExtra(EntranceConsts.KEY_TYPE, chooseType.value)
- putExtra(EntranceConsts.KEY_CHOOSE_MAX_COUNT, maxChooseCount)
- putExtra(EntranceConsts.KEY_ENTRANCE, entrance)
- }
- }
- }
-
- enum class ChooseType(val value: String) {
- VIDEO("video"),
- IMAGE("image")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaAdapter.kt
deleted file mode 100644
index b8edd75364..0000000000
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaAdapter.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.gh.gamecenter.qa.editor
-
-import android.content.Context
-import android.database.Cursor
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import com.gh.gamecenter.common.base.BaseRecyclerViewHolder
-import com.gh.common.util.*
-import com.gh.gamecenter.R
-import com.gh.gamecenter.core.utils.TimeUtils
-import com.gh.gamecenter.core.utils.ToastUtils
-import com.gh.gamecenter.common.utils.goneIf
-import com.gh.gamecenter.common.utils.toDrawable
-import com.gh.gamecenter.common.utils.ImageUtils
-import com.gh.gamecenter.databinding.LocalVideoItemBinding
-import com.zhihu.matisse.internal.entity.Item
-import com.zhihu.matisse.internal.ui.adapter.RecyclerViewCursorAdapter
-import com.zhihu.matisse.internal.utils.PathUtils
-
-class LocalMediaAdapter(
- val context: Context,
- val mChooseType: String,
- val maxChooseSize: Int,
- val entrance: String,
- val callback: (ArrayList- ) -> Unit
-) : RecyclerViewCursorAdapter(null) {
- private val mSelectedMediaList = arrayListOf
- ()
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LocalVideoPreviewViewHolder {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.local_video_item, parent, false)
- return LocalVideoPreviewViewHolder(LocalVideoItemBinding.bind(view))
- }
-
- override fun onBindViewHolder(holder: LocalVideoPreviewViewHolder, cursor: Cursor?, position: Int) {
- val item = Item.valueOf(cursor)
- holder.binding.durationTv.goneIf(mChooseType == LocalMediaActivity.ChooseType.IMAGE.value)
- val path = "file:///${PathUtils.getPath(context, item.contentUri)}"
- ImageUtils.displayResizeMedia(holder.binding.preview, path, 200, 200)
- holder.binding.durationTv.text = TimeUtils.formatVideoDuration(item.duration / 1000)
- val drawable = if (mSelectedMediaList.contains(item)) {
- if (maxChooseSize == 1) {
- R.drawable.ic_choose_media_selected.toDrawable()
- } else {
- R.drawable.ic_choose_media_bg.toDrawable()
- }
- } else {
- R.drawable.ic_choose_media_normal.toDrawable()
- }
- holder.binding.checkImageView.setImageDrawable(drawable)
- if (mSelectedMediaList.contains(item) && maxChooseSize > 1) {
- holder.binding.chooseCountTv.visibility = View.VISIBLE
- holder.binding.chooseCountTv.text = (mSelectedMediaList.indexOf(item) + 1).toString()
- } else {
- holder.binding.chooseCountTv.visibility = View.GONE
- }
- holder.itemView.setOnClickListener {
- if (mSelectedMediaList.contains(item)) {
- mSelectedMediaList.remove(item)
- notifyDataSetChanged()
- callback.invoke(mSelectedMediaList)
- } else {
- if (maxChooseSize == 1) {
- mSelectedMediaList.clear()
- }
- if (mSelectedMediaList.size < maxChooseSize) {
- mSelectedMediaList.add(item)
- notifyDataSetChanged()
- callback.invoke(mSelectedMediaList)
- } else {
- if (mChooseType == LocalMediaActivity.ChooseType.IMAGE.value) {
- ToastUtils.showToast("至多选择${maxChooseSize}张图片")
- } else {
- ToastUtils.showToast("至多选择${maxChooseSize}条视频")
- }
- }
- }
- if (entrance == "发帖子" || entrance == "发提问帖" || entrance == "发视频帖") {
- val publishContentType = if (entrance == "发帖子") "帖子" else if (entrance == "发提问帖") "提问帖" else "视频帖"
- val publishMediaType = if (mChooseType == LocalMediaActivity.ChooseType.IMAGE.value) "图片" else "视频"
- NewLogUtils.logChooseMedia("click_radio_button", publishContentType, publishMediaType)
- }
- }
- }
-
- override fun getItemViewType(position: Int, cursor: Cursor?): Int {
- return 0
- }
-
- fun getSelectedMediaList(): ArrayList
- {
- return mSelectedMediaList
- }
-}
-
-class LocalVideoPreviewViewHolder(val binding: LocalVideoItemBinding) : BaseRecyclerViewHolder(binding.root)
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaFragment.kt
deleted file mode 100644
index 4958ec06c8..0000000000
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/LocalMediaFragment.kt
+++ /dev/null
@@ -1,191 +0,0 @@
-package com.gh.gamecenter.qa.editor
-
-import android.app.Activity
-import android.content.Intent
-import android.database.Cursor
-import android.net.Uri
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import androidx.core.os.bundleOf
-import androidx.recyclerview.widget.GridLayoutManager
-import com.gh.common.util.NewLogUtils
-import com.gh.gamecenter.R
-import com.gh.gamecenter.common.base.fragment.BaseFragment
-import com.gh.gamecenter.common.constant.EntranceConsts
-import com.gh.gamecenter.common.utils.dip2px
-import com.gh.gamecenter.common.utils.toColor
-import com.gh.gamecenter.common.utils.tryWithDefaultCatch
-import com.gh.gamecenter.common.view.GridSpacingItemDecoration
-import com.gh.gamecenter.core.utils.MD5Utils
-import com.gh.gamecenter.databinding.FragmentLocalMediaBinding
-import com.gh.gamecenter.entity.LocalVideoEntity
-import com.zhihu.matisse.internal.entity.Album
-import com.zhihu.matisse.internal.entity.Item
-import com.zhihu.matisse.internal.model.AlbumMediaCollection
-import com.zhihu.matisse.internal.model.SelectedItemCollection
-import com.zhihu.matisse.internal.ui.BasePreviewActivity
-import com.zhihu.matisse.internal.ui.SelectedPreviewActivity
-import com.zhihu.matisse.internal.utils.PathUtils
-import com.zhihu.matisse.ui.MatisseActivity
-
-class LocalMediaFragment : BaseFragment(), AlbumMediaCollection.AlbumMediaCallbacks {
- private lateinit var mBinding: FragmentLocalMediaBinding
- private lateinit var mAdapter: LocalMediaAdapter
- private var mAlbumMediaCollection: AlbumMediaCollection? = null
- private var mChooseType = ""
-
- override fun getLayoutId(): Int = 0
-
- override fun getInflatedLayout(): View {
- mBinding = FragmentLocalMediaBinding.inflate(LayoutInflater.from(requireContext()), null, false)
- return mBinding.root
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- mChooseType = arguments?.getString(EntranceConsts.KEY_TYPE) ?: ""
-// mBinding.reuseNoneData.reuseNoneDataTv.text = "暂无数据~"
- mBinding.listRv.layoutManager = GridLayoutManager(requireContext(), 3)
- mBinding.listRv.addItemDecoration(GridSpacingItemDecoration(3, 4F.dip2px(), false))
- val maxChooseCount = arguments?.getInt(EntranceConsts.KEY_CHOOSE_MAX_COUNT, 1)
- mAdapter = LocalMediaAdapter(
- requireContext(), mChooseType, maxChooseCount
- ?: 1, mEntrance
- ) {
- mBinding.previewTv.isEnabled = it.isNotEmpty()
- mBinding.confirmTv.isEnabled = it.isNotEmpty()
- if (it.isEmpty()) {
- mBinding.previewTv.setTextColor(R.color.text_instance.toColor(requireContext()))
- mBinding.confirmTv.alpha = 0.6f
- } else {
- mBinding.previewTv.setTextColor(R.color.text_secondary.toColor(requireContext()))
- mBinding.confirmTv.alpha = 1f
- }
- mBinding.numTv.text = "(${it.size}/${mAdapter.maxChooseSize})"
- }
- mBinding.numTv.text = "(0/${mAdapter.maxChooseSize})"
- mBinding.listRv.adapter = mAdapter
- mBinding.listRefresh.isEnabled = false
-
- val publishContentType = if (mEntrance == "发帖子") "帖子" else if (mEntrance == "发提问帖") "提问帖" else "视频帖"
- val publishMediaType = if (mChooseType == LocalMediaActivity.ChooseType.IMAGE.value) "图片" else "视频"
- mBinding.previewTv.setOnClickListener {
- if (mChooseType == LocalMediaActivity.ChooseType.VIDEO.value) {
- val intent = PreviewVideoActivity.getIntent(requireContext(), mAdapter.getSelectedMediaList())
- requireActivity().startActivityForResult(intent, PREVIEW_VIDEO)
- NewLogUtils.logChooseMedia("click_preview", publishContentType, publishMediaType)
- } else {
- val intent = Intent(requireContext(), SelectedPreviewActivity::class.java)
- val bundle = bundleOf(
- SelectedItemCollection.STATE_SELECTION to mAdapter.getSelectedMediaList(),
- SelectedItemCollection.STATE_COLLECTION_TYPE to SelectedItemCollection.COLLECTION_IMAGE
- )
- intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle)
- startActivityForResult(intent, PREVIEW_IMAGE)
- }
-
- }
- mBinding.confirmTv.setOnClickListener {
- NewLogUtils.logChooseMedia("click_confirm", publishContentType, publishMediaType)
- val intent = Intent()
- if (mChooseType == LocalMediaActivity.ChooseType.VIDEO.value) {
- val localVideoList = arrayListOf()
- mAdapter.getSelectedMediaList().forEach {
- val path = PathUtils.getPath(requireContext(), it.contentUri)
- if (path == null) {
- toast("视频已不存在,请重新选择")
- return@forEach
- }
- val id = MD5Utils.getUrlMD5(path) + System.currentTimeMillis()
- val format = getFileFormat(it.mimeType)
- localVideoList.add(
- LocalVideoEntity(
- id,
- path,
- contentUri = it.contentUri,
- duration = it.duration,
- format = format,
- size = it.size
- )
- )
- }
- intent.putExtra(LocalVideoEntity::class.java.name, localVideoList)
- } else {
- val data = mAdapter.getSelectedMediaList().map { it.contentUri }.toList()
- val path = data.map { PathUtils.getPath(requireContext(), it) }.toList()
- intent.putParcelableArrayListExtra(MatisseActivity.EXTRA_RESULT_SELECTION, ArrayList(data))
- intent.putStringArrayListExtra(MatisseActivity.EXTRA_RESULT_SELECTION_PATH, ArrayList(path))
- }
- requireActivity().setResult(Activity.RESULT_OK, intent)
- requireActivity().finish()
- }
- }
-
- private fun getFileFormat(mimeType: String?): String {
- var format = ""
- tryWithDefaultCatch {
- if (mimeType != null) {
- val split = mimeType.split("/")
- format = if (split.count() >= 2) {
- split[1]
- } else {
- mimeType
- }
- }
- }
- return format
- }
-
- override fun onAlbumMediaReset() {
- mAdapter.swapCursor(null)
- }
-
- override fun onAlbumMediaLoad(cursor: Cursor?) {
- mAdapter.swapCursor(cursor)
- mBinding.reuseNoneData.reuseNoneData.visibility = View.GONE
- mBinding.reuseLlLoading.root.visibility = View.GONE
- mBinding.reuseNoConnection.root.visibility = View.GONE
- mBinding.listRefresh.isRefreshing = false
- }
-
- fun loadVideos(album: Album) {
- mAlbumMediaCollection?.onDestroy()
-
- mAlbumMediaCollection = AlbumMediaCollection()
- mAlbumMediaCollection?.onCreate(requireActivity(), this@LocalMediaFragment)
-
- mAlbumMediaCollection?.load(album)
- }
-
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (data == null) return
- if (requestCode == PREVIEW_IMAGE) {
- val bundleExtra = data.getBundleExtra(BasePreviewActivity.EXTRA_RESULT_BUNDLE)
- val resultApply = data.getBooleanExtra(BasePreviewActivity.EXTRA_RESULT_APPLY, false)
- val items = bundleExtra?.getParcelableArrayList
- (SelectedItemCollection.STATE_SELECTION)
- if (resultApply && !items.isNullOrEmpty()) {
- mAdapter.getSelectedMediaList().clear()
- mAdapter.getSelectedMediaList().addAll(items)
- mAdapter.notifyDataSetChanged()
- mBinding.numTv.text = "(${items.size}/${mAdapter.maxChooseSize})"
- }
-
- } else if (requestCode == PREVIEW_VIDEO) {
- requireActivity().setResult(Activity.RESULT_OK, data)
- requireActivity().finish()
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- mAlbumMediaCollection?.onDestroy()
- }
-
- companion object {
- const val PREVIEW_VIDEO = 100
- const val PREVIEW_IMAGE = 101
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoActivity.kt
deleted file mode 100644
index b54f0eee29..0000000000
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoActivity.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.gh.gamecenter.qa.editor
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import com.gh.gamecenter.common.base.activity.BaseActivity
-import com.gh.gamecenter.core.utils.DisplayUtils
-import com.gh.gamecenter.common.constant.EntranceConsts
-import com.gh.gamecenter.R
-import com.zhihu.matisse.internal.entity.Item
-
-class PreviewVideoActivity : BaseActivity() {
- override fun getLayoutId(): Int {
- return R.layout.activity_amway
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- DisplayUtils.transparentStatusBar(this)
-
- val containerFragment = supportFragmentManager.findFragmentByTag(PreviewVideoFragment::class.java.name)
- ?: PreviewVideoFragment().with(intent.extras)
- // 若 placeholder 外层为 RelativeLayout 的话,会出现莫名的偏移
- supportFragmentManager.beginTransaction()
- .replace(R.id.placeholder, containerFragment, PreviewVideoFragment::class.java.name)
- .commitAllowingStateLoss()
- }
-
- companion object {
- fun getIntent(context: Context, videos: ArrayList
- ): Intent {
- val intent = Intent(context, PreviewVideoActivity::class.java)
- intent.putExtra(EntranceConsts.KEY_VIDEO_LIST, videos)
- return intent
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoFragment.kt
deleted file mode 100644
index 255b10b894..0000000000
--- a/app/src/main/java/com/gh/gamecenter/qa/editor/PreviewVideoFragment.kt
+++ /dev/null
@@ -1,229 +0,0 @@
-package com.gh.gamecenter.qa.editor
-
-import android.app.Activity
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder
-import com.facebook.drawee.generic.RoundingParams
-import com.facebook.drawee.view.SimpleDraweeView
-import com.gh.gamecenter.common.base.fragment.BaseFragment
-import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment
-import com.gh.gamecenter.common.view.GridSpacingItemColorDecoration
-import com.gh.gamecenter.CropImageActivity
-import com.gh.gamecenter.R
-import com.gh.gamecenter.common.constant.EntranceConsts
-import com.gh.gamecenter.common.utils.*
-import com.gh.gamecenter.core.utils.*
-import com.gh.gamecenter.databinding.FragmentPreviewVideoBinding
-import com.gh.gamecenter.databinding.ItemVideoSelectorBinding
-import com.gh.gamecenter.entity.LocalVideoEntity
-import com.gh.gamecenter.video.poster.PosterEditActivity
-import com.gh.gamecenter.video.upload.view.UploadVideoActivity
-import com.lightgame.adapter.BaseRecyclerAdapter
-import com.shuyu.gsyvideoplayer.GSYVideoManager
-import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
-import com.zhihu.matisse.internal.entity.Item
-import com.zhihu.matisse.internal.utils.PathUtils
-
-class PreviewVideoFragment : BaseFragment() {
- private lateinit var mBinding: FragmentPreviewVideoBinding
- private var mVideoItems: ArrayList
- = arrayListOf()
- private var mProcessingDialog: WaitingDialogFragment? = null
- private lateinit var mVideoSelectorAdapter: VideoSelectorAdapter
- private val mLocalVideoList = arrayListOf()
- override fun getLayoutId(): Int = 0
-
- override fun getInflatedLayout(): View {
- mBinding = FragmentPreviewVideoBinding.inflate(LayoutInflater.from(requireContext()), null, false)
- return mBinding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- mVideoItems = arguments?.getParcelableArrayList
- (EntranceConsts.KEY_VIDEO_LIST)
- ?: arrayListOf()
- if (mVideoItems.isNotEmpty()) {
- mVideoItems.forEach {
- val path = PathUtils.getPath(requireContext(), it.contentUri)
- val id = MD5Utils.getUrlMD5(path) + System.currentTimeMillis()
- val format = getFileFormat(it.mimeType)
- val localVideoEntity = LocalVideoEntity(
- id = id,
- filePath = path,
- contentUri = it.contentUri,
- duration = it.duration,
- format = format,
- size = it.size
- )
- mLocalVideoList.add(localVideoEntity)
- }
- initVideo(mLocalVideoList[0])
- }
- mBinding.numTv.text = "(1/${mVideoItems.size})"
- mVideoSelectorAdapter = VideoSelectorAdapter(requireContext(), mLocalVideoList) { entity, position ->
- mBinding.videoView.release()
- mBinding.numTv.text = "(${position + 1}/${mVideoItems.size})"
- initVideo(entity)
- }
- mBinding.videoSelectorRv.adapter = mVideoSelectorAdapter
- mBinding.videoSelectorRv.layoutManager =
- LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
- mBinding.videoSelectorRv.addItemDecoration(
- GridSpacingItemColorDecoration(
- requireContext(),
- 4,
- 0,
- R.color.transparent
- )
- )
- mBinding.confirmTv.setOnClickListener {
- val intent = Intent()
- intent.putExtra(LocalVideoEntity::class.java.name, mLocalVideoList)
- requireActivity().setResult(Activity.RESULT_OK, intent)
- requireActivity().finish()
- }
-
- mBinding.changeCoverTv.setOnClickListener {
- val item = mVideoItems[mVideoSelectorAdapter.selectPosition]
- val intent =
- PosterEditActivity.getIntentByPath(requireContext(), PathUtils.getPath(requireContext(), item.uri))
- startActivityForResult(intent, UploadVideoActivity.REQUEST_CODE_IMAGE_CROP)
- }
- mBinding.backBtn.setOnClickListener { requireActivity().finish() }
- }
-
- private fun getFileFormat(mimeType: String?): String {
- var format = ""
- tryWithDefaultCatch {
- if (mimeType != null) {
- val split = mimeType.split("/")
- format = if (split.count() >= 2) {
- split[1]
- } else {
- mimeType
- }
- }
- }
- return format
- }
-
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (data == null || resultCode != Activity.RESULT_OK) return
- if (requestCode == UploadVideoActivity.REQUEST_CODE_IMAGE_CROP) {
- val imagePath = data.getStringExtra(CropImageActivity.RESULT_CLIP_PATH) ?: ""
- if (imagePath.isNotEmpty()) {
- uploadImage(imagePath)
- }
- }
- }
-
- private fun uploadImage(imagePath: String) {
- mProcessingDialog = WaitingDialogFragment.newInstance("图片上传中...", false)
- mProcessingDialog?.show(requireActivity().supportFragmentManager, WaitingDialogFragment::class.java.name)
- UploadImageUtils.uploadImage(
- UploadImageUtils.UploadType.poster,
- imagePath,
- object : UploadImageUtils.OnUploadImageListener {
- override fun onSuccess(imageUrl: String) {
- mProcessingDialog?.dismiss()
- mLocalVideoList[mVideoSelectorAdapter.selectPosition].poster = imageUrl
- mBinding.videoView.updateThumb(imageUrl)
- }
-
- override fun onError(e: Throwable?) {
- mProcessingDialog?.dismiss()
- ToastUtils.showToast("上传失败")
- }
-
- override fun onProgress(total: Long, progress: Long) {}
- })
- }
-
- private fun initVideo(entity: LocalVideoEntity) {
- GSYVideoOptionBuilder()
- .setIsTouchWiget(false)
- .setUrl(entity.filePath)
- .setRotateViewAuto(false)
- .setCacheWithPlay(false)
- .setRotateWithSystem(false)
- .setReleaseWhenLossAudio(true)
- .setLooping(false)
- .setShowFullAnimation(false)
- .build(mBinding.videoView)
- if (entity.poster.isNotEmpty()) {
- mBinding.videoView.updateThumb(entity.poster)
- } else {
- mBinding.videoView.updateThumb("file:///${PathUtils.getPath(requireContext(), entity.contentUri)}")
- }
- }
-
- class VideoSelectorAdapter(
- context: Context,
- val localVideoList: ArrayList,
- val callback: (LocalVideoEntity, Int) -> Unit
- ) : BaseRecyclerAdapter(context) {
- var selectPosition: Int = 0
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- return VideoSelectorViewHolder(
- ItemVideoSelectorBinding.inflate(
- LayoutInflater.from(mContext),
- parent,
- false
- )
- )
- }
-
- override fun getItemCount(): Int = localVideoList.size
-
- override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
- if (holder is VideoSelectorViewHolder) {
- val item = localVideoList[position]
- holder.binding.previewBorder.goneIf(selectPosition != position)
- setPreviewBorder(holder.binding.preview, selectPosition == position)
- ImageUtils.display(holder.binding.preview, "file:///${PathUtils.getPath(mContext, item.contentUri)}")
- holder.binding.root.setOnClickListener {
- selectPosition = position
- callback.invoke(localVideoList[selectPosition], selectPosition)
- notifyDataSetChanged()
- }
- }
- }
-
- private fun setPreviewBorder(view: SimpleDraweeView, isSelected: Boolean) {
- val params = RoundingParams()
- params.setBorder(
- if (isSelected) R.color.black.toColor() else R.color.transparent.toColor(),
- if (isSelected) 1f.dip2px().toFloat() else 0f
- )
- params.setCornersRadius(4f.dip2px().toFloat())
- val build = GenericDraweeHierarchyBuilder.newInstance(mContext.resources)
- .setRoundingParams(params)
- .build()
- view.hierarchy = build
- }
- }
-
- class VideoSelectorViewHolder(val binding: ItemVideoSelectorBinding) : RecyclerView.ViewHolder(binding.root)
-
- override fun onResume() {
- super.onResume()
- GSYVideoManager.onResume()
- }
-
- override fun onPause() {
- super.onPause()
- GSYVideoManager.onPause()
- }
-
- override fun onDestroy() {
- super.onDestroy()
- GSYVideoManager.releaseAllVideos()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
index a6bf26fc7a..048dad2425 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt
@@ -24,8 +24,10 @@ import com.gh.gamecenter.common.base.fragment.ToolbarFragment
import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment
import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.common.entity.CommunityEntity
+import com.gh.gamecenter.common.entity.LocalVideoEntity
import com.gh.gamecenter.common.entity.NotificationUgc
import com.gh.gamecenter.common.mvvm.Status
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.core.runOnUiThread
@@ -34,6 +36,7 @@ import com.gh.gamecenter.databinding.FragmentVideoPublishBinding
import com.gh.gamecenter.entity.*
import com.gh.gamecenter.feature.entity.ForumVideoEntity
import com.gh.gamecenter.feature.entity.GameEntity
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.login.user.UserManager
import com.gh.gamecenter.qa.BbsType
import com.gh.gamecenter.qa.dialog.ChooseActivityDialogFragment
@@ -41,7 +44,6 @@ import com.gh.gamecenter.qa.dialog.ChooseForumActivity
import com.gh.gamecenter.qa.dialog.ChooseSectionDialogFragment
import com.gh.gamecenter.qa.dialog.InputUrlDialogFragment
import com.gh.gamecenter.qa.editor.GameActivity
-import com.gh.gamecenter.qa.editor.LocalMediaActivity
import com.gh.gamecenter.video.poster.PosterEditActivity
import com.gh.gamecenter.video.upload.OnUploadListener
import com.gh.gamecenter.video.upload.UploadManager
@@ -117,7 +119,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver {
startActivityForResult(
LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.VIDEO,
+ ChooseType.VIDEO,
1,
"发视频帖"
), BaseRichEditorActivity.INSERT_MEDIA_VIDEO_CODE
@@ -285,7 +287,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver {
startActivityForResult(
LocalMediaActivity.getIntent(
requireContext(),
- LocalMediaActivity.ChooseType.VIDEO,
+ ChooseType.VIDEO,
1,
"发视频帖"
), BaseRichEditorActivity.INSERT_MEDIA_VIDEO_CODE
diff --git a/app/src/main/java/com/halo/assistant/fragment/user/ManuallyRealNameFragment.kt b/app/src/main/java/com/halo/assistant/fragment/user/ManuallyRealNameFragment.kt
index 25f861328f..8982f4c7a4 100644
--- a/app/src/main/java/com/halo/assistant/fragment/user/ManuallyRealNameFragment.kt
+++ b/app/src/main/java/com/halo/assistant/fragment/user/ManuallyRealNameFragment.kt
@@ -1,6 +1,5 @@
package com.halo.assistant.fragment.user
-import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import android.os.Bundle
@@ -13,7 +12,6 @@ import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment
import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.common.constant.EntranceConsts
-import com.gh.gamecenter.core.utils.EmptyCallback
import com.gh.gamecenter.common.utils.PermissionHelper
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.common.utils.enlargeTouchArea
@@ -22,7 +20,11 @@ import com.gh.gamecenter.databinding.FragmentManuallyRealNameBinding
import com.gh.gamecenter.login.entity.IdCardEntity
import com.gh.gamecenter.common.base.fragment.ToolbarFragment
import com.gh.gamecenter.common.utils.UploadImageUtils
+import com.gh.gamecenter.feature.selector.ChooseType
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.squareup.picasso.MemoryPolicy
+import com.zhihu.matisse.Matisse
+import com.zhihu.matisse.internal.utils.PathUtils
import io.reactivex.disposables.Disposable
class ManuallyRealNameFragment : ToolbarFragment() {
@@ -69,28 +71,10 @@ class ManuallyRealNameFragment : ToolbarFragment() {
if (data == null) return
if (requestCode == REQUEST_IMAGE) {
- val selectedImage = data.data ?: return
- val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
+ val selectedPaths = Matisse.obtainResult(data) ?: return
+ val picturePath = PathUtils.getPath(requireContext(), selectedPaths[0])
- try {
- val cursor = requireContext().contentResolver.query(
- selectedImage,
- filePathColumn,
- null,
- null,
- null
- ) ?: return
-
- cursor.moveToFirst()
-
- val columnIndex = cursor.getColumnIndex(filePathColumn[0])
- val picturePath = cursor.getString(columnIndex)
- cursor.close()
-
- uploadPicture(selectedImage, picturePath)
- } catch (e: Exception) {
- ToastUtils.showToast(e.localizedMessage ?: "")
- }
+ uploadPicture(selectedPaths[0], picturePath)
}
}
@@ -150,22 +134,13 @@ class ManuallyRealNameFragment : ToolbarFragment() {
}
private fun selectImage() {
- try {
- val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
- startActivityForResult(intent, REQUEST_IMAGE)
- } catch (e: ActivityNotFoundException) {
- // https://stackoverflow.com/questions/45707678
- val getIntent = Intent(Intent.ACTION_GET_CONTENT)
- getIntent.type = "image/*"
-
- val pickIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
- pickIntent.type = "image/*"
-
- val chooserIntent = Intent.createChooser(getIntent, "Select Image")
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(pickIntent))
-
- startActivityForResult(chooserIntent, REQUEST_IMAGE)
- }
+ val intent = LocalMediaActivity.getIntent(
+ requireContext(),
+ ChooseType.IMAGE,
+ 1,
+ "人工审核"
+ )
+ startActivityForResult(intent, REQUEST_IMAGE)
}
private fun removeUploadedImage() {
diff --git a/app/src/main/java/com/halo/assistant/fragment/user/avatar/ChangeAvatarDialog.kt b/app/src/main/java/com/halo/assistant/fragment/user/avatar/ChangeAvatarDialog.kt
index 91c99bf121..e84a65c68b 100644
--- a/app/src/main/java/com/halo/assistant/fragment/user/avatar/ChangeAvatarDialog.kt
+++ b/app/src/main/java/com/halo/assistant/fragment/user/avatar/ChangeAvatarDialog.kt
@@ -2,10 +2,8 @@ package com.halo.assistant.fragment.user.avatar
import android.app.Activity
import android.app.Dialog
-import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Bundle
-import android.provider.MediaStore
import android.text.TextUtils
import android.view.Gravity
import android.view.LayoutInflater
@@ -18,15 +16,18 @@ import com.gh.gamecenter.R
import com.gh.gamecenter.common.base.activity.BaseActivity
import com.gh.gamecenter.common.base.fragment.BaseDialogFragment
import com.gh.gamecenter.common.constant.EntranceConsts
+import com.gh.gamecenter.feature.selector.LocalMediaActivity
import com.gh.gamecenter.common.utils.PermissionHelper.checkStoragePermissionBeforeAction
import com.gh.gamecenter.common.utils.viewModelProvider
import com.gh.gamecenter.core.utils.SPUtils
import com.gh.gamecenter.core.utils.ToastUtils
import com.gh.gamecenter.databinding.DialogChangeAvatarBinding
+import com.gh.gamecenter.feature.selector.ChooseType
import com.gh.gamecenter.login.user.UserViewModel
import com.halo.assistant.HaloApp
import com.halo.assistant.fragment.user.UserPortraitCropImageActivity
import com.lightgame.utils.Utils
+import com.zhihu.matisse.Matisse
import com.zhihu.matisse.internal.utils.PathUtils
import org.json.JSONException
import org.json.JSONObject
@@ -93,8 +94,8 @@ class ChangeAvatarDialog : BaseDialogFragment() {
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
REQUEST_MEDIA_ICON -> {
- val selectedImage = data.data ?: return
- val picturePath = PathUtils.getPath(requireContext(), selectedImage)
+ val selectedPaths = Matisse.obtainResult(data) ?: return
+ val picturePath = PathUtils.getPath(requireContext(), selectedPaths[0])
Utils.log("picturePath = $picturePath")
// 上传头像
val intent = UserPortraitCropImageActivity.getIntent(
@@ -144,12 +145,9 @@ class ChangeAvatarDialog : BaseDialogFragment() {
e.printStackTrace()
}
}
- val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
- try {
- startActivityForResult(intent, REQUEST_MEDIA_ICON)
- } catch (e: ActivityNotFoundException) {
- Utils.toast(requireContext(), "找不到图片选择器")
- }
+
+ val intent = LocalMediaActivity.getIntent(requireContext(), ChooseType.IMAGE, 1, "头像选择")
+ startActivityForResult(intent, REQUEST_MEDIA_ICON)
}
override fun onDarkModeChanged() {
diff --git a/app/src/main/res/drawable-xxhdpi/ic_choose_media_bg.png b/app/src/main/res/drawable-xxhdpi/ic_choose_media_bg.png
deleted file mode 100644
index 24e3617165..0000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_choose_media_bg.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_choose_media_normal.png b/app/src/main/res/drawable-xxhdpi/ic_choose_media_normal.png
deleted file mode 100644
index 6e53e916c9..0000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_choose_media_normal.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_choose_media_selected.png b/app/src/main/res/drawable-xxhdpi/ic_choose_media_selected.png
deleted file mode 100644
index db2e365d12..0000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_choose_media_selected.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_video_arrow_up.png b/app/src/main/res/drawable-xxhdpi/ic_video_arrow_up.png
deleted file mode 100644
index b715047246..0000000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_video_arrow_up.png and /dev/null differ
diff --git a/app/src/main/res/layout/fragment_local_media.xml b/app/src/main/res/layout/fragment_local_media.xml
deleted file mode 100644
index e072cdc132..0000000000
--- a/app/src/main/res/layout/fragment_local_media.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_preview_video.xml b/app/src/main/res/layout/fragment_preview_video.xml
deleted file mode 100644
index cfe140b107..0000000000
--- a/app/src/main/res/layout/fragment_preview_video.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_video_selector.xml b/app/src/main/res/layout/item_video_selector.xml
deleted file mode 100644
index effaf47aa9..0000000000
--- a/app/src/main/res/layout/item_video_selector.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/video_label_item.xml b/app/src/main/res/layout/video_label_item.xml
index e6bbe9a75c..19e6257a51 100644
--- a/app/src/main/res/layout/video_label_item.xml
+++ b/app/src/main/res/layout/video_label_item.xml
@@ -46,8 +46,8 @@
android:id="@+id/selectedIv"
android:layout_width="16dp"
android:layout_height="16dp"
- android:src="@drawable/ic_choose_media_selected"
android:visibility="invisible"
+ app:srcCompat="@drawable/ic_choose_media_selected"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml
index 5ca9142262..d14ad4778f 100644
--- a/app/src/main/res/values-night/styles.xml
+++ b/app/src/main/res/values-night/styles.xml
@@ -132,11 +132,6 @@
- @android:style/Animation.Dialog
-
-
-
-
+
+
\ No newline at end of file
diff --git a/module_common/src/main/res/values/colors.xml b/module_common/src/main/res/values/colors.xml
index a9322ca72f..70c8925fe6 100644
--- a/module_common/src/main/res/values/colors.xml
+++ b/module_common/src/main/res/values/colors.xml
@@ -45,16 +45,19 @@
#F5F5F5
+ #1A1A1A
#FFFFFF
#73FFFFFF
#00FFFFFF
+ #232323
#F8F8F8
#F5F5F5
#EEEEEE
+ #333333
#0A2496FF
diff --git a/module_common/src/main/res/values/style.xml b/module_common/src/main/res/values/style.xml
index f6e71617df..c9ce84b08e 100644
--- a/module_common/src/main/res/values/style.xml
+++ b/module_common/src/main/res/values/style.xml
@@ -1,6 +1,15 @@
+
+
+
+