Fix Automatic update subscriptions

This commit is contained in:
2dust committed 2023-11-13 18:00:00 +08:00
1 parent 13f855e3c4
commit 6b28208044
5 files changed
+27 -49

No files matched your search

@@ -94,7 +94,7 @@ object AppConfig {
// subscription settings // subscription settings
const val SUBSCRIPTION_AUTO_UPDATE = "pref_auto_update_subscription" const val SUBSCRIPTION_AUTO_UPDATE = "pref_auto_update_subscription"
const val SUBSCRIPTION_AUTO_UPDATE_INTERVAL = "pref_auto_update_interval" const val SUBSCRIPTION_AUTO_UPDATE_INTERVAL = "pref_auto_update_interval"
const val DEFAULT_UPDATE_INTERVAL = "1440" // 24 hours const val SUBSCRIPTION_DEFAULT_UPDATE_INTERVAL = "1440" // 24 hours
const val UPDATE_TASK_NAME = "subscription-updater" const val SUBSCRIPTION_UPDATE_TASK_NAME = "subscription_updater"
} }
@@ -14,13 +14,10 @@ import androidx.work.multiprocess.RemoteWorkManager
import com.v2ray.ang.AngApplication import com.v2ray.ang.AngApplication
import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig
import com.v2ray.ang.R import com.v2ray.ang.R
import com.v2ray.ang.dto.AngConfig
import com.v2ray.ang.service.SubscriptionUpdater import com.v2ray.ang.service.SubscriptionUpdater
import com.v2ray.ang.util.Utils import com.v2ray.ang.util.Utils
import com.v2ray.ang.viewmodel.SettingsViewModel import com.v2ray.ang.viewmodel.SettingsViewModel
import java.sql.Time
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import kotlin.time.toDuration
class SettingsActivity : BaseActivity() { class SettingsActivity : BaseActivity() {
private val settingsViewModel: SettingsViewModel by viewModels() private val settingsViewModel: SettingsViewModel by viewModels()
@@ -81,7 +78,7 @@ class SettingsActivity : BaseActivity() {
autoUpdateInterval?.setOnPreferenceChangeListener { _, any -> autoUpdateInterval?.setOnPreferenceChangeListener { _, any ->
val nval = any as String val nval = any as String
autoUpdateInterval?.summary = autoUpdateInterval?.summary =
if (TextUtils.isEmpty(nval) or (nval.toLong() < 15)) AppConfig.DEFAULT_UPDATE_INTERVAL else nval if (TextUtils.isEmpty(nval) or (nval.toLong() < 15)) AppConfig.SUBSCRIPTION_DEFAULT_UPDATE_INTERVAL else nval
configureUpdateTask(nval.toLong()) configureUpdateTask(nval.toLong())
false false
} }
@@ -180,7 +177,7 @@ class SettingsActivity : BaseActivity() {
httpPort?.summary = defaultSharedPreferences.getString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP) httpPort?.summary = defaultSharedPreferences.getString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP)
updateMux(defaultSharedPreferences.getBoolean(AppConfig.PREF_MUX_ENABLED, false)) updateMux(defaultSharedPreferences.getBoolean(AppConfig.PREF_MUX_ENABLED, false))
muxXudpConcurrency?.summary = defaultSharedPreferences.getString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") muxXudpConcurrency?.summary = defaultSharedPreferences.getString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8")
autoUpdateInterval?.summary = defaultSharedPreferences.getString(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL,AppConfig.DEFAULT_UPDATE_INTERVAL) autoUpdateInterval?.summary = defaultSharedPreferences.getString(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL,AppConfig.SUBSCRIPTION_DEFAULT_UPDATE_INTERVAL)
if (TextUtils.isEmpty(remoteDnsString)) { if (TextUtils.isEmpty(remoteDnsString)) {
remoteDnsString = AppConfig.DNS_AGENT remoteDnsString = AppConfig.DNS_AGENT
@@ -233,9 +230,9 @@ class SettingsActivity : BaseActivity() {
private fun configureUpdateTask(interval: Long) { private fun configureUpdateTask(interval: Long) {
val rw = RemoteWorkManager.getInstance(AngApplication.application) val rw = RemoteWorkManager.getInstance(AngApplication.application)
rw.cancelUniqueWork(AppConfig.UPDATE_TASK_NAME) rw.cancelUniqueWork(AppConfig.SUBSCRIPTION_UPDATE_TASK_NAME)
rw.enqueueUniquePeriodicWork( rw.enqueueUniquePeriodicWork(
AppConfig.UPDATE_TASK_NAME, AppConfig.SUBSCRIPTION_UPDATE_TASK_NAME,
ExistingPeriodicWorkPolicy.UPDATE, ExistingPeriodicWorkPolicy.UPDATE,
PeriodicWorkRequest.Builder( PeriodicWorkRequest.Builder(
SubscriptionUpdater.UpdateTask::class.java, SubscriptionUpdater.UpdateTask::class.java,
@@ -255,7 +252,8 @@ class SettingsActivity : BaseActivity() {
private fun cancelUpdateTask() { private fun cancelUpdateTask() {
val rw = RemoteWorkManager.getInstance(AngApplication.application) val rw = RemoteWorkManager.getInstance(AngApplication.application)
rw.cancelUniqueWork(AppConfig.UPDATE_TASK_NAME) rw.cancelUniqueWork(AppConfig.SUBSCRIPTION_UPDATE_TASK_NAME)
}
private fun updateMux(enabled: Boolean) { private fun updateMux(enabled: Boolean) {
val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()) val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity())
@@ -40,6 +40,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
AppConfig.PREF_V2RAY_ROUTING_AGENT, AppConfig.PREF_V2RAY_ROUTING_AGENT,
AppConfig.PREF_V2RAY_ROUTING_BLOCKED, AppConfig.PREF_V2RAY_ROUTING_BLOCKED,
AppConfig.PREF_V2RAY_ROUTING_DIRECT, AppConfig.PREF_V2RAY_ROUTING_DIRECT,
AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL,
AppConfig.PREF_MUX_XUDP_QUIC, -> { AppConfig.PREF_MUX_XUDP_QUIC, -> {
settingsStorage?.encode(key, sharedPreferences.getString(key, "")) settingsStorage?.encode(key, sharedPreferences.getString(key, ""))
} }
@@ -53,6 +54,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
AppConfig.PREF_BYPASS_APPS, AppConfig.PREF_BYPASS_APPS,
AppConfig.PREF_CONFIRM_REMOVE, AppConfig.PREF_CONFIRM_REMOVE,
AppConfig.PREF_START_SCAN_IMMEDIATE, AppConfig.PREF_START_SCAN_IMMEDIATE,
AppConfig.SUBSCRIPTION_AUTO_UPDATE,
AppConfig.PREF_MUX_ENABLED, -> { AppConfig.PREF_MUX_ENABLED, -> {
settingsStorage?.encode(key, sharedPreferences.getBoolean(key, false)) settingsStorage?.encode(key, sharedPreferences.getBoolean(key, false))
} }
+5 -1
View File
@@ -172,6 +172,10 @@
<string name="title_pref_promotion">Promotion</string> <string name="title_pref_promotion">Promotion</string>
<string name="summary_pref_promotion">Promotion,click for details(Donation can be removed)</string> <string name="summary_pref_promotion">Promotion,click for details(Donation can be removed)</string>
<string name="title_pref_auto_update_subscription">Automatic update subscriptions</string>
<string name="summary_pref_auto_update_subscription">Update your subscriptions automatically with an interval in background</string>
<string name="title_pref_auto_update_interval">Subscription Auto Update Interval (Minutes)</string>
<string name="title_core_loglevel">Log Level</string> <string name="title_core_loglevel">Log Level</string>
<string name="title_mode">Mode</string> <string name="title_mode">Mode</string>
<string name="title_mode_help">Click me for more help</string> <string name="title_mode_help">Click me for more help</string>
@@ -190,7 +194,7 @@
<string name="sub_setting_remarks">remarks</string> <string name="sub_setting_remarks">remarks</string>
<string name="sub_setting_url">Optional URL</string> <string name="sub_setting_url">Optional URL</string>
<string name="sub_setting_enable">enable update</string> <string name="sub_setting_enable">enable update</string>
<string name="sub_auto_update">Auto update</string> <string name="sub_auto_update">Automatic update</string>
<string name="title_sub_update">Update subscription</string> <string name="title_sub_update">Update subscription</string>
<string name="title_ping_all_server">Tcping all configuration</string> <string name="title_ping_all_server">Tcping all configuration</string>
<string name="title_real_ping_all_server">Real delay all configuration</string> <string name="title_real_ping_all_server">Real delay all configuration</string>
+12 -38
View File
@@ -78,6 +78,18 @@
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/title_sub_setting">
<CheckBoxPreference
android:key="pref_auto_update_subscription"
android:summary="@string/summary_pref_auto_update_subscription"
android:title="@string/title_pref_auto_update_subscription" />
<EditTextPreference
android:key="pref_auto_update_interval"
android:summary="1440"
android:inputType="number"
android:title="@string/title_pref_auto_update_interval" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/title_ui_settings"> <PreferenceCategory android:title="@string/title_ui_settings">
<CheckBoxPreference <CheckBoxPreference
android:key="pref_speed_enabled" android:key="pref_speed_enabled"
@@ -162,42 +174,4 @@
android:title="@string/title_mode" /> android:title="@string/title_mode" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="Subscription">
<CheckBoxPreference
android:key="pref_auto_update_subscription"
android:summary="Update your subscriptions automatically with an interval in background"
android:title="Automatic update subscriptions" />
<EditTextPreference
android:key="pref_auto_update_interval"
android:summary="1440 min"
android:inputType="number"
android:title="Subscription Update Interval (Minutes)" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/title_ui_settings">
<CheckBoxPreference
android:key="pref_confirm_remove"
android:summary="@string/summary_pref_confirm_remove"
android:title="@string/title_pref_confirm_remove" />
<CheckBoxPreference
android:key="pref_start_scan_immediate"
android:summary="@string/summary_pref_start_scan_immediate"
android:title="@string/title_pref_start_scan_immediate" />
<ListPreference
android:defaultValue="auto"
android:entries="@array/language_select"
android:entryValues="@array/language_select_value"
android:key="pref_language"
android:summary="%s"
android:title="@string/title_language" />
</PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>