a面添加观察remoteConfig是否有数据更新。判断进入B面。

This commit is contained in:
ocean 2024-07-15 15:02:11 +08:00
parent 9127cf77e1
commit ae745858fc
5 changed files with 110 additions and 9 deletions

View File

@ -2,9 +2,16 @@ package melody.offline.music.activity
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.LifecycleOwner
import melody.offline.music.http.getAppVersionCode
import melody.offline.music.http.getCountryCode
import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag
import org.json.JSONObject
open class BaseActivity : AppCompatActivity() { open class BaseActivity : AppCompatActivity(), LifecycleOwner {
protected val TAG = LogTag.VO_ACT_LOG
protected val appStore by lazy { AppStore(this) }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -13,4 +20,69 @@ open class BaseActivity : AppCompatActivity() {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
} }
fun withPermission(): Boolean {
//先判断当前配置的开关是否为true为false的话就直接进入A
val jsonString = appStore.shouldEnterMusicPageJson//得到配置的json
LogTag.LogD(TAG, "BaseActivity withPermission jsonString->${jsonString}")
val json = JSONObject(jsonString)
val versionCode = json.optInt("versionCode")//得到配置的code
val enter = json.optBoolean("enter")//得到配置的开关
val currentVersionCode = getAppVersionCode(this)//得到当前应用的code
//如果配置的code 等于 当前app的code则把配置赋值给shouldEnterMusicPage
if (versionCode.toLong() == currentVersionCode) {
appStore.shouldEnterMusicPage = enter
} else {
appStore.shouldEnterMusicPage = true
}
LogTag.LogD(TAG, "BaseActivity withPermission shouldEnterMusicPage->${appStore.shouldEnterMusicPage}")
if (!appStore.shouldEnterMusicPage) {
return false
}
// 不允许的国家代码
val restrictedCountries = setOf(
// "CN",
"HK",
"TW",
"JP",
"KR",
// "GB",
// "CH",
// "BE",
// "MO",
// "SG"
)
// 检查是否包含当前的国家代码
LogTag.LogD(TAG, "BaseActivity withPermission ipCountryCode->${appStore.ipCountryCode}")
if (appStore.ipCountryCode in restrictedCountries) {
return false
}
// 如果不在受限国家代码中,则继续其他检查
return withIso()
}
private fun withIso(): Boolean {
//460 || 461 China (People's Republic of)
//454 "Hong Kong, China"
//466 "Taiwan, China"
//440 || 441 Japan
//450 Korea (Republic of)
//234 || 235 United Kingdom of Great Britain and Northern Ireland
//228 Switzerland (Confederation of)
//206 Belgium
//455 "Macao, China"
//525 Singapore (Republic of)
val restrictedCountryCodes = setOf(
// "460",
// "461",
"454",
"466",
"440",
"441",
"450",
// "234", "235", "228", "206", "455", "525"
)
val currentCountryCode = getCountryCode(this)
return currentCountryCode !in restrictedCountryCodes
}
} }

View File

@ -9,6 +9,7 @@ import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.Observer
import androidx.media3.common.Player import androidx.media3.common.Player
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
@ -20,6 +21,7 @@ import melody.offline.music.databinding.ActivityMainBinding
import melody.offline.music.fragment.HomeFragment import melody.offline.music.fragment.HomeFragment
import melody.offline.music.fragment.ImportFragment import melody.offline.music.fragment.ImportFragment
import melody.offline.music.media.LocalMediaControllerManager import melody.offline.music.media.LocalMediaControllerManager
import melody.offline.music.service.ViewModelMain
import melody.offline.music.util.getAudioDurationFromAssets import melody.offline.music.util.getAudioDurationFromAssets
@ -34,6 +36,12 @@ class MainActivity : BaseActivity() {
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
initView() initView()
ViewModelMain.dataRemote.observe(this) {
if (withPermission()) {
startActivity(Intent(this, PrimaryActivity::class.java))
finish()
}
}
} }
private fun initView() { private fun initView() {
@ -127,7 +135,8 @@ class MainActivity : BaseActivity() {
} }
updateProgressState() updateProgressState()
} else { } else {
LocalMediaControllerManager.setupMedia(this@MainActivity, melody.offline.music.App.currentPlayingAudio!!, LocalMediaControllerManager.setupMedia(this@MainActivity,
melody.offline.music.App.currentPlayingAudio!!,
object : Player.Listener { object : Player.Listener {
override fun onPlayWhenReadyChanged( override fun onPlayWhenReadyChanged(
playWhenReady: Boolean, playWhenReady: Boolean,
@ -189,9 +198,10 @@ class MainActivity : BaseActivity() {
binding.apply { binding.apply {
homeImg.setImageResource( homeImg.setImageResource(
when (index) { when (index) {
0 ->{ 0 -> {
R.drawable.home_select_icon R.drawable.home_select_icon
} }
else -> R.drawable.home_unselect_icon else -> R.drawable.home_unselect_icon
} }
) )

View File

@ -3,6 +3,7 @@ package melody.offline.music.activity
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.os.Bundle import android.os.Bundle
@ -25,6 +26,7 @@ import melody.offline.music.R
import melody.offline.music.bean.Audio import melody.offline.music.bean.Audio
import melody.offline.music.databinding.ActivityPlayDetailsBinding import melody.offline.music.databinding.ActivityPlayDetailsBinding
import melody.offline.music.media.LocalMediaControllerManager import melody.offline.music.media.LocalMediaControllerManager
import melody.offline.music.service.ViewModelMain
import melody.offline.music.util.LogTag import melody.offline.music.util.LogTag
import melody.offline.music.util.containsContent import melody.offline.music.util.containsContent
import melody.offline.music.util.convertMillisToMinutesAndSecondsString import melody.offline.music.util.convertMillisToMinutesAndSecondsString
@ -54,6 +56,13 @@ class PlayDetailsActivity : BaseActivity() {
Toast.makeText(this, getString(R.string.data_error), Toast.LENGTH_SHORT).show() Toast.makeText(this, getString(R.string.data_error), Toast.LENGTH_SHORT).show()
} }
initView() initView()
ViewModelMain.dataRemote.observe(this) {
if (withPermission()) {
startActivity(Intent(this, PrimaryActivity::class.java))
finish()
}
}
} }
private fun initImmersionBar() { private fun initImmersionBar() {

View File

@ -15,6 +15,7 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue
import com.lol.apex.ok.google.adlibrary.LoLAds import com.lol.apex.ok.google.adlibrary.LoLAds
import melody.offline.music.App import melody.offline.music.App
import melody.offline.music.BuildConfig import melody.offline.music.BuildConfig
import melody.offline.music.service.ViewModelMain
import melody.offline.music.sp.AppStore import melody.offline.music.sp.AppStore
import melody.offline.music.util.LogTag import melody.offline.music.util.LogTag
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
@ -64,11 +65,12 @@ class RemoteConfig {
override fun onUpdate(configUpdate: ConfigUpdate) { override fun onUpdate(configUpdate: ConfigUpdate) {
LogTag.LogD(TAG, "Updated keys: " + configUpdate.updatedKeys) LogTag.LogD(TAG, "Updated keys: " + configUpdate.updatedKeys)
try { try {
if (configUpdate.updatedKeys.contains(Constants.KEY_SHOULD_ENTER_MUSIC_JSON)) { // if (configUpdate.updatedKeys.contains(Constants.KEY_SHOULD_ENTER_MUSIC_JSON)) {
mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task -> //
if (task.isSuccessful) { // }
updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all) mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task ->
} if (task.isSuccessful) {
updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all)
} }
} }
} catch (ignore: Exception) { } catch (ignore: Exception) {
@ -115,6 +117,7 @@ class RemoteConfig {
if (TextUtils.equals(Constants.KEY_SHOULD_ENTER_MUSIC_JSON, key)) { if (TextUtils.equals(Constants.KEY_SHOULD_ENTER_MUSIC_JSON, key)) {
val shouldJson = value.asString() val shouldJson = value.asString()
appStore.shouldEnterMusicPageJson = shouldJson appStore.shouldEnterMusicPageJson = shouldJson
ViewModelMain.updateData(shouldJson)
} }
if (TextUtils.equals(Constants.KEY_SHOW_AD_INTERVAL_TIME, key)) { if (TextUtils.equals(Constants.KEY_SHOW_AD_INTERVAL_TIME, key)) {
val t = value.asLong() val t = value.asLong()

View File

@ -1,9 +1,16 @@
package melody.offline.music.service package melody.offline.music.service
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.media3.exoplayer.offline.Download import androidx.media3.exoplayer.offline.Download
object ViewModelMain : ViewModel() { object ViewModelMain : ViewModel() {
var modelDownloadsFlow = MutableLiveData<Map<String, Download>>() var modelDownloadsFlow = MutableLiveData<Map<String, Download>>()
private val _dataRemote = MutableLiveData<String>()
val dataRemote: LiveData<String> get() = _dataRemote
fun updateData(newData: String) {
_dataRemote.value = newData
}
} }