mireo 1.2.2

This commit is contained in:
yuyl 2025-06-17 13:43:32 +08:00
parent d3a94a3bad
commit 02ffc22f4e
21 changed files with 397 additions and 118 deletions

View File

@ -1,13 +1,13 @@
{
"project_info": {
"project_number": "905575925094",
"project_id": "mireotv",
"storage_bucket": "mireotv.firebasestorage.app"
"project_number": "471869384808",
"project_id": "mireotv-a591b",
"storage_bucket": "mireotv-a591b.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:905575925094:android:01c39ac6692cb6bda974a7",
"mobilesdk_app_id": "1:471869384808:android:4d94f4dabe74aa7d0333dd",
"android_client_info": {
"package_name": "com.localee.mireo.shortapp"
}
@ -15,7 +15,7 @@
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyBAC_RDCSdtba_yMQ0oXjKTstaMe6WzHmc"
"current_key": "AIzaSyD3C1frcUVwdIGHbiWsuwlyJFRhi4huF8Y"
}
],
"services": {

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
@ -23,8 +22,7 @@
android:theme="@style/Theme.Example"
android:usesCleartextTraffic="true"
tools:ignore="AllowBackup,LockedOrientationActivity"
tools:replace="android:allowBackup,android:supportsRtl"
>
tools:replace="android:allowBackup,android:supportsRtl">
<meta-data
android:name="ScopedStorage"
@ -35,6 +33,7 @@
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
@ -46,48 +45,47 @@
android:resource="@xml/tu_seekbar" />
</provider>
<activity
<activity
android:name="com.localee.mireo.admins.OUnlockWarningActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.CNBFragmentSystemActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.YPulseColorsActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.EIPLineRecommendActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.EModuleCollectionActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.XZShortActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.admins.BSGButtonMavenActivity"
android:screenOrientation="portrait" />
<activity
<activity
android:name="com.localee.mireo.drama.probableAligning.savedIdctdsp.HEDDramaActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Theme.Splash"
>
android:theme="@style/Theme.Splash">
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
</activity>
@ -175,8 +173,7 @@
<activity
android:name="com.localee.mireo.app.ui.activity.VideoPlayActivity"
android:launchMode="singleTask"
/>
android:launchMode="singleTask" />
<activity
android:name="com.localee.mireo.app.ui.activity.SearchActivity"

View File

@ -64,5 +64,6 @@ class PaySettingsBean(
val auto_sub: String,
var vip_type: String,
var vip_type_key: String,
var corner_marker: String,
)
}

View File

@ -52,6 +52,7 @@ import com.localee.mireo.app.http.api.DeeplinkFbApi
import com.localee.mireo.app.http.api.DoLoginApi
import com.localee.mireo.app.http.api.EnterTheAppApi
import com.localee.mireo.app.http.api.FirebaseTokenApi
import com.localee.mireo.app.http.api.GooglePaidApi
import com.localee.mireo.app.http.api.LeaveAppApi
import com.localee.mireo.app.http.api.MessageSendReportApi
import com.localee.mireo.app.http.api.OnLineApi
@ -61,6 +62,8 @@ import com.localee.mireo.app.http.api.W2aApi
import com.localee.mireo.app.http.bean.HomeDataHistoryBean
import com.localee.mireo.app.http.bean.IncidentBean
import com.localee.mireo.app.http.bean.LoginBean
import com.localee.mireo.app.http.bean.PayBean
import com.localee.mireo.app.http.bean.PayResBean
import com.localee.mireo.app.http.bean.TranslatesBean
import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.Logger
@ -81,9 +84,14 @@ import com.localee.mireo.app.utils.NotificationUtils
import com.localee.mireo.app.utils.TranslatesUtils
import com.localee.mireo.app.utils.shouldShowNotification
import com.localee.mireo.app.utils.singleClick
import com.localee.mireo.app.utils.toMapViaGson
import com.localee.mireo.shortapp.R
import com.lxj.xpopup.XPopup
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.greenrobot.eventbus.EventBus
@ -142,6 +150,7 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener,
private var title = ""
private val viewModel: SharedViewModel by viewModels()
private val scope = CoroutineScope(Dispatchers.Main)
override fun getLayoutId(): Int {
return R.layout.home_activity
@ -359,6 +368,21 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener,
.toString()
)
}
//处理失败订单
llMain?.postDelayed({
if (MsMMKVUtils.getOrder().isNotEmpty()) {
val string = MsMMKVUtils.getOrder()
scope.launch {
flow {
for (item in string) {
emit(item)
}
}.onEach { item ->
restorePaid(item)
}.debounce(1000).collect {}
}
}
}, 3000)
}
override fun onNewIntent(intent: Intent?) {
@ -457,6 +481,26 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener,
})
}
fun restorePaid(data: PayBean) {
EasyHttp.post(this)
.api(GooglePaidApi())
.body(getPublicRequest(data.toMapViaGson()))
.request(object : HttpCallbackProxy<HttpData<PayResBean>>(this) {
override fun onHttpStart(api: IRequestApi) {
}
override fun onHttpSuccess(result: HttpData<PayResBean>) {
result.getData()?.let {
it.order_code?.let { it1 -> MsMMKVUtils.removeOrderString(it1) }
}
}
})
}
fun getActionPush() {
val sMap: MutableMap<String, String?> = LinkedHashMap()
// StringMap = getSortMap(StringMap);
@ -726,6 +770,7 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener,
)
needSave = true
w2aSelfAttribution(clipContent)
MsMMKVUtils.getMMKV().putString(MsConstants.Constants_DDL_Url, "")
}
}
}

View File

@ -138,7 +138,7 @@ class MyVipActivity : AppActivity() {
}
return@singleClick
}
showDialog()
// showDialog()
vipData = mAdapter!!.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip
getCreateOrder(
CreateOrderReqBean(
@ -302,11 +302,10 @@ class MyVipActivity : AppActivity() {
purchase.orderId.toString(),
vipData?.price.toString()
)
payReq = examplePayReq
if (it.responseCode == BillingClient.BillingResponseCode.OK) {
lifecycleScope.launch {
googlePaid(examplePayReq)
payReq = examplePayReq
MsMMKVUtils.saveOrder(examplePayReq)
}
} else {
MsMMKVUtils.saveOrder(examplePayReq)
@ -431,8 +430,6 @@ class MyVipActivity : AppActivity() {
.api(CreateOrderApi())
.body(getPublicRequest(data.toMapViaGson()))
.request(object : HttpCallbackProxy<HttpData<CreateOrderApi.Bean>>(this) {
override fun onHttpStart(api: IRequestApi) {
}
override fun onHttpSuccess(result: HttpData<CreateOrderApi.Bean>) {
result.getData()?.let {
@ -449,9 +446,6 @@ class MyVipActivity : AppActivity() {
}
override fun onHttpFail(throwable: Throwable) {
super.onHttpFail(throwable)
}
})
}
@ -476,6 +470,7 @@ class MyVipActivity : AppActivity() {
getCustomerUser()
} ?: run {
payReq?.let { it1 -> MsMMKVUtils.saveOrder(it1) }
if (TranslatesUtils.translates() != null) {
toast(TranslatesUtils.translates()?.mireo_network_error.toString())
} else {

View File

@ -171,7 +171,7 @@ class StoreActivity : AppActivity() {
}
}
.onEach { item ->
googlePaid(item)
restorePaid(item)
}
.debounce(500)
.collect {}
@ -214,7 +214,6 @@ class StoreActivity : AppActivity() {
}
return@singleClick
}
showDialog()
if (type == 0) {
coinsData =
mCoinAdapter!!.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins
@ -339,11 +338,10 @@ class StoreActivity : AppActivity() {
purchase.orderId.toString(),
vipData?.price.toString()
)
payReq = examplePayReq
if (it.responseCode == BillingClient.BillingResponseCode.OK) {
lifecycleScope.launch {
googlePaid(examplePayReq)
payReq = examplePayReq
MsMMKVUtils.saveOrder(examplePayReq)
}
} else {
MsMMKVUtils.saveOrder(examplePayReq)
@ -537,8 +535,6 @@ class StoreActivity : AppActivity() {
.api(CreateOrderApi())
.body(getPublicRequest(data.toMapViaGson()))
.request(object : HttpCallbackProxy<HttpData<CreateOrderApi.Bean>>(this) {
override fun onHttpStart(api: IRequestApi) {
}
override fun onHttpSuccess(result: HttpData<CreateOrderApi.Bean>) {
result.getData()?.let {
@ -559,12 +555,6 @@ class StoreActivity : AppActivity() {
}
override fun onHttpFail(throwable: Throwable) {
super.onHttpFail(throwable)
}
override fun onHttpEnd(api: IRequestApi) {
}
})
}
@ -583,16 +573,43 @@ class StoreActivity : AppActivity() {
} else {
toast(getString(R.string.google_pay_success))
}
if (null != payReq) {
MsMMKVUtils.removeOrder(payReq)
}
if (it.is_backhaul == 1) {
// LogEventUtils.logEvent(
// ExampleAppConstants.LogEvent_af_app_recharge,
// it.data.money.toDouble(), "USD", "", order_code
// )
}
getCustomerUser()
isBuy = true
} ?: run {
payReq?.let { it1 -> MsMMKVUtils.saveOrder(it1) }
if (TranslatesUtils.translates() != null) {
toast(TranslatesUtils.translates()?.mireo_network_error.toString())
} else {
toast(getString(R.string.example_service_exception_please_try_again))
}
hideDialog()
}
}
})
}
fun restorePaid(data: PayBean) {
EasyHttp.post(this)
.api(GooglePaidApi())
.body(getPublicRequest(data.toMapViaGson()))
.request(object : HttpCallbackProxy<HttpData<PayResBean>>(this) {
override fun onHttpStart(api: IRequestApi) {
}
override fun onHttpSuccess(result: HttpData<PayResBean>) {
result.getData()?.let {
it.order_code?.let { it1 -> MsMMKVUtils.removeOrderString(it1) }
if (MsMMKVUtils.getOrder().size == 0) {
if (TranslatesUtils.translates() != null) {
toast(TranslatesUtils.translates()?.mireo_g_pay_success.toString())
} else {
toast(getString(R.string.google_pay_success))
}
getCustomerUser()
isBuy = true
}
} ?: run {
if (TranslatesUtils.translates() != null) {
@ -636,11 +653,10 @@ class StoreActivity : AppActivity() {
purchaseData?.orderId.toString(),
if (type == 0) coinsData?.price.toString() else vipData?.price.toString()
)
payReq = examplePayReq
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
lifecycleScope.launch {
googlePaid(examplePayReq)
payReq = examplePayReq
MsMMKVUtils.saveOrder(examplePayReq)
}
} else {
MsMMKVUtils.saveOrder(examplePayReq)

View File

@ -902,9 +902,9 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
revolution = "1080"
MsMMKVUtils.getMMKV()
.putInt(CONSTANTS_quality, 1080)
detailRefresh()
EventBus.getDefault().post(CONSTANTS_quality_refresh)
}
detailRefresh()
}
}
}
@ -1009,6 +1009,10 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
setDetailsRecommendation(it)
} ?: finish()
}
override fun onHttpFail(throwable: Throwable) {
finish()
}
})
}

View File

@ -33,6 +33,13 @@ class MyVipBuyAdapter : BaseQuickAdapter<PaySettingsBean.Vip, MyVipBuyAdapter.VH
holder.binding.tvMoney.text = item.price_google
holder.binding.tvDes.text = item.description
holder.binding.tvInfo.text = item.auto_sub
if (item.corner_marker.isNotEmpty()) {
holder.binding.tvHot.text = item.corner_marker
holder.binding.tvHot.visibility = View.VISIBLE
} else {
holder.binding.tvHot.visibility = View.INVISIBLE
}
if ((item?.send_coins ?: 0) > 0) {
holder.binding.tvExtra.text =
"+ ".plus(TranslatesUtils.translates()?.mireo_extra).plus(" ")

View File

@ -3,6 +3,8 @@ package com.localee.mireo.app.ui.dialog
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.text.Html
import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.AppCompatTextView
import com.hjq.shape.view.ShapeTextView
@ -171,4 +173,27 @@ object DialogUtils {
activateVIPDialog.show()
}
fun showStoreHint(context: Context) {
val storeHintDialog = StoreHintDialog(context)
val tv_content =
storeHintDialog.findViewById<AppCompatTextView>(R.id.tv_content)
val iv_close =
storeHintDialog.findViewById<AppCompatImageView>(R.id.iv_close)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tv_content?.text = Html.fromHtml(
TranslatesUtils.translates()?.mireo_pay_hint
?: context.getString(R.string.store_tips),
Html.FROM_HTML_MODE_COMPACT
)
} else {
tv_content?.text = Html.fromHtml(
TranslatesUtils.translates()?.mireo_pay_hint
?: context.getString(R.string.store_tips)
)
}
iv_close?.setOnClickListener { storeHintDialog.dismiss() }
storeHintDialog.show()
}
}

View File

@ -0,0 +1,32 @@
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.Window
import android.view.WindowManager
import android.widget.TextView
import com.localee.mireo.shortapp.R
class StoreHintDialog(context: Context) : Dialog(context) {
init {
init()
}
private fun init() {
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_store_hint)
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
window?.setLayout(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
window?.setGravity(Gravity.CENTER)
setCancelable(true)
}
}

View File

@ -59,7 +59,7 @@ class ExploreFragment : TitleBarFragment<HomeActivity>(),
private var exampleRecommendAdapter: ExampleRecommendAdapter? = null
private var data: com.localee.mireo.app.http.api.ExampleRecommendDataRes.Data? = null
private var revolution =
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 0).toString()
MsMMKVUtils.getMMKV().getInt(MsConstants.CONSTANTS_quality, 540).toString()
private val srRecommend: SmartRefreshLayout? by lazy { findViewById(R.id.sr_recommend) }
@ -85,10 +85,8 @@ class ExploreFragment : TitleBarFragment<HomeActivity>(),
)
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
// exampleTvNoNetwork?.text =
// TranslatesUtils.translates()?.mireo_no_network
tvExampleRetry?.text = TranslatesUtils.translates()?.mireo_retry
// exampleTvEmpty?.text = TranslatesUtils.translates()?.s_no_content
}
override fun initData() {

View File

@ -27,6 +27,7 @@ import com.localee.mireo.app.http.api.UserInfoRes
import com.localee.mireo.app.http.bean.RecommendBean
import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.MsConstants
import com.localee.mireo.app.other.MsConstants.CONSTANTS_quality
import com.localee.mireo.app.other.MsConstants.CONSTANTS_short_play_id
import com.localee.mireo.app.ui.activity.HomeActivity
import com.localee.mireo.app.ui.activity.SearchActivity
@ -473,7 +474,11 @@ class HomeFragment : TitleBarFragment<HomeActivity>(), HomeBannerAdapter.HomeBan
result.getData()?.let {
MsMMKVUtils.saveUserInfo(it)
var revolution =
MsMMKVUtils.getMMKV().getInt(CONSTANTS_quality, 540).toString()
if (revolution == "1080" && !MsMMKVUtils.isVip()) {
EventBus.getDefault().post(MsConstants.CONSTANTS_quality_refresh)
}
}
}
})
@ -539,7 +544,7 @@ class HomeFragment : TitleBarFragment<HomeActivity>(), HomeBannerAdapter.HomeBan
if (position == 0) {
getHomeVideoListApi(0, pageIndex, 15)
} else {
category?.get(position)?.id?.let { getHomeVideoListApi(it, 1, 15) }
category?.get(position - 1)?.id?.let { getHomeVideoListApi(it, 1, 15) }
}
return true
}
@ -557,7 +562,7 @@ class HomeFragment : TitleBarFragment<HomeActivity>(), HomeBannerAdapter.HomeBan
if (tabPosition == 0) {
getHomeVideoListApi(0, pageIndex, 15)
} else {
category?.get(tabPosition)?.id?.let { getHomeVideoListApi(it, pageIndex, 15) }
category?.get(tabPosition - 1)?.id?.let { getHomeVideoListApi(it, pageIndex, 15) }
}
}
}

View File

@ -15,7 +15,6 @@ import com.hjq.http.EasyHttp
import com.hjq.http.config.IRequestApi
import com.hjq.http.listener.HttpCallbackProxy
import com.hjq.shape.layout.ShapeLinearLayout
import com.localee.mireo.shortapp.R
import com.localee.mireo.app.action.StatusAction
import com.localee.mireo.app.app.TitleBarFragment
import com.localee.mireo.app.http.api.MyCollectionsApi
@ -32,6 +31,7 @@ import com.localee.mireo.app.utils.TranslatesUtils
import com.localee.mireo.app.utils.singleClick
import com.localee.mireo.app.widget.StatusLayout
import com.localee.mireo.app.widget.StatusLayout.OnRetryListener
import com.localee.mireo.shortapp.R
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
@ -76,9 +76,14 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
mAdapter = tabName?.let { LostTabAdapter(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it,"0") }
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
"0"
)
}
}
val layoutManager = GridLayoutManager(context, 3)
@ -133,10 +138,15 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
context?.resources?.getColor(R.color.example_color_d9d9d9)
?.let { tvDelete?.setTextColor(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it,"0") }
}else{
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
"0"
)
}
} else {
tvDelete?.text = "Delete (0)"
}
ivDelete?.setImageResource(R.mipmap.ic_list_detele_n)
@ -145,10 +155,15 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
?.intoBackground();
context?.resources?.getColor(R.color.example_color_F56490)
?.let { tvDelete?.setTextColor(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it, detailList.size.toString()) }
}else{
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
detailList.size.toString()
)
}
} else {
tvDelete?.text = "Delete (" + detailList.size + ")"
}
ivDelete?.setImageResource(R.mipmap.ic_list_detele_y)
@ -213,30 +228,36 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
fun setCancel() {
rlStatusRefresh?.setEnableRefresh(true)
val allData: List<HistoryBean.Data>? = mAdapter?.items
for (i in allData?.indices!!) {
llDelete?.visibility = View.GONE
llDelete?.shapeDrawableBuilder?.setStrokeColor(0xFF9D9D9D.toInt())
?.intoBackground();
val allData = mAdapter?.items
if (allData.isNullOrEmpty()) return
for (i in allData.indices) {
allData[i].is_check = false
}
detailList.clear()
mAdapter?.selectEdit = false
mAdapter?.notifyDataSetChanged()
llDelete?.visibility = View.GONE
llDelete?.shapeDrawableBuilder?.setStrokeColor(0xFF9D9D9D.toInt())
?.intoBackground();
context?.resources?.getColor(R.color.example_color_d9d9d9)
?.let { tvDelete?.setTextColor(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it, "0") }
}else{
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
"0"
)
}
} else {
tvDelete?.text = "Delete (0)"
}
ivDelete?.setImageResource(R.mipmap.ic_list_detele_n)
}
fun setAllSelect(isSelect: Boolean) {
val allData: List<HistoryBean.Data>? = mAdapter?.items
val allData = mAdapter?.items
if (allData.isNullOrEmpty()) return
if (isSelect) {
detailList.clear()
for (i in allData?.indices!!) {
@ -254,10 +275,15 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
?.intoBackground();
context?.resources?.getColor(R.color.example_color_d9d9d9)
?.let { tvDelete?.setTextColor(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it, "0") }
}else{
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
"0"
)
}
} else {
tvDelete?.text = "Delete (0)"
}
ivDelete?.setImageResource(R.mipmap.ic_list_detele_n)
@ -266,10 +292,15 @@ class ListTabFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListe
?.intoBackground();
context?.resources?.getColor(R.color.example_color_F56490)
?.let { tvDelete?.setTextColor(it) }
if (TranslatesUtils.translates() != null){
if (TranslatesUtils.translates() != null) {
tvDelete?.text =
TranslatesUtils.translates()?.mireo_list_delete?.let { TranslatesUtils.replace(it, detailList.size.toString()) }
}else{
TranslatesUtils.translates()?.mireo_list_delete?.let {
TranslatesUtils.replace(
it,
detailList.size.toString()
)
}
} else {
tvDelete?.text = "Delete (" + detailList.size + ")"
}
ivDelete?.setImageResource(R.mipmap.ic_list_detele_y)

View File

@ -473,11 +473,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
purchaseData?.orderId.toString(),
coinsData?.price.toString()
)
payReq = PayBean
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
lifecycleScope.launch {
googlePaid(PayBean)
MsMMKVUtils.saveOrder(PayBean)
payReq = PayBean
}
} else {
MsMMKVUtils.saveOrder(PayBean)
@ -512,7 +511,6 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
if (it.responseCode == BillingClient.BillingResponseCode.OK) {
lifecycleScope.launch {
googlePaid(PayBean)
MsMMKVUtils.saveOrder(PayBean)
payReq = PayBean
}
} else {
@ -605,6 +603,7 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
isPay = true
dismiss()
} ?: run {
payReq?.let { it1 -> MsMMKVUtils.saveOrder(it1) }
if (TranslatesUtils.translates() != null) {
ToastUtils.show(TranslatesUtils.translates()?.mireo_network_error.toString())
} else {

View File

@ -18,6 +18,7 @@ import android.webkit.WebResourceRequest
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.ImageView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.AppCompatTextView
@ -29,8 +30,6 @@ import com.hjq.http.EasyHttp
import com.hjq.http.config.IRequestApi
import com.hjq.http.listener.HttpCallbackProxy
import com.localee.mireo.app.action.StatusAction
import com.localee.mireo.app.widget.view.SimpleRatingBar
import com.localee.mireo.shortapp.R
import com.localee.mireo.app.app.TitleBarFragment
import com.localee.mireo.app.http.api.FirebaseTokenApi
import com.localee.mireo.app.http.api.OpenNotifyApi
@ -38,6 +37,7 @@ import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.AppConfig
import com.localee.mireo.app.other.MsConstants
import com.localee.mireo.app.ui.activity.HomeActivity
import com.localee.mireo.app.ui.dialog.DialogUtils
import com.localee.mireo.app.ui.dialog.GooglePlayRatingDialog
import com.localee.mireo.app.utils.DHStringUtils.getPublicRequest
import com.localee.mireo.app.utils.JsBridge
@ -47,6 +47,8 @@ import com.localee.mireo.app.utils.TranslatesUtils
import com.localee.mireo.app.utils.singleClick
import com.localee.mireo.app.widget.StatusLayout
import com.localee.mireo.app.widget.StatusLayout.OnRetryListener
import com.localee.mireo.app.widget.view.SimpleRatingBar
import com.localee.mireo.shortapp.R
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
@ -55,8 +57,9 @@ import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RewardFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener ,StatusAction{
class RewardFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener, StatusAction {
private val ivLeft: ImageView? by lazy { findViewById(R.id.iv_left) }
private val hintLayout: StatusLayout? by lazy { findViewById(R.id.hl_status_hint) }
private val rlStatusRefresh: SmartRefreshLayout? by lazy { findViewById(R.id.rl_status_refresh) }
private val web: WebView? by lazy { findViewById(R.id.web) }
@ -77,9 +80,17 @@ class RewardFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListen
rlStatusRefresh?.setOnRefreshLoadMoreListener(this)
rlStatusRefresh?.setEnableLoadMore(false)
web?.setBackgroundColor(Color.TRANSPARENT)
ivLeft?.setOnClickListener {
singleClick {
DialogUtils.showStoreHint(requireContext())
}
}
}
override fun initData() {
setWebView()
}
@ -95,14 +106,16 @@ class RewardFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListen
fun loadingData() {
showDialog()
if (NetworkUtils.isConnected()) {
web?.visibility = View.VISIBLE
showComplete()
loadPageUrl(MsConstants.REWARD_URL_RES)
} else {
web?.visibility = View.GONE
showErrorStatus()
}
}
fun showErrorStatus(){
fun showErrorStatus() {
showError(object : OnRetryListener {
override fun onRetry(layout: StatusLayout) {
singleClick {
@ -347,10 +360,6 @@ class RewardFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListen
}
override fun isStatusBarEnabled(): Boolean {
return !super.isStatusBarEnabled()
}
override fun onRefresh(refreshLayout: RefreshLayout) {
loadPageUrl(MsConstants.REWARD_URL_RES)
}

View File

@ -3,6 +3,8 @@ package com.localee.mireo.app.utils
import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import com.google.common.reflect.TypeToken
import com.google.gson.Gson
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
@ -25,7 +27,7 @@ fun <T> Any.standAsUnChecked(): T {
}
var lastClickTime = 0L
fun singleClick(during: Long = 500L, callBack: () -> Unit) {
fun singleClick(during: Long = 750L, callBack: () -> Unit) {
val now = Date().time
if (now - lastClickTime > during) {
callBack()
@ -171,3 +173,7 @@ fun dpToPx(dp: Int, context: Context): Int {
return (dp * context.resources.displayMetrics.density).toInt()
}
fun Any.toMapViaGson(): MutableMap<String, String?> {
val json = Gson().toJson(this)
return Gson().fromJson(json, object : TypeToken<MutableMap<String, String?>>() {}.type)
}

View File

@ -83,6 +83,13 @@ object MsMMKVUtils {
)
}
fun removeOrderString(order: String) {
val updatedList = getOrder().filterNot { it.order_code == order }
getMMKV().putString(
MsConstants.CONSTANTS_examplePayReq,
Gson().toJson(updatedList)
)
}
fun getOrder(): MutableList<PayBean> {
try {

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.hjq.shape.layout.ShapeFrameLayout
android:layout_width="@dimen/dp_304"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/cl"
app:layout_constraintEnd_toEndOf="@id/cl"
app:layout_constraintStart_toStartOf="@id/cl"
app:layout_constraintTop_toTopOf="@id/cl"
app:shape_radius="@dimen/dp_16"
app:shape_solidColor="#50d9d9d9" />
<net.center.blurview.ShapeBlurView
android:layout_width="@dimen/dp_304"
android:layout_height="0dp"
app:blur_border_color="#d9d9d9"
app:blur_corner_radius="16dp"
app:blur_mode="rectangle"
app:blur_radius="10dp"
app:layout_constraintBottom_toBottomOf="@id/cl"
app:layout_constraintEnd_toEndOf="@id/cl"
app:layout_constraintStart_toStartOf="@id/cl"
app:layout_constraintTop_toTopOf="@id/cl" />
<com.hjq.shape.layout.ShapeConstraintLayout
android:id="@+id/cl"
android:layout_width="@dimen/dp_304"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radius="@dimen/dp_16"
app:shape_solidColor="#95d9d9d9">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_350"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_10"
android:text="@string/store_tips"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/example_iv_icon" />
</androidx.core.widget.NestedScrollView>
</com.hjq.shape.layout.ShapeConstraintLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginTop="36dp"
android:src="@mipmap/ic_dialog_close"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,23 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smart.refresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_status_refresh"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/example_color_121418">
android:background="@color/example_color_121418"
android:orientation="vertical">
<com.localee.mireo.app.widget.StatusLayout
android:id="@+id/hl_status_hint"
<ImageView
android:id="@+id/iv_left"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:layout_gravity="end"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_10"
android:paddingHorizontal="@dimen/dp_15"
android:src="@mipmap/ic_list_more" />
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/rl_status_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web"
<com.localee.mireo.app.widget.StatusLayout
android:id="@+id/hl_status_hint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_30" />
android:layout_height="match_parent">
</com.localee.mireo.app.widget.StatusLayout>
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.localee.mireo.app.widget.StatusLayout>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</LinearLayout>

View File

@ -8,6 +8,22 @@
android:background="@mipmap/ic_vip_week_bg"
android:orientation="vertical">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_11"
android:paddingHorizontal="@dimen/dp_10"
android:paddingVertical="@dimen/dp_2"
android:text=""
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shape_radiusInBottomEnd="@dimen/dp_15"
app:shape_radiusInTopLeft="@dimen/dp_15"
app:shape_solidColor="@color/example_color_F56490" />
<TextView
android:id="@+id/tv_day"
@ -15,7 +31,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_32"
android:fontFamily="sans-serif-medium"
android:gravity="center_horizontal"
android:text="Weekly"
@ -30,7 +46,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_7"
android:layout_marginTop="@dimen/dp_6"
android:text="0"
android:textColor="#FFB69A"
android:textSize="@dimen/sp_19"

View File

@ -7,8 +7,8 @@ android {
defaultConfig {
minSdk 24
targetSdk 34
versionName '1.2.0'
versionCode 12
versionName '1.2.2'
versionCode 14
}
compileOptions {