diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e75fe1d..cfe314e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -62,6 +62,7 @@ android:foregroundServiceType="specialUse" android:label="@string/app_name" android:permission="android.permission.BIND_VPN_SERVICE" + android:process=":engine" tools:ignore="VpnServicePolicy"> @@ -79,7 +80,8 @@ android:exported="true" android:icon="@drawable/ic_play_arrow" android:label="@string/app_name" - android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"> + android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" + android:process=":engine"> @@ -88,7 +90,8 @@ + android:exported="false" + android:process=":engine" /> diff --git a/app/src/main/java/com/clearpath/xray_compose/data/db/AppDatabase.kt b/app/src/main/java/com/clearpath/xray_compose/data/db/AppDatabase.kt index 2a4f14a..ad62514 100644 --- a/app/src/main/java/com/clearpath/xray_compose/data/db/AppDatabase.kt +++ b/app/src/main/java/com/clearpath/xray_compose/data/db/AppDatabase.kt @@ -30,7 +30,9 @@ abstract class AppDatabase : RoomDatabase() { context.applicationContext, AppDatabase::class.java, "app_database" - ).build().also { INSTANCE = it } + ) + .enableMultiInstanceInvalidation() + .build().also { INSTANCE = it } } } diff --git a/app/src/main/java/com/clearpath/xray_compose/data/repo/ConfigStoreModule.kt b/app/src/main/java/com/clearpath/xray_compose/data/repo/ConfigStoreModule.kt index 0a96cb9..844cba9 100644 --- a/app/src/main/java/com/clearpath/xray_compose/data/repo/ConfigStoreModule.kt +++ b/app/src/main/java/com/clearpath/xray_compose/data/repo/ConfigStoreModule.kt @@ -1,9 +1,17 @@ package com.clearpath.xray_compose.data.repo import android.content.Context -import androidx.datastore.dataStore +import androidx.datastore.core.DataStore +import androidx.datastore.core.MultiProcessDataStoreFactory +import androidx.datastore.dataStoreFile +import com.clearpath.xray_compose.data.ConfigItem -val Context.configDataStore by dataStore( - fileName = "config.json", - serializer = ConfigItemSerializer -) \ No newline at end of file +private var INSTANCE: DataStore? = null + +val Context.configDataStore: DataStore + get() = INSTANCE ?: synchronized(MultiProcessDataStoreFactory::class.java) { + INSTANCE ?: MultiProcessDataStoreFactory.create( + serializer = ConfigItemSerializer, + produceFile = { this.applicationContext.dataStoreFile("config.json") } + ).also { INSTANCE = it } + } diff --git a/app/src/main/java/com/clearpath/xray_compose/data/repo/PreferencesStoreModule.kt b/app/src/main/java/com/clearpath/xray_compose/data/repo/PreferencesStoreModule.kt index 4270cc3..fbbc581 100644 --- a/app/src/main/java/com/clearpath/xray_compose/data/repo/PreferencesStoreModule.kt +++ b/app/src/main/java/com/clearpath/xray_compose/data/repo/PreferencesStoreModule.kt @@ -1,6 +1,20 @@ package com.clearpath.xray_compose.data.repo import android.content.Context -import androidx.datastore.preferences.preferencesDataStore +import androidx.datastore.core.DataStore +import androidx.datastore.core.MultiProcessDataStoreFactory +import androidx.datastore.dataStoreFile +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.PreferencesFileSerializer -val Context.preferencesDataStore by preferencesDataStore(name = "config.preferences_pb") \ No newline at end of file +private var INSTANCE: DataStore? = null + +val Context.preferencesDataStore: DataStore + get() = INSTANCE ?: synchronized(MultiProcessDataStoreFactory::class.java) { + INSTANCE ?: MultiProcessDataStoreFactory.create( + serializer = PreferencesFileSerializer, + produceFile = { + this.applicationContext.dataStoreFile("config.preferences_pb") + } + ).also { INSTANCE = it } + } \ No newline at end of file