diff --git a/app/src/main/java/com/gamedog/vididin/beans/Transaction.kt b/app/src/main/java/com/gamedog/vididin/beans/Transaction.kt new file mode 100644 index 0000000..a0cec70 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/beans/Transaction.kt @@ -0,0 +1,15 @@ +package com.gamedog.vididin.beans + +data class Transaction( + val id: Long, + val dateTime: String, + val status: TransactionStatus, + val statusText: String, + val description: String, + val amount: String, + val amountColor: Int +) + +enum class TransactionStatus { + SUCCESS, FAILED, PROCESSING, REDEEM +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/TransactionAdapter.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/TransactionAdapter.kt new file mode 100644 index 0000000..c3629b9 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/TransactionAdapter.kt @@ -0,0 +1,51 @@ +package com.gamedog.vididin.features.withdrawrecord + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.gamedog.vididin.beans.Transaction +import com.gamedog.vididin.beans.TransactionStatus +import com.gamedog.vididin.databinding.FragmentWithdrawRecordGoldItemBinding + +class TransactionAdapter : ListAdapter(DiffCallback()) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = FragmentWithdrawRecordGoldItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + inner class ViewHolder(private val binding: FragmentWithdrawRecordGoldItemBinding) : RecyclerView.ViewHolder(binding.root) { + fun bind(transaction: Transaction) { + binding.tvDate.text = transaction.dateTime + binding.tvStatus.text = transaction.statusText + binding.tvDescription.text = transaction.description + binding.tvAmount.text = transaction.amount + binding.tvAmount.setTextColor(ContextCompat.getColor(binding.root.context, transaction.amountColor)) + + // 设置状态图标 + binding.tvStatusIcon.text = when (transaction.status) { + TransactionStatus.SUCCESS -> "✔" + TransactionStatus.FAILED -> "!" + TransactionStatus.PROCESSING -> "⟳" + TransactionStatus.REDEEM -> "↗" + } + } + } + + class DiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: Transaction, newItem: Transaction): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: Transaction, newItem: Transaction): Boolean { + return oldItem == newItem + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/ViewPagerAdapter.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/ViewPagerAdapter.kt new file mode 100644 index 0000000..4187031 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/ViewPagerAdapter.kt @@ -0,0 +1,19 @@ +package com.gamedog.vididin.features.withdrawrecord + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.gamedog.vididin.features.withdrawrecord.fragments.DinheiroFragment + +class ViewPagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) { + + override fun getItemCount(): Int = 2 + + override fun createFragment(position: Int): Fragment { + return when (position) { + 0 -> DinheiroFragment() + 1 -> DinheiroFragment() // 创建类似的Fragment + else -> throw IllegalArgumentException("Invalid position: $position") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/WithdrawRecordActivity.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/WithdrawRecordActivity.kt index 5574bcd..a4f861a 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/WithdrawRecordActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/WithdrawRecordActivity.kt @@ -10,6 +10,7 @@ import androidx.core.view.updatePadding import com.ama.core.architecture.appBase.AppViewsActivity import com.gamedog.vididin.R import com.gamedog.vididin.main.interfaces.OnTabStyleListener +import com.google.android.material.tabs.TabLayoutMediator import dagger.hilt.android.AndroidEntryPoint import kotlin.getValue import com.gamedog.vididin.databinding.ActivityWithdrawRecordBinding as ViewBinding @@ -26,8 +27,7 @@ class WithdrawRecordActivity : AppViewsActivity override fun ViewBinding.initViews() { with(binding) { - titlebar.setBackIconColor(R.color.black) - titlebar.setTitleText(R.string.title_cash_record, R.color.black) + setupViewPager() } } @@ -58,10 +58,27 @@ class WithdrawRecordActivity : AppViewsActivity } + private fun setupViewPager() { + val adapter = ViewPagerAdapter(this) + binding.viewPager.adapter = adapter + + TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position -> + tab.text = when (position) { + 0 -> "Dinheiro" + 1 -> "Moedas" + else -> null + } + }.attach() + } + + companion object { internal fun startActivity(activity: Activity) { activity.startActivity(Intent(activity.applicationContext, WithdrawRecordActivity::class.java)) } } -} \ No newline at end of file +} + + + diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/CashRecordFragment.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/CashRecordFragment.kt new file mode 100644 index 0000000..0c91887 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/CashRecordFragment.kt @@ -0,0 +1,88 @@ +package com.gamedog.vididin.features.withdrawrecord.fragments + + + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding +import androidx.fragment.app.viewModels +import com.ama.core.architecture.appBase.AppViewsFragment +import com.ama.core.architecture.appBase.OnFragmentBackgroundListener +import com.ama.core.architecture.util.setOnClickBatch +import com.ama.core.architecture.util.setStatusBarDarkFont +import com.ama.core.common.util.dp +import com.gamedog.vididin.router.Router +import dagger.hilt.android.AndroidEntryPoint +import kotlin.getValue +import com.gamedog.vididin.databinding.VididinappFeatureMineFragmentMineBinding as ViewBinding +import com.gamedog.vididin.main.fragments.mine.MineUiState as UiState +import com.gamedog.vididin.main.fragments.mine.MineViewModel as ViewModel + + + + +@AndroidEntryPoint +class CashRecordFragment : AppViewsFragment(), + OnFragmentBackgroundListener { + override val mViewModel: ViewModel by viewModels() + override var isBackgroundBright: Boolean = true + + + + private var isStatusBarDarkFont = false + + override fun inflateViewBinding( + inflater: LayoutInflater, + container: ViewGroup?, + ) = ViewBinding.inflate(inflater, container, false) + + override fun ViewBinding.initWindowInsets() { + ViewCompat.setOnApplyWindowInsetsListener(topBackground) { v, insets -> + val systemBars = + insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) + v.updatePadding(top = systemBars.top + 20.dp) + insets + } + } + + override fun ViewBinding.initViews() { + setOnClickBatch(rlPrivacy, rlVersion, rlFeedback) { + when (this) { + rlPrivacy -> { + Router.Privacy.startActivity(requireActivity()) + } + rlVersion -> { + Router.Version.startActivity(requireActivity()) + } + rlFeedback -> { + Router.Feedback.startActivity(requireActivity()) + } + } + } + } + + override fun ViewBinding.initListeners() { + nestedScrollView.setOnScrollChangeListener { _, _, scrollY, _, _ -> + isStatusBarDarkFont = scrollY > topBackground.height + setStatusBarDarkFont(isStatusBarDarkFont) + } + } + + override fun ViewBinding.initObservers() { + } + + override fun ViewBinding.onUiStateCollect(uiState: UiState) { + //dynamicColorsSwitch.isChecked = uiState.useDynamicColor + } + + override fun onResume() { + super.onResume() + setStatusBarDarkFont(isDarkFont = isStatusBarDarkFont) + } + + companion object { + internal fun newInstance() = CashRecordFragment() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/DinheiroFragment.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/DinheiroFragment.kt new file mode 100644 index 0000000..7f1aa88 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/DinheiroFragment.kt @@ -0,0 +1,77 @@ +package com.gamedog.vididin.features.withdrawrecord.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import com.gamedog.vididin.R +import com.gamedog.vididin.beans.Transaction +import com.gamedog.vididin.beans.TransactionStatus +import com.gamedog.vididin.databinding.FragmentWithdrawRecordCashBinding +import com.gamedog.vididin.features.withdrawrecord.TransactionAdapter + +class DinheiroFragment : Fragment() { + + private lateinit var binding: FragmentWithdrawRecordCashBinding + private lateinit var adapter: TransactionAdapter + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FragmentWithdrawRecordCashBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupRecyclerView() + } + + private fun setupRecyclerView() { + adapter = TransactionAdapter() + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) + + // 模拟数据 - 根据您的截图 + val transactions = listOf( + Transaction( + id = 1, + dateTime = "2025/10/31 17:30", + status = TransactionStatus.SUCCESS, + statusText = "Sucesso", + description = "Você solicitou o saque com sucesso!", + amount = "-R$ 0,1", + amountColor = R.color.red_11 + ), + Transaction( + id = 2, + dateTime = "2025/10/31 17:30", + status = TransactionStatus.FAILED, + statusText = "Falhou", + description = "Você solicitou o saque com sucesso!", + amount = "-R$ 0,0", + amountColor = R.color.red_11 + ), + Transaction( + id = 3, + dateTime = "2025/10/31 17:30", + status = TransactionStatus.PROCESSING, + statusText = "Em processamento...", + description = "Você solicitou o saque com sucesso!", + amount = "-R$ 10,0", + amountColor = R.color.red_11 + ), + Transaction( + id = 4, + dateTime = "2025/10/31 17:30", + status = TransactionStatus.REDEEM, + statusText = "Resgatar", + description = "Você resgatou 4980 moedas", + amount = "+R$ 10,0", + amountColor = R.color.green_39 + ) + ) + + adapter.submitList(transactions) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/GoldRecordFragment.kt b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/GoldRecordFragment.kt new file mode 100644 index 0000000..5043a63 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdrawrecord/fragments/GoldRecordFragment.kt @@ -0,0 +1,88 @@ +package com.gamedog.vididin.features.withdrawrecord.fragments + + + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding +import androidx.fragment.app.viewModels +import com.ama.core.architecture.appBase.AppViewsFragment +import com.ama.core.architecture.appBase.OnFragmentBackgroundListener +import com.ama.core.architecture.util.setOnClickBatch +import com.ama.core.architecture.util.setStatusBarDarkFont +import com.ama.core.common.util.dp +import com.gamedog.vididin.router.Router +import dagger.hilt.android.AndroidEntryPoint +import kotlin.getValue +import com.gamedog.vididin.databinding.VididinappFeatureMineFragmentMineBinding as ViewBinding +import com.gamedog.vididin.main.fragments.mine.MineUiState as UiState +import com.gamedog.vididin.main.fragments.mine.MineViewModel as ViewModel + + + + +@AndroidEntryPoint +class GoldRecordFragment : AppViewsFragment(), + OnFragmentBackgroundListener { + override val mViewModel: ViewModel by viewModels() + override var isBackgroundBright: Boolean = true + + + + private var isStatusBarDarkFont = false + + override fun inflateViewBinding( + inflater: LayoutInflater, + container: ViewGroup?, + ) = ViewBinding.inflate(inflater, container, false) + + override fun ViewBinding.initWindowInsets() { + ViewCompat.setOnApplyWindowInsetsListener(topBackground) { v, insets -> + val systemBars = + insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) + v.updatePadding(top = systemBars.top + 20.dp) + insets + } + } + + override fun ViewBinding.initViews() { + setOnClickBatch(rlPrivacy, rlVersion, rlFeedback) { + when (this) { + rlPrivacy -> { + Router.Privacy.startActivity(requireActivity()) + } + rlVersion -> { + Router.Version.startActivity(requireActivity()) + } + rlFeedback -> { + Router.Feedback.startActivity(requireActivity()) + } + } + } + } + + override fun ViewBinding.initListeners() { + nestedScrollView.setOnScrollChangeListener { _, _, scrollY, _, _ -> + isStatusBarDarkFont = scrollY > topBackground.height + setStatusBarDarkFont(isStatusBarDarkFont) + } + } + + override fun ViewBinding.initObservers() { + } + + override fun ViewBinding.onUiStateCollect(uiState: UiState) { + //dynamicColorsSwitch.isChecked = uiState.useDynamicColor + } + + override fun onResume() { + super.onResume() + setStatusBarDarkFont(isDarkFont = isStatusBarDarkFont) + } + + companion object { + internal fun newInstance() = GoldRecordFragment() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt index e8ba10e..74b35a6 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt @@ -16,6 +16,7 @@ import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.util.setStatusBarDarkFont import com.ama.core.common.util.asSafe import com.gamedog.vididin.VididinEvents +import com.gamedog.vididin.beans.YoutubeVideo import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment @@ -116,6 +117,82 @@ class HomeFragment : AppViewsFragment(), OnSwit } override fun ViewBinding.onUiStateCollect(uiState: UiState) { + val videoList = mutableListOf() + if (uiState.playLists == null) { + videoList.add(YoutubeVideo("TegalxCm1LA", "111", "bbbbb")) + videoList.add(YoutubeVideo("KA54UCs3E_4", "222", "bbbbb")) + videoList.add(YoutubeVideo("_bAxHM7O_9k", "333", "bbbbb")) + videoList.add(YoutubeVideo("6vAYPVTGs90", "444", "bbbbb")) + videoList.add(YoutubeVideo("bLAfi6cWcoI", "555", "bbbbb")) + videoList.add(YoutubeVideo("WX1MvqCzQ2k", "666", "bbbbb")) + videoList.add(YoutubeVideo("nkRPma2F4s4", "777", "bbbbb")) + videoList.add(YoutubeVideo("ssosMzYpQgc", "888", "bbbbb")) + videoList.add(YoutubeVideo("1sXHOCQcbwc", "999", "bbbbb")) + + /*Iy3ml-iFkNk + TegalxCm1LA + KA54UCs3E_4 + _bAxHM7O_9k + 6vAYPVTGs90 + bLAfi6cWcoI + WX1MvqCzQ2k + nkRPma2F4s4 + PCB6ln-OS80 + ssosMzYpQgc + HOnF5B0DgB4 + 1sXHOCQcbwc + UtyiXRHCbz0 + Li4pxNp0_DU + BrB22pz87sE + u1ZV1r6kDb4 + cr5YGtHdXnU + 1HcDvPWd3f0 + 2s5iT-mFObY + a9rlrDayhPw + FC0rQTxiVZM + 6Zh7iunptJ8 + rIxsZXKb_0s + 4dG5xqnWR3c + Kz9-4Xm66hA + 3Vsu2fN31Dg + BMLVqUGtDJo + T5T0a7qMOrk + qozqA9Or8fo + 3Zxt_Bx5DaU + kOrFO6uqdUA + MtPTSMddLys + a5I0y9vEIXc + wXzLu9L7ycQ + bupCgnL4TKg + 7jLDu14kG84 + DTrpyWQ-nAg + NK8ieGKZh7U + 2owFE-4erL0 + ikhXaNg_WDw + XeEknMVly-0 + L3zrvfJrTkE + 568jYv6tgmI + PgPIEeCOCmQ + AY5FyQSXYYc + I41E7SYNBx4 + xL5Amu_srLM + upE5i_hXs7E + gR-RYjzm2UY + ISizhaStk5U + Iy3ml-iFkNk + TegalxCm1LA + KA54UCs3E_4 + _bAxHM7O_9k + 6vAYPVTGs90 + bLAfi6cWcoI + WX1MvqCzQ2k + nkRPma2F4s4 + PCB6ln-OS80 + ssosMzYpQgc*/ + + mViewPagerAdapter.submitList(videoList) + return + } mViewPagerAdapter.submitList(uiState.playLists) } diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt index 7a4ed2a..2f39691 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt @@ -1,7 +1,9 @@ package com.gamedog.vididin.main.fragments.home.fragment +import android.graphics.Bitmap import android.os.Bundle +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -9,6 +11,7 @@ import android.view.animation.AlphaAnimation import android.view.animation.Animation import android.view.animation.AnimationSet import android.view.animation.ScaleAnimation +import android.widget.FrameLayout import androidx.annotation.NonNull import androidx.core.view.isVisible import com.ama.core.architecture.appBase.AppViewsEmptyViewModelFragment @@ -32,8 +35,8 @@ import com.gamedog.vididin.databinding.VididinappFeatureHomeItemLayoutBinding as class HomeItemFragment : AppViewsEmptyViewModelFragment() { + private var mMaskBitmap: Bitmap? = null private var mPlayerView: YouTubePlayerView? = null - private var mIsStared = false private var mPlayer: YouTubePlayer? = null private var mVideoData: YoutubeVideo? = null private var mIsPlaying: Boolean = false @@ -75,9 +78,9 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { } )) - setOnClickBatch(ivIntroExpand, maskView) { + setOnClickBatch(ivIntroExpand, clickMaskView) { when (this) { - maskView -> { + clickMaskView -> { if (mIsPlaying) mPlayer?.pause() else mPlayer?.play() } @@ -100,13 +103,35 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { } + override fun onDestroy() { + super.onDestroy() + mMaskBitmap?.recycle() + } + + private fun playVideo() { + if (mPlayer != null && mVideoData != null && !mVideoData?.id.isNullOrEmpty()) { + mPlayer?.loadOrCueVideo( + lifecycle, + mVideoData!!.id, + 0f + ) + + /*mPlayerView?.isVisible?.let { + if (!it) { + mPlayer?.pause() + } + }*/ + } + } fun loadVideo() { if (null == mPlayerView) { mPlayerView = YouTubePlayerView(requireContext()) - binding!!.playerContainer.addView(mPlayerView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + val layoutParam = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + layoutParam.gravity = Gravity.CENTER + binding!!.playerContainer.addView(mPlayerView, layoutParam) lifecycle.addObserver(mPlayerView!!) mPlayerView?.enableAutomaticInitialization = true } @@ -120,17 +145,7 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { val playerUiController = MyPlayerControlView(playerView, youTubePlayer) playerView.setCustomPlayerUi(playerUiController.rootView) - if (mVideoData != null && !mVideoData?.id.isNullOrEmpty()) { - youTubePlayer.loadOrCueVideo( - lifecycle, - mVideoData!!.id, - 0f - ) - - if (!playerView.isVisible) { - youTubePlayer.pause() - } - } + playVideo() } override fun onCurrentSecond(youTubePlayer: YouTubePlayer, second: Float) { @@ -164,9 +179,10 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { } PlayerConstants.PlayerState.ENDED -> { togglePlayingState(false) + playVideo() } PlayerConstants.PlayerState.BUFFERING -> { - togglePlayingState(false) + //togglePlayingState(false) } PlayerConstants.PlayerState.VIDEO_CUED -> { togglePlayingState(false) @@ -176,10 +192,28 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { }) } + + private fun generateThumbAndSet() { + // capturePlayerView And Show as thumb + mPlayerView?.let { + mMaskBitmap?.recycle() + + mMaskBitmap = AndroidUtil.getThumbOfView(it) + mMaskBitmap?.let { + binding?.ivMask?.setImageBitmap(mMaskBitmap) + } + } + } + private fun togglePlayingState(isPlaying: Boolean) { if (mIsPlaying != isPlaying) { mIsPlaying = isPlaying - binding?.ivMask?.isVisible = !mIsPlaying + if (!mIsPlaying) { + generateThumbAndSet() + } + + binding?.ivMask?.isVisible = false/*!mIsPlaying*/ + binding?.playerContainer?.isVisible = isPlaying if (mIsPlaying) { hidePlayIconAnim() diff --git a/app/src/main/res/layout/activity_withdraw_record.xml b/app/src/main/res/layout/activity_withdraw_record.xml index f408a91..41ebb4c 100644 --- a/app/src/main/res/layout/activity_withdraw_record.xml +++ b/app/src/main/res/layout/activity_withdraw_record.xml @@ -2,210 +2,63 @@ + android:id="@+id/content_root"> - + android:layout_height="44dp" + android:gravity="center_vertical" + android:orientation="horizontal"> - - - - - - - - + android:text="Dinheiro" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:text="Moedas" /> + + + + + + - diff --git a/app/src/main/res/layout/fragment_withdraw_record_cash.xml b/app/src/main/res/layout/fragment_withdraw_record_cash.xml new file mode 100644 index 0000000..5b91fd5 --- /dev/null +++ b/app/src/main/res/layout/fragment_withdraw_record_cash.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_withdraw_record_cash_item.xml b/app/src/main/res/layout/fragment_withdraw_record_cash_item.xml new file mode 100644 index 0000000..9e308d5 --- /dev/null +++ b/app/src/main/res/layout/fragment_withdraw_record_cash_item.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_withdraw_record_gold.xml b/app/src/main/res/layout/fragment_withdraw_record_gold.xml new file mode 100644 index 0000000..5b91fd5 --- /dev/null +++ b/app/src/main/res/layout/fragment_withdraw_record_gold.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_withdraw_record_gold_item.xml b/app/src/main/res/layout/fragment_withdraw_record_gold_item.xml new file mode 100644 index 0000000..9e308d5 --- /dev/null +++ b/app/src/main/res/layout/fragment_withdraw_record_gold_item.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/vididinapp_feature_home_item_layout.xml b/app/src/main/res/layout/vididinapp_feature_home_item_layout.xml index c5776dd..2f1e7a4 100644 --- a/app/src/main/res/layout/vididinapp_feature_home_item_layout.xml +++ b/app/src/main/res/layout/vididinapp_feature_home_item_layout.xml @@ -15,13 +15,15 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" + android:clickable="false" android:layout_gravity="center"/> diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt index ae2f490..d31eefd 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt @@ -4,14 +4,18 @@ import android.app.Activity import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.Canvas import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.Settings +import android.view.View import android.widget.Toast import androidx.core.app.NotificationManagerCompat import com.ama.core.architecture.BaseApp import kotlin.random.Random +import androidx.core.graphics.createBitmap class AndroidUtil private constructor() { @@ -92,6 +96,31 @@ class AndroidUtil private constructor() { } + + fun getThumbOfView(targetView: View): Bitmap? { + targetView.isDrawingCacheEnabled = true + targetView.buildDrawingCache() + val bitmap = Bitmap.createBitmap(targetView.drawingCache) + targetView.isDrawingCacheEnabled = false + return bitmap + } + + + + fun getThumbOfView2(targetView: View): Bitmap { + if (targetView.width <= 0 || targetView.height <= 0) { + val widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + val heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + targetView.measure(widthSpec, heightSpec) + targetView.layout(0, 0, targetView.measuredWidth, targetView.measuredHeight) + } + + val bitmap = createBitmap(targetView.measuredWidth, targetView.measuredHeight) + val canvas = Canvas(bitmap) + targetView.draw(canvas) + return bitmap + } + } } \ No newline at end of file diff --git a/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomProgressBar.kt b/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomProgressBar.kt index 612bfff..d7a2aaa 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomProgressBar.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomProgressBar.kt @@ -4,6 +4,7 @@ import android.content.Context import android.graphics.Canvas import android.graphics.Paint import android.util.AttributeSet +import android.view.MotionEvent import android.view.View import androidx.core.graphics.withSave import com.ama.core.architecture.R @@ -57,4 +58,60 @@ class CustomProgressBar(context: Context, attrs: AttributeSet) : View(context, a mForColor = ResUtil.getColor(forColor) invalidate() } -} \ No newline at end of file + + + + + + //--------------------------- New added ---------------------------- + private var onProgressChangeListener: OnProgressChangeListener? = null + + override fun onTouchEvent(event: MotionEvent): Boolean { + when (event.action) { + MotionEvent.ACTION_DOWN -> { + parent.requestDisallowInterceptTouchEvent(true) + updateProgressFromTouch(event.x) + return true + } + MotionEvent.ACTION_MOVE -> { + updateProgressFromTouch(event.x) + return true + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { + parent.requestDisallowInterceptTouchEvent(false) + updateProgressFromTouch(event.x, true) + return true + } + } + return super.onTouchEvent(event) + } + + private fun updateProgressFromTouch(touchX: Float, notifyNewProgress: Boolean = false) { + val width = width.toFloat() + if (width > 0) { + var newProgress = (touchX / width * max).toInt() + newProgress = newProgress.coerceIn(0, max) + + if (newProgress != progress) { + setProgress(newProgress) + + if (notifyNewProgress) { + onProgressChangeListener?.onProgressChanged(newProgress) + } + } + } + } + + fun setOnProgressChangeListener(listener: OnProgressChangeListener) { + this.onProgressChangeListener = listener + } + + interface OnProgressChangeListener { + fun onProgressChanged(progress: Int) + } + + +} + + +