弹出菜单迁移到 HomeFragment

This commit is contained in:
renhaoting 2025-12-22 19:31:53 +08:00
parent 02587b7e21
commit 328cbd205d
6 changed files with 91 additions and 77 deletions

View File

@ -2,8 +2,10 @@ package com.gamedog.vididin.main.fragments
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.graphics.toColorInt
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
@ -13,18 +15,31 @@ import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.ama.core.architecture.appBase.AppViewsFragment import com.ama.core.architecture.appBase.AppViewsFragment
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.highlightpro.HighlightPro
import com.ama.core.architecture.highlightpro.parameter.Constraints
import com.ama.core.architecture.highlightpro.parameter.HighlightParameter
import com.ama.core.architecture.highlightpro.parameter.MarginOffset
import com.ama.core.architecture.highlightpro.shape.OvalShape
import com.ama.core.architecture.util.AndroidUtil
import com.ama.core.architecture.util.ResUtil.dp
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.setStatusBarDarkFont import com.ama.core.architecture.util.setStatusBarDarkFont
import com.ama.core.common.util.asSafe import com.ama.core.common.util.asSafe
import com.ama.core.common.widget.PopMenuIconView
import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.main.WatchAdDialog
import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter
import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment
import com.gamedog.vididin.main.interfaces.OnSwitchTabListener import com.gamedog.vididin.main.interfaces.OnSwitchTabListener
import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener
import com.gamedog.vididin.router.Router
import com.gamedog.vididin.youtubestatistic.RewardConst import com.gamedog.vididin.youtubestatistic.RewardConst
import com.gamedog.vididin.youtubestatistic.RewardConst.Companion.Check_Interval_MS import com.gamedog.vididin.youtubestatistic.RewardConst.Companion.Check_Interval_MS
import com.remax.bill.ads.AdResult import com.remax.bill.ads.AdResult
import com.remax.bill.ads.ext.AdShowExt import com.remax.bill.ads.ext.AdShowExt
import com.vididin.real.money.game.R
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlin.getValue import kotlin.getValue
@ -37,7 +52,7 @@ import com.gamedog.vididin.main.fragments.home.YoutubeUiState as UiState
@AndroidEntryPoint @AndroidEntryPoint
class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwitchTabListener, OnFragmentBackgroundListener { class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwitchTabListener, OnFragmentBackgroundListener {
private var mWatchedVideoTotal = 0 private var mWatchedVideoTotal = 0
private var mHasShowGuide: Boolean = false
private var mTotalMs: Long = 0L private var mTotalMs: Long = 0L
override val mViewModel: ViewModel by viewModels() override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true override var isBackgroundBright: Boolean = true
@ -63,6 +78,23 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
viewPager2.offscreenPageLimit = 1 viewPager2.offscreenPageLimit = 1
viewPager2.adapter = mViewPagerAdapter viewPager2.adapter = mViewPagerAdapter
popMenu.setMenuList(
mutableListOf(
PopMenuIconView.MenuItem(R.mipmap.home_menu_1) {
Router.Benefit.startActivity(requireActivity())
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_2) {
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, null).show()
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_3) {
AndroidUtil.openUrl(VidiConst.URL_GAME)
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_4) {
Router.ZeroBuy.startActivity(requireActivity())
}
))
registerEvents({ data-> registerEvents({ data->
when (data?.mEventType) { when (data?.mEventType) {
VididinEvents.Event_HOME_WATCH_Time_TICK -> { VididinEvents.Event_HOME_WATCH_Time_TICK -> {
@ -75,6 +107,37 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
} }
}, VididinEvents.Event_HOME_WATCH_Time_TICK, VididinEvents.Event_Finish_One_Video) }, VididinEvents.Event_HOME_WATCH_Time_TICK, VididinEvents.Event_Finish_One_Video)
}
private fun showGuide() {
HighlightPro.with(this@HomeFragment)
.setHighlightParameter {
HighlightParameter.Builder()
.setHighlightView(binding?.popMenu!!, {
})
.setTipsViewId(R.layout.guide_step_withdraw)
.setHighlightShape(OvalShape(binding?.popMenu?.measuredWidth!!.toFloat()/2))
.setHighlightHorizontalPadding(0.dp)
.setConstraints(Constraints.TopToBottomOfHighlight + Constraints.EndToEndOfHighlight)
.setMarginOffset(MarginOffset(top = -20.dp.toInt(), end = -20.dp.toInt()))
.build()
}
.setBackgroundColor("#cc000000".toColorInt())
.setOnShowCallback { index ->
}
.setOnDismissCallback {
binding?.popMenu!!.toggleMenu()
saveGuideState()
}
.interceptBackPressed(true)
.show()
}
private fun saveGuideState() {
SpUtil.instance().putInt(SpUtil.KEY_GUIDE_HAS_SHOW, 6)
} }
private fun handleEventOneVideoWatched() { private fun handleEventOneVideoWatched() {
@ -145,6 +208,16 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
setStatusBarDarkFont(isDarkFont = isBackgroundBright) setStatusBarDarkFont(isDarkFont = isBackgroundBright)
if (!mHasShowGuide) {
val guideStateValue = SpUtil.instance().getInt(SpUtil.KEY_GUIDE_HAS_SHOW)
if (binding?.popMenu?.isVisible == true && guideStateValue == 5) {
binding?.popMenu?.postDelayed({
showGuide()
mHasShowGuide = true
}, 5)
}
}
} }
override fun onPause() { override fun onPause() {

View File

@ -13,25 +13,12 @@ import android.view.animation.AnimationSet
import android.view.animation.ScaleAnimation import android.view.animation.ScaleAnimation
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.annotation.NonNull import androidx.annotation.NonNull
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.ama.core.architecture.appBase.AppViewsEmptyViewModelFragment import com.ama.core.architecture.appBase.AppViewsEmptyViewModelFragment
import com.ama.core.architecture.highlightpro.HighlightPro
import com.ama.core.architecture.highlightpro.parameter.Constraints
import com.ama.core.architecture.highlightpro.parameter.HighlightParameter
import com.ama.core.architecture.highlightpro.parameter.MarginOffset
import com.ama.core.architecture.highlightpro.shape.OvalShape
import com.ama.core.architecture.highlightpro.shape.RectShape
import com.ama.core.architecture.util.AndroidUtil import com.ama.core.architecture.util.AndroidUtil
import com.ama.core.architecture.util.ResUtil.dp
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.common.widget.PopMenuIconView
import com.vididin.real.money.game.R import com.vididin.real.money.game.R
import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.beans.YoutubeVideo import com.gamedog.vididin.beans.YoutubeVideo
import com.gamedog.vididin.main.WatchAdDialog
import com.gamedog.vididin.router.Router
import com.gamedog.vididin.widget.MyPlayerControlView import com.gamedog.vididin.widget.MyPlayerControlView
import com.gamedog.vididin.youtubestatistic.TickerTimer import com.gamedog.vididin.youtubestatistic.TickerTimer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants
@ -43,7 +30,6 @@ import com.vididin.real.money.game.databinding.VididinappFeatureHomeItemLayoutBi
class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() { class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
private var mHasShowGuide: Boolean = false
private var mMaskBitmap: Bitmap? = null private var mMaskBitmap: Bitmap? = null
private var mPlayerView: YouTubePlayerView? = null private var mPlayerView: YouTubePlayerView? = null
private var mPlayer: YouTubePlayer? = null private var mPlayer: YouTubePlayer? = null
@ -71,22 +57,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
ivIntroExpand.isVisible = tvVideoIntro.lineCount > 2 ivIntroExpand.isVisible = tvVideoIntro.lineCount > 2
popMenu.setMenuList(
mutableListOf(
PopMenuIconView.MenuItem(R.mipmap.home_menu_1) {
Router.Benefit.startActivity(requireActivity())
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_2) {
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, null).show()
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_3) {
AndroidUtil.openUrl(VidiConst.URL_GAME)
},
PopMenuIconView.MenuItem(R.mipmap.home_menu_4) {
Router.ZeroBuy.startActivity(requireActivity())
}
))
setOnClickBatch(ivIntroExpand, clickMaskView) { setOnClickBatch(ivIntroExpand, clickMaskView) {
when (this) { when (this) {
clickMaskView -> { clickMaskView -> {
@ -120,35 +90,9 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
private fun showGuide() {
HighlightPro.with(this@HomeItemFragment)
.setHighlightParameter {
HighlightParameter.Builder()
.setHighlightView(binding?.popMenu!!, {
})
.setTipsViewId(R.layout.guide_step_withdraw)
.setHighlightShape(OvalShape(binding?.popMenu?.measuredWidth!!.toFloat()/2))
.setHighlightHorizontalPadding(0.dp)
.setConstraints(Constraints.TopToBottomOfHighlight + Constraints.EndToEndOfHighlight)
.setMarginOffset(MarginOffset(top = -20.dp.toInt(), end = -20.dp.toInt()))
.build()
}
.setBackgroundColor("#cc000000".toColorInt())
.setOnShowCallback { index ->
}
.setOnDismissCallback {
binding?.popMenu!!.toggleMenu()
saveGuideState()
}
.interceptBackPressed(true)
.show()
}
private fun saveGuideState() {
SpUtil.instance().putInt(SpUtil.KEY_GUIDE_HAS_SHOW, 6)
}
private fun playVideo() { private fun playVideo() {
if (mPlayer != null && mVideoData != null && !mVideoData?.id.isNullOrEmpty()) { if (mPlayer != null && mVideoData != null && !mVideoData?.id.isNullOrEmpty()) {
@ -273,17 +217,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
mPlayer?.play() mPlayer?.play()
if (!mHasShowGuide) {
val guideStateValue = SpUtil.instance().getInt(SpUtil.KEY_GUIDE_HAS_SHOW)
if (binding?.popMenu?.isVisible == true && guideStateValue == 5) {
binding?.popMenu?.postDelayed({
showGuide()
mHasShowGuide = true
}, 5)
}
}
} }

View File

@ -18,4 +18,13 @@
android:layout_marginTop="40dp" android:layout_marginTop="40dp"
/> />
<com.ama.core.common.widget.PopMenuIconView
android:id="@+id/pop_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
/>
</FrameLayout> </FrameLayout>

View File

@ -85,15 +85,6 @@
</LinearLayout> </LinearLayout>
<com.ama.core.common.widget.PopMenuIconView
android:id="@+id/pop_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
/>
<com.ama.core.architecture.widget.CustomProgressBar <com.ama.core.architecture.widget.CustomProgressBar
android:id="@+id/progress_bar_player" android:id="@+id/progress_bar_player"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -1,5 +1,6 @@
package com.pierfrancescosoffritti.androidyoutubeplayer.core.player package com.pierfrancescosoffritti.androidyoutubeplayer.core.player
import android.webkit.WebView
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerListener import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerListener
/** /**
@ -57,4 +58,6 @@ interface YouTubePlayer {
fun addListener(listener: YouTubePlayerListener): Boolean fun addListener(listener: YouTubePlayerListener): Boolean
fun removeListener(listener: YouTubePlayerListener): Boolean fun removeListener(listener: YouTubePlayerListener): Boolean
fun getWebView(): WebView
} }

View File

@ -61,6 +61,10 @@ private class YouTubePlayerImpl(
override fun addListener(listener: YouTubePlayerListener) = synchronized(lock) { listeners.add(listener) } override fun addListener(listener: YouTubePlayerListener) = synchronized(lock) { listeners.add(listener) }
override fun removeListener(listener: YouTubePlayerListener) = synchronized(lock) { listeners.remove(listener) } override fun removeListener(listener: YouTubePlayerListener) = synchronized(lock) { listeners.remove(listener) }
override fun getWebView(): WebView {
return webView
}
fun getListeners(): Collection<YouTubePlayerListener> = synchronized(lock) { listeners.toList() } fun getListeners(): Collection<YouTubePlayerListener> = synchronized(lock) { listeners.toList() }
fun release() { fun release() {
@ -117,6 +121,7 @@ internal class WebViewYouTubePlayer constructor(
override val listeners: Collection<YouTubePlayerListener> get() = _youTubePlayer.getListeners() override val listeners: Collection<YouTubePlayerListener> get() = _youTubePlayer.getListeners()
override fun getInstance(): YouTubePlayer = _youTubePlayer override fun getInstance(): YouTubePlayer = _youTubePlayer
override fun onYouTubeIFrameAPIReady() = youTubePlayerInitListener(_youTubePlayer) override fun onYouTubeIFrameAPIReady() = youTubePlayerInitListener(_youTubePlayer)
fun addListener(listener: YouTubePlayerListener) = _youTubePlayer.addListener(listener) fun addListener(listener: YouTubePlayerListener) = _youTubePlayer.addListener(listener)
fun removeListener(listener: YouTubePlayerListener) = _youTubePlayer.removeListener(listener) fun removeListener(listener: YouTubePlayerListener) = _youTubePlayer.removeListener(listener)