From ae745858fc5ad3e5d72de69c5e3c264212f61434 Mon Sep 17 00:00:00 2001 From: ocean <503259349@qq.com> Date: Mon, 15 Jul 2024 15:02:11 +0800 Subject: [PATCH] =?UTF-8?q?a=E9=9D=A2=E6=B7=BB=E5=8A=A0=E8=A7=82=E5=AF=9Fr?= =?UTF-8?q?emoteConfig=E6=98=AF=E5=90=A6=E6=9C=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E3=80=82=E5=88=A4=E6=96=AD=E8=BF=9B=E5=85=A5?= =?UTF-8?q?B=E9=9D=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../offline/music/activity/BaseActivity.kt | 76 ++++++++++++++++++- .../offline/music/activity/MainActivity.kt | 14 +++- .../music/activity/PlayDetailsActivity.kt | 9 +++ .../offline/music/firebase/RemoteConfig.kt | 13 ++-- .../offline/music/service/ViewModelMain.kt | 7 ++ 5 files changed, 110 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/melody/offline/music/activity/BaseActivity.kt b/app/src/main/java/melody/offline/music/activity/BaseActivity.kt index 62dece8..3efcb65 100644 --- a/app/src/main/java/melody/offline/music/activity/BaseActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/BaseActivity.kt @@ -2,9 +2,16 @@ package melody.offline.music.activity import android.os.Bundle 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?) { super.onCreate(savedInstanceState) @@ -13,4 +20,69 @@ open class BaseActivity : AppCompatActivity() { override fun 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 + } } \ No newline at end of file diff --git a/app/src/main/java/melody/offline/music/activity/MainActivity.kt b/app/src/main/java/melody/offline/music/activity/MainActivity.kt index 0c4389b..45dc585 100644 --- a/app/src/main/java/melody/offline/music/activity/MainActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/MainActivity.kt @@ -9,6 +9,7 @@ import android.view.View import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction +import androidx.lifecycle.Observer import androidx.media3.common.Player import com.bumptech.glide.Glide 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.ImportFragment import melody.offline.music.media.LocalMediaControllerManager +import melody.offline.music.service.ViewModelMain import melody.offline.music.util.getAudioDurationFromAssets @@ -34,6 +36,12 @@ class MainActivity : BaseActivity() { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) initView() + ViewModelMain.dataRemote.observe(this) { + if (withPermission()) { + startActivity(Intent(this, PrimaryActivity::class.java)) + finish() + } + } } private fun initView() { @@ -127,7 +135,8 @@ class MainActivity : BaseActivity() { } updateProgressState() } else { - LocalMediaControllerManager.setupMedia(this@MainActivity, melody.offline.music.App.currentPlayingAudio!!, + LocalMediaControllerManager.setupMedia(this@MainActivity, + melody.offline.music.App.currentPlayingAudio!!, object : Player.Listener { override fun onPlayWhenReadyChanged( playWhenReady: Boolean, @@ -189,9 +198,10 @@ class MainActivity : BaseActivity() { binding.apply { homeImg.setImageResource( when (index) { - 0 ->{ + 0 -> { R.drawable.home_select_icon } + else -> R.drawable.home_unselect_icon } ) diff --git a/app/src/main/java/melody/offline/music/activity/PlayDetailsActivity.kt b/app/src/main/java/melody/offline/music/activity/PlayDetailsActivity.kt index a13efb1..780f9f7 100644 --- a/app/src/main/java/melody/offline/music/activity/PlayDetailsActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/PlayDetailsActivity.kt @@ -3,6 +3,7 @@ package melody.offline.music.activity import android.animation.ValueAnimator import android.annotation.SuppressLint import android.content.Context +import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Bundle @@ -25,6 +26,7 @@ import melody.offline.music.R import melody.offline.music.bean.Audio import melody.offline.music.databinding.ActivityPlayDetailsBinding import melody.offline.music.media.LocalMediaControllerManager +import melody.offline.music.service.ViewModelMain import melody.offline.music.util.LogTag import melody.offline.music.util.containsContent 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() } initView() + + ViewModelMain.dataRemote.observe(this) { + if (withPermission()) { + startActivity(Intent(this, PrimaryActivity::class.java)) + finish() + } + } } private fun initImmersionBar() { diff --git a/app/src/main/java/melody/offline/music/firebase/RemoteConfig.kt b/app/src/main/java/melody/offline/music/firebase/RemoteConfig.kt index 19a04da..04cc9e1 100644 --- a/app/src/main/java/melody/offline/music/firebase/RemoteConfig.kt +++ b/app/src/main/java/melody/offline/music/firebase/RemoteConfig.kt @@ -15,6 +15,7 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue import com.lol.apex.ok.google.adlibrary.LoLAds import melody.offline.music.App import melody.offline.music.BuildConfig +import melody.offline.music.service.ViewModelMain import melody.offline.music.sp.AppStore import melody.offline.music.util.LogTag import java.lang.ref.WeakReference @@ -64,11 +65,12 @@ class RemoteConfig { override fun onUpdate(configUpdate: ConfigUpdate) { LogTag.LogD(TAG, "Updated keys: " + configUpdate.updatedKeys) try { - if (configUpdate.updatedKeys.contains(Constants.KEY_SHOULD_ENTER_MUSIC_JSON)) { - mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task -> - if (task.isSuccessful) { - updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all) - } +// if (configUpdate.updatedKeys.contains(Constants.KEY_SHOULD_ENTER_MUSIC_JSON)) { +// +// } + mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task -> + if (task.isSuccessful) { + updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all) } } } catch (ignore: Exception) { @@ -115,6 +117,7 @@ class RemoteConfig { if (TextUtils.equals(Constants.KEY_SHOULD_ENTER_MUSIC_JSON, key)) { val shouldJson = value.asString() appStore.shouldEnterMusicPageJson = shouldJson + ViewModelMain.updateData(shouldJson) } if (TextUtils.equals(Constants.KEY_SHOW_AD_INTERVAL_TIME, key)) { val t = value.asLong() diff --git a/app/src/main/java/melody/offline/music/service/ViewModelMain.kt b/app/src/main/java/melody/offline/music/service/ViewModelMain.kt index 82adccf..162660b 100644 --- a/app/src/main/java/melody/offline/music/service/ViewModelMain.kt +++ b/app/src/main/java/melody/offline/music/service/ViewModelMain.kt @@ -1,9 +1,16 @@ package melody.offline.music.service +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.media3.exoplayer.offline.Download object ViewModelMain : ViewModel() { var modelDownloadsFlow = MutableLiveData>() + + private val _dataRemote = MutableLiveData() + val dataRemote: LiveData get() = _dataRemote + fun updateData(newData: String) { + _dataRemote.value = newData + } } \ No newline at end of file