Fix Automatic update subscriptions
This commit is contained in:
1 parent
29848053a4
commit
f25c0cc890
6 files changed
+40
-49
No files matched your search
@@ -1,29 +1,24 @@
|
|||||||
package com.v2ray.ang.service
|
package com.v2ray.ang.service
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.core.app.ActivityCompat
|
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.work.CoroutineWorker
|
import androidx.work.CoroutineWorker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.v2ray.ang.AppConfig
|
import com.v2ray.ang.AppConfig
|
||||||
import com.v2ray.ang.R
|
import com.v2ray.ang.R
|
||||||
import com.v2ray.ang.extension.toast
|
|
||||||
import com.v2ray.ang.util.AngConfigManager
|
import com.v2ray.ang.util.AngConfigManager
|
||||||
import com.v2ray.ang.util.MmkvManager
|
import com.v2ray.ang.util.MmkvManager
|
||||||
import com.v2ray.ang.util.Utils
|
import com.v2ray.ang.util.Utils
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
|
|
||||||
object SubscriptionUpdater {
|
object SubscriptionUpdater {
|
||||||
|
|
||||||
const val notificationChannel = "update-subscription-channel"
|
const val notificationChannel = "subscription_update_channel"
|
||||||
|
|
||||||
class UpdateTask(context: Context, params: WorkerParameters) :
|
class UpdateTask(context: Context, params: WorkerParameters) :
|
||||||
CoroutineWorker(context, params) {
|
CoroutineWorker(context, params) {
|
||||||
@@ -31,23 +26,20 @@ object SubscriptionUpdater {
|
|||||||
private val notificationManager = NotificationManagerCompat.from(applicationContext)
|
private val notificationManager = NotificationManagerCompat.from(applicationContext)
|
||||||
private val notification =
|
private val notification =
|
||||||
NotificationCompat.Builder(applicationContext, notificationChannel)
|
NotificationCompat.Builder(applicationContext, notificationChannel)
|
||||||
|
|
||||||
.setWhen(0)
|
.setWhen(0)
|
||||||
.setTicker("Update")
|
.setTicker("Update")
|
||||||
.setContentTitle("Subscription Update")
|
.setContentTitle(context.getString(R.string.title_pref_auto_update_subscription))
|
||||||
.setSmallIcon(R.drawable.ic_stat_name)
|
.setSmallIcon(R.drawable.ic_stat_name)
|
||||||
.setCategory(NotificationCompat.CATEGORY_SERVICE)
|
.setCategory(NotificationCompat.CATEGORY_SERVICE)
|
||||||
.setPriority(NotificationCompat.PRIORITY_MIN)
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
Log.d(AppConfig.ANG_PACKAGE, "start updating subscriptions")
|
Log.d(AppConfig.ANG_PACKAGE, "subscription automatic update starting")
|
||||||
|
|
||||||
|
|
||||||
val subs = MmkvManager.decodeSubscriptions().filter { it.second.autoUpdate }
|
val subs = MmkvManager.decodeSubscriptions().filter { it.second.autoUpdate }
|
||||||
|
|
||||||
for (i in subs) {
|
for (i in subs) {
|
||||||
|
|
||||||
val subscription = i.second
|
val subscription = i.second
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
@@ -61,7 +53,10 @@ object SubscriptionUpdater {
|
|||||||
notificationManager.createNotificationChannel(channel)
|
notificationManager.createNotificationChannel(channel)
|
||||||
}
|
}
|
||||||
notificationManager.notify(3, notification.build())
|
notificationManager.notify(3, notification.build())
|
||||||
Log.d(AppConfig.ANG_PACKAGE, "update: ${subscription.remarks} subscription")
|
Log.d(
|
||||||
|
AppConfig.ANG_PACKAGE,
|
||||||
|
"subscription automatic update: ---${subscription.remarks}"
|
||||||
|
)
|
||||||
val configs = Utils.getUrlContentWithCustomUserAgent(subscription.url)
|
val configs = Utils.getUrlContentWithCustomUserAgent(subscription.url)
|
||||||
importBatchConfig(configs, i.first)
|
importBatchConfig(configs, i.first)
|
||||||
notification.setContentText("Updating ${subscription.remarks}")
|
notification.setContentText("Updating ${subscription.remarks}")
|
||||||
@@ -72,10 +67,9 @@ object SubscriptionUpdater {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun importBatchConfig(server: String?, subid: String = "") {
|
fun importBatchConfig(server: String?, subid: String = "") {
|
||||||
|
val append = subid.isEmpty()
|
||||||
|
|
||||||
val append = subid.isNullOrEmpty()
|
val count = AngConfigManager.importBatchConfig(server, subid, append)
|
||||||
|
|
||||||
var count = AngConfigManager.importBatchConfig(server, subid, append)
|
|
||||||
if (count <= 0) {
|
if (count <= 0) {
|
||||||
AngConfigManager.importBatchConfig(Utils.decode(server!!), subid, append)
|
AngConfigManager.importBatchConfig(Utils.decode(server!!), subid, append)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,11 +243,7 @@ class SettingsActivity : BaseActivity() {
|
|||||||
.apply {
|
.apply {
|
||||||
setInitialDelay(interval, TimeUnit.MINUTES)
|
setInitialDelay(interval, TimeUnit.MINUTES)
|
||||||
}
|
}
|
||||||
.setConstraints(
|
.build()
|
||||||
Constraints(
|
|
||||||
NetworkType.CONNECTED,
|
|
||||||
)
|
|
||||||
).build()
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,28 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/layout_margin_top_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1.0"
|
||||||
|
android:text="@string/sub_auto_update" />
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatCheckBox
|
||||||
|
android:id="@+id/auto_update_check"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="2dp"
|
||||||
|
android:paddingEnd="6dp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -94,27 +116,6 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/layout_margin_top_height"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1.0"
|
|
||||||
android:text="@string/sub_auto_update" />
|
|
||||||
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatCheckBox
|
|
||||||
android:id="@+id/auto_update_check"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingStart="2dp"
|
|
||||||
android:paddingEnd="6dp" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -165,7 +165,7 @@
|
|||||||
<string name="summary_pref_promotion">一些推广,点击查看详情(捐赠可去除)</string>
|
<string name="summary_pref_promotion">一些推广,点击查看详情(捐赠可去除)</string>
|
||||||
|
|
||||||
<string name="title_pref_auto_update_subscription">自动更新订阅</string>
|
<string name="title_pref_auto_update_subscription">自动更新订阅</string>
|
||||||
<string name="summary_pref_auto_update_subscription">在后台按一定时间间隔自动更新您的订阅</string>
|
<string name="summary_pref_auto_update_subscription">在后台按一定时间间隔自动更新您的订阅。受设备影响,此功能不一定总是有效</string>
|
||||||
<string name="title_pref_auto_update_interval">订阅自动更新间隔(分钟)</string>
|
<string name="title_pref_auto_update_interval">订阅自动更新间隔(分钟)</string>
|
||||||
|
|
||||||
<string name="title_core_loglevel">日志级别</string>
|
<string name="title_core_loglevel">日志级别</string>
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
<string name="sub_setting_remarks">备注</string>
|
<string name="sub_setting_remarks">备注</string>
|
||||||
<string name="sub_setting_url">可选地址(url)</string>
|
<string name="sub_setting_url">可选地址(url)</string>
|
||||||
<string name="sub_setting_enable">启用更新</string>
|
<string name="sub_setting_enable">启用更新</string>
|
||||||
<string name="sub_auto_update">自动更新</string>
|
<string name="sub_auto_update">启用自动更新</string>
|
||||||
<string name="title_sub_update">更新订阅</string>
|
<string name="title_sub_update">更新订阅</string>
|
||||||
<string name="title_ping_all_server">测试全部配置Tcping</string>
|
<string name="title_ping_all_server">测试全部配置Tcping</string>
|
||||||
<string name="title_real_ping_all_server">测试全部配置真连接</string>
|
<string name="title_real_ping_all_server">测试全部配置真连接</string>
|
||||||
|
|||||||
@@ -165,7 +165,7 @@
|
|||||||
<string name="summary_pref_promotion">一些推廣,輕觸以檢視 (捐贈可去除)</string>
|
<string name="summary_pref_promotion">一些推廣,輕觸以檢視 (捐贈可去除)</string>
|
||||||
|
|
||||||
<string name="title_pref_auto_update_subscription">自動更新訂閱</string>
|
<string name="title_pref_auto_update_subscription">自動更新訂閱</string>
|
||||||
<string name="summary_pref_auto_update_subscription">在後台以一定時間間隔自動更新您的訂閱</string>
|
<string name="summary_pref_auto_update_subscription">在後台以一定時間間隔自動更新您的訂閱。受設備影響,此功能不一定總是有效</string>
|
||||||
<string name="title_pref_auto_update_interval">訂閱自動更新間隔(分鐘)</string>
|
<string name="title_pref_auto_update_interval">訂閱自動更新間隔(分鐘)</string>
|
||||||
|
|
||||||
<string name="title_core_loglevel">記錄層級</string>
|
<string name="title_core_loglevel">記錄層級</string>
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
<string name="sub_setting_remarks">備註</string>
|
<string name="sub_setting_remarks">備註</string>
|
||||||
<string name="sub_setting_url">Optional URL</string>
|
<string name="sub_setting_url">Optional URL</string>
|
||||||
<string name="sub_setting_enable">啟用更新</string>
|
<string name="sub_setting_enable">啟用更新</string>
|
||||||
<string name="sub_auto_update">自動更新</string>
|
<string name="sub_auto_update">啟用自動更新</string>
|
||||||
<string name="title_sub_update">更新訂閱</string>
|
<string name="title_sub_update">更新訂閱</string>
|
||||||
<string name="title_ping_all_server">偵測所有組態 Tcping</string>
|
<string name="title_ping_all_server">偵測所有組態 Tcping</string>
|
||||||
<string name="title_real_ping_all_server">偵測所有組態真延遲</string>
|
<string name="title_real_ping_all_server">偵測所有組態真延遲</string>
|
||||||
|
|||||||
@@ -173,7 +173,7 @@
|
|||||||
<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="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="summary_pref_auto_update_subscription">Update your subscriptions automatically with an interval in background. Depending on the device, this feature may not always work</string>
|
||||||
<string name="title_pref_auto_update_interval">Subscription Auto Update Interval (Minutes)</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>
|
||||||
@@ -193,8 +193,8 @@
|
|||||||
<string name="title_sub_setting">Subscription group setting</string>
|
<string name="title_sub_setting">Subscription group setting</string>
|
||||||
<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">Automatic update</string>
|
<string name="sub_auto_update">Enable 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>
|
||||||
|
|||||||
Reference in new issue
Block a user