弹出菜单迁移到 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.ViewGroup
import androidx.core.graphics.toColorInt
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
@ -13,18 +15,31 @@ import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.widget.ViewPager2
import com.ama.core.architecture.appBase.AppViewsFragment
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.common.util.asSafe
import com.ama.core.common.widget.PopMenuIconView
import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents
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.fragment.HomeItemFragment
import com.gamedog.vididin.main.interfaces.OnSwitchTabListener
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.Companion.Check_Interval_MS
import com.remax.bill.ads.AdResult
import com.remax.bill.ads.ext.AdShowExt
import com.vididin.real.money.game.R
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import kotlin.getValue
@ -37,7 +52,7 @@ import com.gamedog.vididin.main.fragments.home.YoutubeUiState as UiState
@AndroidEntryPoint
class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwitchTabListener, OnFragmentBackgroundListener {
private var mWatchedVideoTotal = 0
private var mHasShowGuide: Boolean = false
private var mTotalMs: Long = 0L
override val mViewModel: ViewModel by viewModels()
override var isBackgroundBright: Boolean = true
@ -63,6 +78,23 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
viewPager2.offscreenPageLimit = 1
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->
when (data?.mEventType) {
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)
}
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() {
@ -145,6 +208,16 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
override fun onResume() {
super.onResume()
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() {

View File

@ -13,25 +13,12 @@ import android.view.animation.AnimationSet
import android.view.animation.ScaleAnimation
import android.widget.FrameLayout
import androidx.annotation.NonNull
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
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.ResUtil.dp
import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.common.widget.PopMenuIconView
import com.vididin.real.money.game.R
import com.gamedog.vididin.VidiConst
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.youtubestatistic.TickerTimer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants
@ -43,7 +30,6 @@ import com.vididin.real.money.game.databinding.VididinappFeatureHomeItemLayoutBi
class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
private var mHasShowGuide: Boolean = false
private var mMaskBitmap: Bitmap? = null
private var mPlayerView: YouTubePlayerView? = null
private var mPlayer: YouTubePlayer? = null
@ -71,22 +57,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
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) {
when (this) {
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() {
if (mPlayer != null && mVideoData != null && !mVideoData?.id.isNullOrEmpty()) {
@ -273,17 +217,6 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment<ViewBinding>() {
override fun onResume() {
super.onResume()
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"
/>
<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>

View File

@ -85,15 +85,6 @@
</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
android:id="@+id/progress_bar_player"
android:layout_width="match_parent"

View File

@ -1,5 +1,6 @@
package com.pierfrancescosoffritti.androidyoutubeplayer.core.player
import android.webkit.WebView
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.YouTubePlayerListener
/**
@ -57,4 +58,6 @@ interface YouTubePlayer {
fun addListener(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 removeListener(listener: YouTubePlayerListener) = synchronized(lock) { listeners.remove(listener) }
override fun getWebView(): WebView {
return webView
}
fun getListeners(): Collection<YouTubePlayerListener> = synchronized(lock) { listeners.toList() }
fun release() {
@ -117,6 +121,7 @@ internal class WebViewYouTubePlayer constructor(
override val listeners: Collection<YouTubePlayerListener> get() = _youTubePlayer.getListeners()
override fun getInstance(): YouTubePlayer = _youTubePlayer
override fun onYouTubeIFrameAPIReady() = youTubePlayerInitListener(_youTubePlayer)
fun addListener(listener: YouTubePlayerListener) = _youTubePlayer.addListener(listener)
fun removeListener(listener: YouTubePlayerListener) = _youTubePlayer.removeListener(listener)