84ab54fea2
Introduce subscription-based server storage and migration from legacy KEY_ANG_CONFIGS. Added DEFAULT_SUBSCRIPTION_ID and new MmkvManager APIs to encode/decode server lists per subscription, decodeAllServerList, and readLegacyServerList; included helper getSubscriptionId and protection against deleting the default subscription. Refactored SettingsManager into initApp to ensure defaults, create a default subscription, initialize routing rulesets and perform server-list migration and other migrations. Updated callers (V2rayConfigManager, BackupActivity, GroupServerFragment, SubEditActivity, SubSettingRecyclerAdapter, TaskerActivity, MainViewModel) to use the new APIs and to handle subscriptionId where appropriate (including UI changes to hide delete for default subscription). Preserved legacy logic as commented references and added migration markers to avoid repeated migrations. Overall change enables grouping servers by subscription and provides a migration path for existing installations.
49 lines
1.3 KiB
Kotlin
49 lines
1.3 KiB
Kotlin
package com.v2ray.ang
|
|
|
|
import android.content.Context
|
|
import androidx.multidex.MultiDexApplication
|
|
import androidx.work.Configuration
|
|
import androidx.work.WorkManager
|
|
import com.tencent.mmkv.MMKV
|
|
import com.v2ray.ang.AppConfig.ANG_PACKAGE
|
|
import com.v2ray.ang.handler.SettingsManager
|
|
|
|
class AngApplication : MultiDexApplication() {
|
|
companion object {
|
|
lateinit var application: AngApplication
|
|
}
|
|
|
|
/**
|
|
* Attaches the base context to the application.
|
|
* @param base The base context.
|
|
*/
|
|
override fun attachBaseContext(base: Context?) {
|
|
super.attachBaseContext(base)
|
|
application = this
|
|
}
|
|
|
|
private val workManagerConfiguration: Configuration = Configuration.Builder()
|
|
.setDefaultProcessName("${ANG_PACKAGE}:bg")
|
|
.build()
|
|
|
|
/**
|
|
* Initializes the application.
|
|
*/
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
|
|
MMKV.initialize(this)
|
|
|
|
// Initialize WorkManager with the custom configuration
|
|
WorkManager.initialize(this, workManagerConfiguration)
|
|
|
|
// Ensure critical preference defaults are present in MMKV early
|
|
SettingsManager.initApp(this)
|
|
SettingsManager.setNightMode()
|
|
|
|
es.dmoral.toasty.Toasty.Config.getInstance()
|
|
.setGravity(android.view.Gravity.BOTTOM, 0, 300)
|
|
.apply()
|
|
}
|
|
}
|