diff --git a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt
index cb615ae95a..ee498130c3 100644
--- a/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/home/custom/viewholder/CustomHomeGameItemViewHolder.kt
@@ -109,7 +109,9 @@ class CustomHomeGameItemViewHolder(
item.linkColumn?.id ?: ""
)
}
- binding.gameBrief.text = game.recommendText
+ binding.gameBrief.goneIf(game.recommendText.isEmpty()) {
+ binding.gameBrief.text = game.recommendText
+ }
binding.gameImage.visibleIf(game.showImage) {
if (game.isWechatMiniGame()) {
ImageUtils.display(binding.gameImage, game.banner)
diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt
index a09c8a0efb..724de997a4 100644
--- a/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/wrapper/SearchToolbarTabWrapperFragment.kt
@@ -43,6 +43,8 @@ import com.gh.gamecenter.common.entity.LinkEntity
import com.gh.gamecenter.common.eventbus.EBReuse
import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.json.json
+import com.gh.gamecenter.common.observer.MuteCallback
+import com.gh.gamecenter.common.observer.VolumeObserver
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.common.view.TabIndicatorView
import com.gh.gamecenter.core.iinterface.IScrollable
@@ -162,6 +164,20 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
private val twoLinesTabToolbarHeight = 48F.dip2px()
private var autoVideoView: AutomaticVideoView? = null
+ private val volumeObserver by lazy {
+ VolumeObserver(object : MuteCallback {
+ override fun onMute(isMute: Boolean) {
+ if (::binding.isInitialized) {
+ binding.muteIv.setImageResource(if (isMute) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ }
+ if (isMute) {
+ autoVideoView?.mute()
+ } else {
+ autoVideoView?.unMute()
+ }
+ }
+ })
+ }
private var searchStyle: BottomTab.SearchStyle? = null
set(value) {
@@ -1033,6 +1049,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
ImageUtils.display(gameImageIv, imgUrl)
}
autoVideoView?.onVideoReset()
+ muteIv.isVisible = video != null
autoVideoView?.goneIf(video == null) {
if (autoVideoView?.isInPlayingState == false) {
GSYVideoOptionBuilder()
@@ -1051,6 +1068,17 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
headerContainer.performClick()
}
}
+ var videoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true)
+ muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ muteIv.setDebouncedClickListener {
+ videoVoiceStatus = !videoVoiceStatus
+ muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ if (videoVoiceStatus) {
+ autoVideoView?.mute()
+ } else {
+ autoVideoView?.unMute()
+ }
+ }
}
}
}
@@ -1065,6 +1093,19 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
pullDownPushHandler?.doPreProcess(this as? ISmartRefresh, popupPush)
}
+ private fun observeVolume() {
+ context?.applicationContext?.contentResolver?.registerContentObserver(
+ android.provider.Settings.System.CONTENT_URI,
+ true,
+ volumeObserver
+ )
+ }
+
+ private fun unObserveVolume() {
+ context?.applicationContext?.contentResolver?.unregisterContentObserver(volumeObserver)
+ }
+
+
private fun updateRefreshHeaderStyle(force: Boolean = false) {
if (lightRefreshHeaderStyle == isDisplayingLightContent && !force) return
lightRefreshHeaderStyle = isDisplayingLightContent
@@ -1109,6 +1150,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
} else {
resumePullDownPushVideo()
}
+ observeVolume()
}
}
}
@@ -1122,6 +1164,7 @@ class SearchToolbarTabWrapperFragment : BaseTabWrapperFragment(), ISearchToolbar
if (!videoUrl.isNullOrEmpty()) {
ScrollCalculatorHelper.savePlaySchedule(MD5Utils.getContentMD5(videoUrl), currentPosition)
}
+ unObserveVolume()
}
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt b/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt
index 169d10a0c0..3977e8978a 100644
--- a/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/wrapper/ToolbarWrapperFragment.kt
@@ -41,6 +41,8 @@ import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.common.eventbus.EBReuse
import com.gh.gamecenter.common.exposure.ExposureSource
import com.gh.gamecenter.common.json.json
+import com.gh.gamecenter.common.observer.MuteCallback
+import com.gh.gamecenter.common.observer.VolumeObserver
import com.gh.gamecenter.common.utils.*
import com.gh.gamecenter.core.utils.DisplayUtils
import com.gh.gamecenter.core.utils.MD5Utils
@@ -108,6 +110,20 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
private var mLightToolbar = false
private var mAutoFinishTwoLevelHandler: Handler? = null
private var mAutoFinishTwoLevelCallback: (() -> Unit)? = null
+ private val mVolumeObserver by lazy {
+ VolumeObserver(object : MuteCallback {
+ override fun onMute(isMute: Boolean) {
+ if (::mBinding.isInitialized) {
+ mBinding.muteIv.setImageResource(if (isMute) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ if (isMute) {
+ mBinding.autoVideoView.mute()
+ } else {
+ mBinding.autoVideoView.unMute()
+ }
+ }
+ }
+ })
+ }
private lateinit var mElapsedHelper: TimeElapsedHelper
@@ -227,6 +243,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
gameImageIv.goneIf(video != null) {
ImageUtils.display(gameImageIv, imgUrl)
}
+ muteIv.isVisible = video != null
autoVideoView.goneIf(video == null) {
if (!autoVideoView.isInPlayingState) {
GSYVideoOptionBuilder()
@@ -258,6 +275,17 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
headerContainer.performClick()
}
}
+ var videoVoiceStatus = SPUtils.getBoolean(Constants.SP_VIDEO_PLAY_MUTE, true)
+ muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ muteIv.setDebouncedClickListener {
+ videoVoiceStatus = !videoVoiceStatus
+ muteIv.setImageResource(if (videoVoiceStatus) R.drawable.ic_basic_offsound else R.drawable.ic_basic_onsound)
+ if (videoVoiceStatus) {
+ autoVideoView.mute()
+ } else {
+ autoVideoView.unMute()
+ }
+ }
}
}
}
@@ -271,6 +299,18 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
pullDownPushHandler?.doPreProcess(this as? ISmartRefresh, popupPush)
}
+ private fun observeVolume() {
+ context?.applicationContext?.contentResolver?.registerContentObserver(
+ android.provider.Settings.System.CONTENT_URI,
+ true,
+ mVolumeObserver
+ )
+ }
+
+ private fun unObserveVolume() {
+ context?.applicationContext?.contentResolver?.unregisterContentObserver(mVolumeObserver)
+ }
+
override fun onFragmentPause() {
super.onFragmentPause()
DownloadManager.getInstance().removeObserver(mDataWatcher)
@@ -739,6 +779,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
} else {
resumePullDownPushVideo()
}
+ observeVolume()
}
}
}
@@ -752,6 +793,7 @@ class ToolbarWrapperFragment : LazyFragment(), ToolbarController, ISmartRefresh,
if (videoUrl.isNotEmpty()) {
ScrollCalculatorHelper.savePlaySchedule(MD5Utils.getContentMD5(videoUrl), currentPosition)
}
+ unObserveVolume()
}
}
}
diff --git a/app/src/main/res/drawable/ic_basic_offsound.xml b/app/src/main/res/drawable/ic_basic_offsound.xml
new file mode 100644
index 0000000000..6cad2a9e67
--- /dev/null
+++ b/app/src/main/res/drawable/ic_basic_offsound.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_basic_onsound.xml b/app/src/main/res/drawable/ic_basic_onsound.xml
new file mode 100644
index 0000000000..f3d0a58dc5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_basic_onsound.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml b/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml
index 256e970e1a..a68f5d8c80 100644
--- a/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml
+++ b/app/src/main/res/layout/fragment_search_toolbar_tab_wrapper.xml
@@ -164,6 +164,19 @@
app:lottie_loop="true"
app:lottie_repeatMode="restart" />
+
+
+
+