diff --git a/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt b/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt index eca8c2e..03a6f8e 100644 --- a/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt +++ b/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt @@ -16,6 +16,9 @@ class TranslatesBean( ) data class Translates( + val mireo_unlock_vip: String, + val mireo_vip_splash_tip: String, + val mireo_vip_splash_title: String, val mireo_http_token_error: String, val mireo_http_server_out_time: String, val mireo_http_server_error: String, diff --git a/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt b/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt index c392714..2532a07 100644 --- a/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt +++ b/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt @@ -88,6 +88,7 @@ object MsConstants { const val ONE_DAY_IN_MILLIS_VIP = 60 * 60 * 1000L const val CONSTANTS_web_notification = "CONSTANTS_web_notification" const val CONSTANTS_SEARCH_STRING = "CONSTANTS_SEARCH_STRING" + const val CONSTANTS_PREF_LAST_POPUP_TIME_VIP = "CONSTANTS_PREF_LAST_POPUP_TIME_VIP" } \ No newline at end of file diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt index 8467158..c9e79b6 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt @@ -92,27 +92,6 @@ class LanguageSwitchActivity : AppActivity(), StatusAction { mAdapter?.notifyDataSetChanged() } - -// tvOk?.setOnClickListener { -// singleClick { -// if (isSystem) { -// val locale = when (Locale.getDefault().language) { -// "zh" -> when (Locale.getDefault().country) { -// "HK", "TW" -> "zh_hk" -// "CN" -> "zh" -// else -> Locale.getDefault().language -// } -// -// else -> Locale.getDefault().language -// } -// langKey = locale -// getTranslatesLanguageApi(langKey) -// } else { -// if (langKey.isEmpty()) return@singleClick -// getTranslatesLanguageApi(langKey) -// } -// } -// } } fun setLanguage() { diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt index 764e937..67c98a1 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt @@ -1176,6 +1176,9 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle override fun onHttpSuccess(result: HttpData) { } + + override fun onHttpFail(throwable: Throwable) { + } }) } diff --git a/app/src/main/java/com/localee/mireo/app/ui/adapter/HomeCriticallyAdapter.kt b/app/src/main/java/com/localee/mireo/app/ui/adapter/HomeCriticallyAdapter.kt index 3e51e68..19ba333 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/adapter/HomeCriticallyAdapter.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/adapter/HomeCriticallyAdapter.kt @@ -37,7 +37,7 @@ class HomeCriticallyAdapter : holder.binding.tvDescription.text = item.description holder.binding.tvScore.text = item.all_coins holder.binding.tvGood.text = item.watch_total?.let { formatNumber(it) } - if (item.category?.isNotEmpty() == true) { + if (item.category?.isNotEmpty() == true && item.category[0].isNotEmpty()) { holder.binding.tvFavor.visibility = View.VISIBLE holder.binding.tvFavor.text = item.category[0] } else { diff --git a/app/src/main/java/com/localee/mireo/app/ui/dialog/VipSplashDialog.kt b/app/src/main/java/com/localee/mireo/app/ui/dialog/VipSplashDialog.kt new file mode 100644 index 0000000..3a4e27b --- /dev/null +++ b/app/src/main/java/com/localee/mireo/app/ui/dialog/VipSplashDialog.kt @@ -0,0 +1,37 @@ +package com.localee.mireo.app.ui.dialog + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.Gravity +import android.view.LayoutInflater +import android.view.Window +import android.view.WindowManager +import com.localee.mireo.shortapp.databinding.DialogVipSplashBinding + +class VipSplashDialog (context: Context) : Dialog(context) { + private lateinit var binding: DialogVipSplashBinding + init { + init() + } + + private fun init() { + requestWindowFeature(Window.FEATURE_NO_TITLE) + binding = DialogVipSplashBinding.inflate(LayoutInflater.from(context)) + setContentView(binding.root) + + window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window?.setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.WRAP_CONTENT + ) + window?.setGravity(Gravity.CENTER) + setCancelable(false) + } + + fun getBinding(): DialogVipSplashBinding { + return binding + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt b/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt index 40bcf8e..2c9d60d 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt @@ -35,13 +35,16 @@ import com.localee.mireo.app.ui.activity.SettingActivity import com.localee.mireo.app.ui.activity.StoreActivity import com.localee.mireo.app.ui.activity.VideoPlayActivity import com.localee.mireo.app.ui.adapter.MeHistoryAdapter +import com.localee.mireo.app.ui.dialog.VipSplashDialog import com.localee.mireo.app.ui.videoPaly.ExampleUnFavoriteDialog import com.localee.mireo.app.utils.MsMMKVUtils import com.localee.mireo.app.utils.TranslatesUtils +import com.localee.mireo.app.utils.shouldShowVIP import com.localee.mireo.app.utils.singleClick import com.localee.mireo.app.utils.transToString import com.localee.mireo.app.widget.layout.SettingBar import com.localee.mireo.shortapp.R +import com.localee.mireo.shortapp.databinding.DialogVipSplashBinding import com.scwang.smart.refresh.layout.SmartRefreshLayout import com.scwang.smart.refresh.layout.api.RefreshLayout import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener @@ -74,6 +77,9 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener private val sbAbout: SettingBar? by lazy { findViewById(R.id.sb_about) } private val sbFeedback: SettingBar? by lazy { findViewById(R.id.sb_feedback) } private val sbLanguage: SettingBar? by lazy { findViewById(R.id.sb_language) } + private var vipSplashDialog: VipSplashDialog? = null + private var bind: DialogVipSplashBinding? = null + private var isVipSplash = false private var mAdapter: MeHistoryAdapter? = null @@ -218,7 +224,6 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener } } - } private var isDataLoaded = false @@ -229,6 +234,11 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener // isDataLoaded = true // } getMyHistory(1, 20) + rlStatusRefresh?.postDelayed({ + if (shouldShowVIP() && !MsMMKVUtils.isVip() && !isVipSplash) { + showVip() + } + }, 1000) } override fun onClick(view: View) { @@ -321,6 +331,35 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener exampleUnFavoriteDialog.show() } + private fun showVip() { + vipSplashDialog = VipSplashDialog(requireContext()) + bind = vipSplashDialog?.getBinding() + bind?.tvTitle?.text = TranslatesUtils.translates()?.mireo_vip_splash_title + bind?.tvTip?.text = TranslatesUtils.translates()?.mireo_vip_splash_tip + bind?.tvMember1?.text = TranslatesUtils.translates()?.mireo_store_ad_free + bind?.tvMember2?.text = TranslatesUtils.translates()?.mireo_store_exclusive + bind?.tvMember3?.text = TranslatesUtils.translates()?.mireo_store_free_coins + bind?.tvMember4?.text = TranslatesUtils.translates()?.mireo_store_only + bind?.tvVipBenefits?.text = TranslatesUtils.translates()?.mireo_unlock_vip + + bind?.ivClose?.setOnClickListener { + vipSplashDialog?.dismiss() + isVipSplash = false + } + bind?.tvVipBenefits?.setOnClickListener { + MsMMKVUtils.getMMKV().putLong( + MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP, + System.currentTimeMillis() + ) + startActivity(StoreActivity::class.java) + vipSplashDialog?.dismiss() + isVipSplash = false + } + vipSplashDialog?.show() + isVipSplash = true + } + + private fun getCustomerUser() { EasyHttp.get(this) .api(UserInfoApi().apply { diff --git a/app/src/main/java/com/localee/mireo/app/utils/ExampleStand.kt b/app/src/main/java/com/localee/mireo/app/utils/ExampleStand.kt index 6aa31ce..d8bdffd 100644 --- a/app/src/main/java/com/localee/mireo/app/utils/ExampleStand.kt +++ b/app/src/main/java/com/localee/mireo/app/utils/ExampleStand.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.content.Context import android.os.Build import com.localee.mireo.app.other.MsConstants +import com.localee.mireo.app.other.MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP +import com.localee.mireo.app.other.MsConstants.ONE_DAY_IN_MILLIS_VIP import java.text.SimpleDateFormat import java.time.Instant import java.time.LocalDateTime @@ -127,14 +129,14 @@ fun shouldShowNotification(): Boolean { return currentTime - lastPopupTime > MsConstants.ONE_DAY_IN_MILLIS } -// -//fun shouldShowVIP(): Boolean { -// val lastPopupTime = -// ExampleMMKVUtils.getMMKV().getLong(CONSTANTS_PREF_LAST_POPUP_TIME_VIP, 0) -// val currentTime = System.currentTimeMillis() -// -// return currentTime - lastPopupTime > ONE_DAY_IN_MILLIS_VIP -//} + +fun shouldShowVIP(): Boolean { + val lastPopupTime = + MsMMKVUtils.getMMKV().getLong(CONSTANTS_PREF_LAST_POPUP_TIME_VIP, 0) + val currentTime = System.currentTimeMillis() + + return currentTime - lastPopupTime > ONE_DAY_IN_MILLIS_VIP +} fun getUserAgent(): String { return System.getProperty("http.agent") ?: "" diff --git a/app/src/main/res/layout/activity_my_vip.xml b/app/src/main/res/layout/activity_my_vip.xml index 5bd2b62..af50aaa 100644 --- a/app/src/main/res/layout/activity_my_vip.xml +++ b/app/src/main/res/layout/activity_my_vip.xml @@ -178,12 +178,13 @@ android:id="@+id/tv_member_1" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_8" android:layout_marginTop="@dimen/dp_15" android:drawableTop="@mipmap/ic_vip_no_ads" android:drawablePadding="@dimen/dp_8" + android:maxLines="2" android:gravity="center_horizontal" - android:text="Ad-Free\nStreaming" + android:text="Ad-FreeStreaming" android:textColor="#c4c4c4" android:textSize="@dimen/sp_12" app:layout_constraintEnd_toStartOf="@+id/tv_member_2" @@ -197,8 +198,10 @@ android:layout_marginTop="@dimen/dp_15" android:drawableTop="@mipmap/ic_vip_free" android:drawablePadding="@dimen/dp_8" + android:layout_marginHorizontal="@dimen/dp_8" android:gravity="center_horizontal" - android:text="Exclusive\nEpisodes" + android:maxLines="2" + android:text="Exclusive Episodes" android:textColor="#c4c4c4" android:textSize="@dimen/sp_12" app:layout_constraintEnd_toStartOf="@+id/tv_member_3" @@ -213,7 +216,9 @@ android:drawableTop="@mipmap/ic_vip_exclusive" android:drawablePadding="@dimen/dp_8" android:gravity="center_horizontal" - android:text="Daily free\ncoins" + android:text="Daily free coins" + android:maxLines="2" + android:layout_marginHorizontal="@dimen/dp_8" android:textColor="#c4c4c4" android:textSize="@dimen/sp_12" app:layout_constraintEnd_toStartOf="@+id/tv_member_4" @@ -225,11 +230,12 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_15" - android:layout_marginEnd="@dimen/dp_10" android:drawableTop="@mipmap/ic_vip_only_coupons" android:drawablePadding="@dimen/dp_8" android:gravity="center_horizontal" - android:text="VIP-Only\nCoupons" + android:text="VIP-Only Coupons" + android:layout_marginHorizontal="@dimen/dp_8" + android:maxLines="2" android:textColor="#c4c4c4" android:textSize="@dimen/sp_12" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/activity_store.xml b/app/src/main/res/layout/activity_store.xml index 88ed8b9..d1237c9 100644 --- a/app/src/main/res/layout/activity_store.xml +++ b/app/src/main/res/layout/activity_store.xml @@ -29,9 +29,9 @@ app:layout_constraintTop_toTopOf="parent" app:leftIcon="@mipmap/iv_example_back" app:lineVisible="false" - app:title="Store" app:rightTitle="restore" app:rightTitleColor="@color/white" + app:title="Store" app:titleColor="@color/white" /> + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_vip_buy.xml b/app/src/main/res/layout/item_vip_buy.xml index 8506330..4707d7e 100644 --- a/app/src/main/res/layout/item_vip_buy.xml +++ b/app/src/main/res/layout/item_vip_buy.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cl_item" android:layout_width="@dimen/dp_310" - android:layout_height="@dimen/dp_160" + android:layout_height="@dimen/dp_165" android:layout_marginEnd="@dimen/dp_6" android:background="@mipmap/ic_vip_week_bg" android:orientation="vertical"> @@ -96,15 +96,18 @@ app:layout_constraintStart_toStartOf="@+id/tv_des" app:layout_constraintTop_toBottomOf="@+id/tv_info" /> - + app:layout_constraintEnd_toEndOf="parent" + app:shape_radiusInBottomRight="@dimen/dp_15" + app:shape_radiusInTopLeft="@dimen/dp_15" + app:shape_solidGradientEndColor="#FFE4CC" + app:shape_solidGradientStartColor="#FFDDBF"> - + diff --git a/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_while.webp b/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_while.webp new file mode 100644 index 0000000..452466b Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_while.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_exclusive_2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_exclusive_2.webp new file mode 100644 index 0000000..d93ccb4 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_exclusive_2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_free_2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_free_2.webp new file mode 100644 index 0000000..ccba049 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_free_2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_no_ads_2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_no_ads_2.webp new file mode 100644 index 0000000..faf1f44 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_no_ads_2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_only_coupons_2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_only_coupons_2.webp new file mode 100644 index 0000000..79d2fa3 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_only_coupons_2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_splash_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_splash_bg.webp new file mode 100644 index 0000000..c066bf2 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_splash_bg.webp differ diff --git a/common.gradle b/common.gradle index 744724f..59a1a9b 100644 --- a/common.gradle +++ b/common.gradle @@ -7,8 +7,8 @@ android { defaultConfig { minSdk 24 targetSdk 34 - versionName '1.1.1' - versionCode 9 + versionName '1.1.2' + versionCode 10 } compileOptions {