diff --git a/app/src/main/java/com/github/kr328/clash/BaseActivity.kt b/app/src/main/java/com/github/kr328/clash/BaseActivity.kt index 0b01e1a..79c116a 100644 --- a/app/src/main/java/com/github/kr328/clash/BaseActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/BaseActivity.kt @@ -63,8 +63,8 @@ abstract class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope() var menu: Menu? = null lateinit var uiSettings: UiSettings private set - lateinit var language: String - lateinit var darkMode: String + private lateinit var language: String + private lateinit var darkMode: String open suspend fun onClashStarted() {} open suspend fun onClashStopped(reason: String?) {} diff --git a/app/src/main/java/com/github/kr328/clash/Constants.kt b/app/src/main/java/com/github/kr328/clash/Constants.kt index 9d9f0c9..a4a5caa 100644 --- a/app/src/main/java/com/github/kr328/clash/Constants.kt +++ b/app/src/main/java/com/github/kr328/clash/Constants.kt @@ -6,8 +6,6 @@ object Constants { const val LOG_DIR_NAME = "logs" - const val FILE_PROVIDER_AUTH = BuildConfig.APPLICATION_ID + ".files" - const val URL_PROVIDER_TYPE_FILE = "file" const val URL_PROVIDER_TYPE_URL = "url" const val URL_PROVIDER_TYPE_EXTERNAL = "external" diff --git a/app/src/main/java/com/github/kr328/clash/LogcatService.kt b/app/src/main/java/com/github/kr328/clash/LogcatService.kt index 7256aa3..3891cd2 100644 --- a/app/src/main/java/com/github/kr328/clash/LogcatService.kt +++ b/app/src/main/java/com/github/kr328/clash/LogcatService.kt @@ -12,7 +12,6 @@ import android.os.Binder import android.os.Build import android.os.IBinder import android.os.IInterface -import android.text.format.DateFormat import androidx.collection.CircularArray import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -24,13 +23,14 @@ import com.github.kr328.clash.service.IClashManager import com.github.kr328.clash.service.ipc.IStreamCallback import com.github.kr328.clash.service.ipc.ParcelableContainer import com.github.kr328.clash.service.util.intent +import com.github.kr328.clash.utils.format import com.github.kr328.clash.utils.logsDir import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.selects.select import java.io.FileWriter import java.io.IOException -import java.lang.Exception +import java.util.* import kotlin.math.max class LogcatService : Service(), CoroutineScope by MainScope(), IInterface { @@ -184,10 +184,9 @@ class LogcatService : Service(), CoroutineScope by MainScope(), IInterface { logsDir.mkdirs() try { FileWriter(logsDir.resolve(entity.fileName)).buffered().use { output -> - val dateFormat = DateFormat.getDateFormat(this@LogcatService) var offset = 0L - output.write("# Logcat on ${dateFormat.format(entity.date)}") + output.write("# Logcat on ${Date(entity.date).format(this@LogcatService)}") output.newLine() while (isActive) { diff --git a/app/src/main/java/com/github/kr328/clash/LogsActivity.kt b/app/src/main/java/com/github/kr328/clash/LogsActivity.kt index ac9d0d5..79dec24 100644 --- a/app/src/main/java/com/github/kr328/clash/LogsActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/LogsActivity.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.content.Intent import android.net.Uri import android.os.Bundle -import android.text.format.DateFormat import android.util.TypedValue import android.view.ViewGroup import androidx.annotation.ColorInt @@ -17,6 +16,7 @@ import com.github.kr328.clash.design.view.CommonUiLayout import com.github.kr328.clash.model.LogFile import com.github.kr328.clash.service.util.intent import com.github.kr328.clash.service.util.startForegroundServiceCompat +import com.github.kr328.clash.utils.format import com.github.kr328.clash.utils.logsDir import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.snackbar.Snackbar @@ -228,10 +228,8 @@ class LogsActivity : BaseActivity() { return val d = Date(file.date) - val date = DateFormat.getDateFormat(this) - val time = DateFormat.getTimeFormat(this) - val exportName = getString(R.string.format_export_log_name, date.format(d), time.format(d)) + val exportName = getString(R.string.format_export_log_name, d.format(this)) val intent = Intent(Intent.ACTION_CREATE_DOCUMENT) .setType("text/plain") diff --git a/app/src/main/java/com/github/kr328/clash/MainApplication.kt b/app/src/main/java/com/github/kr328/clash/MainApplication.kt index 16ce9d3..dd869e0 100644 --- a/app/src/main/java/com/github/kr328/clash/MainApplication.kt +++ b/app/src/main/java/com/github/kr328/clash/MainApplication.kt @@ -2,16 +2,12 @@ package com.github.kr328.clash import android.app.Application import android.content.Context -import android.content.res.Configuration import com.github.kr328.clash.core.Global -import com.github.kr328.clash.core.utils.Log -import com.github.kr328.clash.preference.UiSettings import com.github.kr328.clash.remote.Broadcasts import com.github.kr328.clash.remote.Remote import com.microsoft.appcenter.AppCenter import com.microsoft.appcenter.analytics.Analytics import com.microsoft.appcenter.crashes.Crashes -import java.util.* @Suppress("unused") class MainApplication : Application() { diff --git a/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt b/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt index f6b8b8b..f8d5956 100644 --- a/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt +++ b/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt @@ -8,7 +8,6 @@ import android.view.View import androidx.appcompat.widget.SearchView import androidx.recyclerview.widget.LinearLayoutManager import com.github.kr328.clash.adapter.PackagesAdapter -import com.github.kr328.clash.preference.UiSettings import com.github.kr328.clash.service.settings.ServiceSettings import kotlinx.android.synthetic.main.activity_access_control_packages.* import kotlinx.coroutines.* diff --git a/app/src/main/java/com/github/kr328/clash/adapter/LogAdapter.kt b/app/src/main/java/com/github/kr328/clash/adapter/LogAdapter.kt index d56062c..80410e8 100644 --- a/app/src/main/java/com/github/kr328/clash/adapter/LogAdapter.kt +++ b/app/src/main/java/com/github/kr328/clash/adapter/LogAdapter.kt @@ -1,7 +1,6 @@ package com.github.kr328.clash.adapter import android.content.Context -import android.text.format.DateFormat import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -9,6 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.github.kr328.clash.R import com.github.kr328.clash.core.event.LogEvent +import com.github.kr328.clash.utils.format import java.util.* class LogAdapter( @@ -19,11 +19,10 @@ class LogAdapter( private val level: TextView = view.findViewById(R.id.level) private val time: TextView = view.findViewById(R.id.time) private val payload: TextView = view.findViewById(R.id.payload) - private val timeFormat = DateFormat.getTimeFormat(view.context) fun bind(logEvent: LogEvent) { level.text = logEvent.level.toString() - time.text = timeFormat.format(Date(logEvent.time)) + time.text = Date(logEvent.time).format(itemView.context, includeDate = false) payload.text = logEvent.message } } diff --git a/app/src/main/java/com/github/kr328/clash/adapter/LogFileAdapter.kt b/app/src/main/java/com/github/kr328/clash/adapter/LogFileAdapter.kt index 50f1229..167447b 100644 --- a/app/src/main/java/com/github/kr328/clash/adapter/LogFileAdapter.kt +++ b/app/src/main/java/com/github/kr328/clash/adapter/LogFileAdapter.kt @@ -1,7 +1,6 @@ package com.github.kr328.clash.adapter import android.content.Context -import android.text.format.DateFormat import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -9,6 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.github.kr328.clash.R import com.github.kr328.clash.model.LogFile +import com.github.kr328.clash.utils.format import java.util.* class LogFileAdapter( @@ -18,9 +18,6 @@ class LogFileAdapter( ) : RecyclerView.Adapter() { var fileList: List = emptyList() - private val dateFormat = DateFormat.getDateFormat(context) - private val timeFormat = DateFormat.getTimeFormat(context) - class Holder(view: View) : RecyclerView.ViewHolder(view) { val root: View = view.findViewById(R.id.root) val fileName: TextView = view.findViewById(R.id.fileName) @@ -47,8 +44,7 @@ class LogFileAdapter( val date = Date(current.date) holder.fileName.text = current.fileName - holder.date.text = context.getString(R.string.format_date_time, - dateFormat.format(date), timeFormat.format(date)) + holder.date.text = date.format(context) holder.menu.setOnClickListener { onMenuClicked(current) } diff --git a/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt b/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt index 7c0a2ee..3d12061 100644 --- a/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt +++ b/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt @@ -10,7 +10,6 @@ import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.github.kr328.clash.R -import com.github.kr328.clash.core.utils.Log import com.google.android.material.checkbox.MaterialCheckBox import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/github/kr328/clash/preference/UiSettings.kt b/app/src/main/java/com/github/kr328/clash/preference/UiSettings.kt index db7d783..b8a2524 100644 --- a/app/src/main/java/com/github/kr328/clash/preference/UiSettings.kt +++ b/app/src/main/java/com/github/kr328/clash/preference/UiSettings.kt @@ -20,7 +20,7 @@ class UiSettings(context: Context): val PROXY_GROUP_SORT = StringEntry("proxy_group_sort", PROXY_SORT_DEFAULT) val PROXY_PROXY_SORT = StringEntry("proxy_proxy_sort", PROXY_SORT_DEFAULT) val PROXY_LAST_SELECT_GROUP = StringEntry("proxy_last_select_group", "") - val PROXY_MERGE_PREFIX = BooleanEntry("proxy_merge_prefix", true) + val PROXY_MERGE_PREFIX = BooleanEntry("proxy_merge_prefix", false) val LANGUAGE = StringEntry("language", "") val DARK_MODE = StringEntry("dark_mode", DARK_MODE_AUTO) } diff --git a/app/src/main/java/com/github/kr328/clash/remote/Broadcasts.kt b/app/src/main/java/com/github/kr328/clash/remote/Broadcasts.kt index c832fbc..9bf335c 100644 --- a/app/src/main/java/com/github/kr328/clash/remote/Broadcasts.kt +++ b/app/src/main/java/com/github/kr328/clash/remote/Broadcasts.kt @@ -5,13 +5,10 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.net.Uri import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner -import com.github.kr328.clash.service.Constants import com.github.kr328.clash.service.Intents -import com.github.kr328.clash.service.ServiceStatusProvider import com.github.kr328.clash.service.data.ClashProfileEntity object Broadcasts { diff --git a/app/src/main/java/com/github/kr328/clash/remote/Channels.kt b/app/src/main/java/com/github/kr328/clash/remote/Channels.kt deleted file mode 100644 index e1a800a..0000000 --- a/app/src/main/java/com/github/kr328/clash/remote/Channels.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.github.kr328.clash.remote - -import android.os.RemoteException -import com.github.kr328.clash.core.event.LogEvent -import com.github.kr328.clash.service.ipc.IStreamCallback -import com.github.kr328.clash.service.ipc.ParcelableContainer -import kotlinx.coroutines.channels.Channel - -class LogChannel : Channel by Channel(Channel.CONFLATED) { - fun createCallback(): IStreamCallback { - return object : IStreamCallback.Stub() { - override fun complete() { - close() - } - - override fun completeExceptionally(reason: String?) { - close(RemoteException(reason)) - } - - override fun send(data: ParcelableContainer?) { - try { - offer(data!!.data!! as LogEvent) - } catch (e: Exception) { - throw RemoteException(e.message) - } - } - } - } -} diff --git a/app/src/main/java/com/github/kr328/clash/settings/BehaviorFragment.kt b/app/src/main/java/com/github/kr328/clash/settings/BehaviorFragment.kt index 1a54c2e..24ba512 100644 --- a/app/src/main/java/com/github/kr328/clash/settings/BehaviorFragment.kt +++ b/app/src/main/java/com/github/kr328/clash/settings/BehaviorFragment.kt @@ -2,7 +2,6 @@ package com.github.kr328.clash.settings import android.content.pm.PackageManager import android.os.Bundle -import com.github.kr328.clash.BaseActivity import com.github.kr328.clash.OnBootReceiver import com.github.kr328.clash.R import com.github.kr328.clash.remote.Broadcasts diff --git a/app/src/main/java/com/github/kr328/clash/utils/DateUtils.kt b/app/src/main/java/com/github/kr328/clash/utils/DateUtils.kt new file mode 100644 index 0000000..ca87cd3 --- /dev/null +++ b/app/src/main/java/com/github/kr328/clash/utils/DateUtils.kt @@ -0,0 +1,25 @@ +package com.github.kr328.clash.utils + +import android.content.Context +import java.text.SimpleDateFormat +import java.util.* + +const val DATE_DATE_ONLY = "yyyy-MM-dd" +const val DATE_TIME_ONLY = "HH:mm:ss" +const val DATE_ALL = "$DATE_DATE_ONLY $DATE_TIME_ONLY" + +fun Date.format(context: Context, includeDate: Boolean = true, includeTime: Boolean = true, custom: String = ""): String { + val locale = context.resources.configuration.locales[0] + + return when { + custom.isNotEmpty() -> + SimpleDateFormat(custom, locale).format(this) + includeDate && includeTime -> + SimpleDateFormat(DATE_ALL, locale).format(this) + includeDate -> + SimpleDateFormat(DATE_DATE_ONLY, locale).format(this) + includeTime -> + SimpleDateFormat(DATE_TIME_ONLY, locale).format(this) + else -> "" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/kr328/clash/utils/IntervalUtils.kt b/app/src/main/java/com/github/kr328/clash/utils/IntervalUtils.kt index f9eeade..f9e7199 100644 --- a/app/src/main/java/com/github/kr328/clash/utils/IntervalUtils.kt +++ b/app/src/main/java/com/github/kr328/clash/utils/IntervalUtils.kt @@ -2,7 +2,6 @@ package com.github.kr328.clash.utils import android.content.Context import com.github.kr328.clash.R -import com.github.kr328.clash.core.Global object IntervalUtils { private const val MILLIS_SECOND = 1000L diff --git a/app/src/main/java/com/github/kr328/clash/utils/PrefixMerger.kt b/app/src/main/java/com/github/kr328/clash/utils/PrefixMerger.kt index 172da16..3365854 100644 --- a/app/src/main/java/com/github/kr328/clash/utils/PrefixMerger.kt +++ b/app/src/main/java/com/github/kr328/clash/utils/PrefixMerger.kt @@ -38,8 +38,9 @@ object PrefixMerger { for (group in groups) { var diffIndex = 0 + val size = group.map { it.first.length }.min() ?: 0 - diff@ for (charIndex in group[0].first.indices) { + diff@ for (charIndex in 0 until size) { for (stringIndex in 0 until (group.size - 1)) { if (group[stringIndex].first[charIndex] != group[stringIndex + 1].first[charIndex]) break@diff diff --git a/app/src/main/java/com/github/kr328/clash/utils/ProxySorter.kt b/app/src/main/java/com/github/kr328/clash/utils/ProxySorter.kt index ae2ffdc..1e6f3c0 100644 --- a/app/src/main/java/com/github/kr328/clash/utils/ProxySorter.kt +++ b/app/src/main/java/com/github/kr328/clash/utils/ProxySorter.kt @@ -5,7 +5,7 @@ import com.github.kr328.clash.core.model.ProxyGroup import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -class ProxySorter(val groupOrder: Order, val proxyOrder: Order) { +class ProxySorter(private val groupOrder: Order, private val proxyOrder: Order) { enum class Order { DEFAULT, DELAY_INCREASE, DELAY_DECREASE, NAME_INCREASE, NAME_DECREASE } diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 5fa4221..550190d 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -46,9 +46,8 @@ 外部 文件 文件已导出 - %s %s %d 天 - %s %s.log + %s.log %d 小时 %d 分钟 %d 月 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 474a7ff..586e603 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + Clash Clash for Android @@ -24,6 +24,7 @@ Unknown Recently + %d seconds %d minutes %d hours @@ -93,8 +94,7 @@ Clash Logcat History Log Viewer - %s %s - %s %s.log + %s.log Delete All Logs All historical logs will *LOST* diff --git a/build.gradle b/build.gradle index 9001405..d3366d6 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { gKotlinVersion = '1.3.61' gKotlinCoroutineVersion = '1.3.3' gKotlinSerializationVersion = '0.14.0' - gRoomVersion = '2.2.3' + gRoomVersion = '2.2.4' gAppCenterVersion = '2.5.1' gAndroidKtxVersion = "1.2.0" gLifecycleVersion = "2.2.0" diff --git a/buildSrc/src/main/java/GolangBindTask.kt b/buildSrc/src/main/java/GolangBindTask.kt index e091404..06e78b9 100644 --- a/buildSrc/src/main/java/GolangBindTask.kt +++ b/buildSrc/src/main/java/GolangBindTask.kt @@ -75,14 +75,14 @@ open class GolangBindTask : DefaultTask() { @TaskAction fun process() { - environment.put("GOPATH", goPath.absolutePath) - environment.put("ANDROID_HOME", findAndroidSdkPath().absolutePath) - environment.put("ANDROID_NDK_HOME", findAndroidNdkPath().absolutePath) + environment["GOPATH"] = goPath.absolutePath + environment["ANDROID_HOME"] = findAndroidSdkPath().absolutePath + environment["ANDROID_NDK_HOME"] = findAndroidNdkPath().absolutePath if (Os.isFamily(Os.FAMILY_WINDOWS)) - environment.put("Path", System.getenv("Path") + ";" + goPath.resolve("bin")) + environment["Path"] = System.getenv("Path") + ";" + goPath.resolve("bin") else - environment.put("PATH", System.getenv("PATH") + ":" + goPath.resolve("bin")) + environment["PATH"] = System.getenv("PATH") + ":" + goPath.resolve("bin") goPath.resolve("src/github.com/kr328").deleteRecursively() goBindPath.deleteRecursively() diff --git a/core/src/main/java/com/github/kr328/clash/core/Global.kt b/core/src/main/java/com/github/kr328/clash/core/Global.kt index 43b6714..b27c2cc 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Global.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Global.kt @@ -1,11 +1,9 @@ package com.github.kr328.clash.core import android.app.Application -import android.content.res.Configuration object Global { lateinit var application: Application - val overrideConfiguration = Configuration() fun init(application: Application) { this.application = application diff --git a/core/src/main/java/com/github/kr328/clash/core/event/ErrorEvent.kt b/core/src/main/java/com/github/kr328/clash/core/event/ErrorEvent.kt deleted file mode 100644 index 4e7d805..0000000 --- a/core/src/main/java/com/github/kr328/clash/core/event/ErrorEvent.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.github.kr328.clash.core.event - -import android.os.Parcel -import android.os.Parcelable -import com.github.kr328.clash.core.serialization.Parcels -import kotlinx.serialization.Serializable - -@Serializable -data class ErrorEvent(val type: Type, val message: String) : Event, Parcelable { - enum class Type { - PROFILE_LOAD, - START_FAILURE, - QUERY_PROXY_FAILURE, - SET_PROXY_SELECTED - } - - override fun writeToParcel(parcel: Parcel, flags: Int) { - Parcels.dump(serializer(), this, parcel) - } - - override fun describeContents(): Int { - return 0 - } - - companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): ErrorEvent { - return Parcels.load(serializer(), parcel) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } - } -} \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/event/Event.kt b/core/src/main/java/com/github/kr328/clash/core/event/Event.kt index 89cc9ca..31756e6 100644 --- a/core/src/main/java/com/github/kr328/clash/core/event/Event.kt +++ b/core/src/main/java/com/github/kr328/clash/core/event/Event.kt @@ -2,10 +2,4 @@ package com.github.kr328.clash.core.event import android.os.Parcelable -interface Event : Parcelable { - companion object { - const val EVENT_LOG = 1 - const val EVENT_TRAFFIC = 3 - const val EVENT_BANDWIDTH = 4 - } -} \ No newline at end of file +interface Event : Parcelable \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/event/LogEvent.kt b/core/src/main/java/com/github/kr328/clash/core/event/LogEvent.kt index c4eaf8c..12e40b6 100644 --- a/core/src/main/java/com/github/kr328/clash/core/event/LogEvent.kt +++ b/core/src/main/java/com/github/kr328/clash/core/event/LogEvent.kt @@ -10,14 +10,12 @@ data class LogEvent( val level: Level, val message: String, val time: Long = System.currentTimeMillis() -) : - Event { +): Event { companion object { const val DEBUG_VALUE = "debug" const val INFO_VALUE = "info" const val WARN_VALUE = "warning" const val ERROR_VALUE = "error" - const val UNKNOWN_VALUE = "unknown" @JvmField val CREATOR = object : Parcelable.Creator { diff --git a/core/src/main/java/com/github/kr328/clash/core/event/TrafficEvent.kt b/core/src/main/java/com/github/kr328/clash/core/event/TrafficEvent.kt deleted file mode 100644 index 630cfa9..0000000 --- a/core/src/main/java/com/github/kr328/clash/core/event/TrafficEvent.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.github.kr328.clash.core.event - -import android.os.Parcel -import android.os.Parcelable -import androidx.annotation.Keep -import com.github.kr328.clash.core.serialization.Parcels -import kotlinx.serialization.Serializable - -@Serializable -data class TrafficEvent(val down: Long, val up: Long) : Event, Parcelable { - override fun writeToParcel(parcel: Parcel, flags: Int) { - Parcels.dump(serializer(), this, parcel) - } - - override fun describeContents(): Int { - return 0 - } - - companion object { - @JvmField - @Keep - val CREATOR = object : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): TrafficEvent { - return Parcels.load(serializer(), parcel) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } - } - } -} \ No newline at end of file diff --git a/core/src/main/java/com/github/kr328/clash/core/utils/Log.kt b/core/src/main/java/com/github/kr328/clash/core/utils/Log.kt index c003b54..654235e 100644 --- a/core/src/main/java/com/github/kr328/clash/core/utils/Log.kt +++ b/core/src/main/java/com/github/kr328/clash/core/utils/Log.kt @@ -17,7 +17,4 @@ object Log { fun v(message: String, throwable: Throwable? = null) = android.util.Log.v(TAG, message, throwable) - - fun wtf(message: String, throwable: Throwable? = null) = - android.util.Log.wtf(TAG, message, throwable) } diff --git a/design/src/main/java/com/github/kr328/clash/design/common/CommonUiBuilder.kt b/design/src/main/java/com/github/kr328/clash/design/common/CommonUiBuilder.kt index f0659e1..e84009d 100644 --- a/design/src/main/java/com/github/kr328/clash/design/common/CommonUiBuilder.kt +++ b/design/src/main/java/com/github/kr328/clash/design/common/CommonUiBuilder.kt @@ -2,7 +2,6 @@ package com.github.kr328.clash.design.common import android.content.Context import android.graphics.drawable.Drawable -import android.view.View class CommonUiBuilder(val screen: CommonUiScreen) { val context: Context @@ -84,15 +83,4 @@ class CommonUiBuilder(val screen: CommonUiScreen) { screen.addElement(tips) } - - fun custom( - view: View, - setup: Custom.() -> Unit - ) { - val custom = Custom(screen, view) - - setup(custom) - - screen.addElement(custom) - } } \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/common/Custom.kt b/design/src/main/java/com/github/kr328/clash/design/common/Custom.kt deleted file mode 100644 index 96fb78a..0000000 --- a/design/src/main/java/com/github/kr328/clash/design/common/Custom.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.github.kr328.clash.design.common - -import android.os.Bundle -import android.view.View - -class Custom(screen: CommonUiScreen, override val view: View): Base(screen) { - private var saveStateHandler: (Bundle) -> Unit = {} - private var restoreStateHandler: (Bundle) -> Unit = {} - private var applyAttributeHandler: (Boolean, Boolean) -> Unit = - { enable, hidden -> super.applyAttribute(enable, hidden) } - - fun onSaveState(handler: (Bundle) -> Unit) { - this.saveStateHandler = handler - } - - fun onRestoreState(handler: (Bundle) -> Unit) { - this.restoreStateHandler = handler - } - - fun onApplyAttribute(handler: (Boolean, Boolean) -> Unit) { - this.applyAttributeHandler = handler - } - - override fun saveState(bundle: Bundle) { - saveStateHandler(bundle) - } - - override fun restoreState(bundle: Bundle) { - restoreStateHandler(bundle) - } -} \ No newline at end of file diff --git a/design/src/main/java/com/github/kr328/clash/design/common/TextInput.kt b/design/src/main/java/com/github/kr328/clash/design/common/TextInput.kt index a9448c3..47b916e 100644 --- a/design/src/main/java/com/github/kr328/clash/design/common/TextInput.kt +++ b/design/src/main/java/com/github/kr328/clash/design/common/TextInput.kt @@ -2,7 +2,6 @@ package com.github.kr328.clash.design.common import android.graphics.drawable.Drawable import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.EditText diff --git a/service/src/main/AndroidManifest.xml b/service/src/main/AndroidManifest.xml index 08d3c13..39fb9f5 100644 --- a/service/src/main/AndroidManifest.xml +++ b/service/src/main/AndroidManifest.xml @@ -7,12 +7,10 @@ @@ -22,17 +20,14 @@ diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileBackgroundService.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileBackgroundService.kt index 7d9d6db..b8edc06 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileBackgroundService.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileBackgroundService.kt @@ -1,9 +1,7 @@ package com.github.kr328.clash.service -import android.app.AlarmManager import android.app.NotificationChannel import android.app.NotificationManager -import android.app.PendingIntent import android.content.ComponentName import android.content.Context import android.content.Intent @@ -20,10 +18,8 @@ import com.github.kr328.clash.service.ipc.ParcelableContainer import com.github.kr328.clash.service.transact.ProfileRequest import com.github.kr328.clash.service.util.RandomUtils import com.github.kr328.clash.service.util.UpdateUtils -import com.github.kr328.clash.service.util.componentName import com.github.kr328.clash.service.util.intent import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import kotlinx.coroutines.selects.select diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileRequestReceiver.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileRequestReceiver.kt index fafa7a6..b7ae93f 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileRequestReceiver.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileRequestReceiver.kt @@ -3,10 +3,8 @@ package com.github.kr328.clash.service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import android.os.Build import com.github.kr328.clash.service.transact.ProfileRequest import com.github.kr328.clash.service.util.componentName -import com.github.kr328.clash.service.util.intent import com.github.kr328.clash.service.util.startForegroundServiceCompat class ProfileRequestReceiver : BroadcastReceiver() { diff --git a/service/src/main/java/com/github/kr328/clash/service/ProfileService.kt b/service/src/main/java/com/github/kr328/clash/service/ProfileService.kt index 511d8e1..21a63ca 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ProfileService.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ProfileService.kt @@ -1,7 +1,5 @@ package com.github.kr328.clash.service -import android.app.AlarmManager -import android.app.PendingIntent import android.content.Intent import android.net.Uri import android.os.IBinder diff --git a/service/src/main/java/com/github/kr328/clash/service/TunService.kt b/service/src/main/java/com/github/kr328/clash/service/TunService.kt index ff014ff..c1a1d7c 100644 --- a/service/src/main/java/com/github/kr328/clash/service/TunService.kt +++ b/service/src/main/java/com/github/kr328/clash/service/TunService.kt @@ -9,7 +9,6 @@ import com.github.kr328.clash.service.settings.ServiceSettings import com.github.kr328.clash.service.util.broadcastNetworkChanged import kotlinx.coroutines.* import java.net.Inet6Address -import java.net.InetAddress class TunService : VpnService(), CoroutineScope by MainScope() { companion object { diff --git a/service/src/main/java/com/github/kr328/clash/service/net/DefaultNetworkChannel.kt b/service/src/main/java/com/github/kr328/clash/service/net/DefaultNetworkChannel.kt index 6f9ab3f..b6d447b 100644 --- a/service/src/main/java/com/github/kr328/clash/service/net/DefaultNetworkChannel.kt +++ b/service/src/main/java/com/github/kr328/clash/service/net/DefaultNetworkChannel.kt @@ -2,9 +2,12 @@ package com.github.kr328.clash.service.net import android.content.Context import android.net.* -import kotlinx.coroutines.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.withContext import java.net.InetAddress class DefaultNetworkChannel(val context: Context, scope: CoroutineScope) : diff --git a/service/src/main/res/values-zh/strings.xml b/service/src/main/res/values-zh/strings.xml index 1e769e2..a5e792b 100644 --- a/service/src/main/res/values-zh/strings.xml +++ b/service/src/main/res/values-zh/strings.xml @@ -1,13 +1,9 @@ - Clash 管理器服务 - Clash 配置管理服务 - Clash 核心服务 Clash 状态 配置服务状态 配置处理状态 正在运行 - Tun 设备服务 %d 个项目在队列中 更新 %s 完成 更新 %s 失败\\n%s diff --git a/service/src/main/res/values/strings.xml b/service/src/main/res/values/strings.xml index 0752f8a..8082833 100644 --- a/service/src/main/res/values/strings.xml +++ b/service/src/main/res/values/strings.xml @@ -1,22 +1,14 @@ - Clash Status - "%1$s↑\t%2$s↓" + Clash Status Profile Service Status Processing Profiles %d items in Queue Process Result Update %s Completed Update %s Failure\n%s - Profile Processing Status - - Clash Core Service - Tun Device Service - Clash Manager Service - Clash Profile Manager Service - Running