Add support for openURL event
This commit is contained in:
@@ -25,6 +25,7 @@ import io.nekohasekai.sfa.databinding.ViewClashModeButtonBinding
|
|||||||
import io.nekohasekai.sfa.databinding.ViewProfileItemBinding
|
import io.nekohasekai.sfa.databinding.ViewProfileItemBinding
|
||||||
import io.nekohasekai.sfa.ktx.errorDialogBuilder
|
import io.nekohasekai.sfa.ktx.errorDialogBuilder
|
||||||
import io.nekohasekai.sfa.ktx.getAttrColor
|
import io.nekohasekai.sfa.ktx.getAttrColor
|
||||||
|
import io.nekohasekai.sfa.ktx.launchCustomTab
|
||||||
import io.nekohasekai.sfa.ui.MainActivity
|
import io.nekohasekai.sfa.ui.MainActivity
|
||||||
import io.nekohasekai.sfa.utils.CommandClient
|
import io.nekohasekai.sfa.utils.CommandClient
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -40,7 +41,7 @@ class OverviewFragment : Fragment() {
|
|||||||
private val activity: MainActivity? get() = super.getActivity() as MainActivity?
|
private val activity: MainActivity? get() = super.getActivity() as MainActivity?
|
||||||
private var binding: FragmentDashboardOverviewBinding? = null
|
private var binding: FragmentDashboardOverviewBinding? = null
|
||||||
private val statusClient =
|
private val statusClient =
|
||||||
CommandClient(lifecycleScope, CommandClient.ConnectionType.Status, StatusClient())
|
CommandClient(lifecycleScope, CommandClient.ConnectionType.Status, StatusClient(), true)
|
||||||
private val clashModeClient =
|
private val clashModeClient =
|
||||||
CommandClient(lifecycleScope, CommandClient.ConnectionType.ClashMode, ClashModeClient())
|
CommandClient(lifecycleScope, CommandClient.ConnectionType.ClashMode, ClashModeClient())
|
||||||
|
|
||||||
@@ -171,6 +172,10 @@ class OverviewFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun openURL(url: String) {
|
||||||
|
requireContext().launchCustomTab(url)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class ClashModeClient : CommandClient.Handler {
|
inner class ClashModeClient : CommandClient.Handler {
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ import kotlinx.coroutines.launch
|
|||||||
open class CommandClient(
|
open class CommandClient(
|
||||||
private val scope: CoroutineScope,
|
private val scope: CoroutineScope,
|
||||||
private val connectionType: ConnectionType,
|
private val connectionType: ConnectionType,
|
||||||
private val handler: Handler
|
private val handler: Handler,
|
||||||
|
private val isMainClient: Boolean = false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
enum class ConnectionType {
|
enum class ConnectionType {
|
||||||
@@ -31,16 +32,20 @@ open class CommandClient(
|
|||||||
|
|
||||||
fun onConnected() {}
|
fun onConnected() {}
|
||||||
fun onDisconnected() {}
|
fun onDisconnected() {}
|
||||||
|
|
||||||
fun updateStatus(status: StatusMessage) {}
|
fun updateStatus(status: StatusMessage) {}
|
||||||
fun updateGroups(newGroups: MutableList<OutboundGroup>) {}
|
fun openURL(url: String) {}
|
||||||
|
|
||||||
fun clearLogs() {}
|
fun clearLogs() {}
|
||||||
fun appendLogs(message: List<String>) {}
|
fun appendLogs(message: List<String>) {}
|
||||||
|
|
||||||
|
fun updateGroups(newGroups: MutableList<OutboundGroup>) {}
|
||||||
|
|
||||||
fun initializeClashMode(modeList: List<String>, currentMode: String) {}
|
fun initializeClashMode(modeList: List<String>, currentMode: String) {}
|
||||||
fun updateClashMode(newMode: String) {}
|
fun updateClashMode(newMode: String) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private var commandClient: CommandClient? = null
|
private var commandClient: CommandClient? = null
|
||||||
private val clientHandler = ClientHandler()
|
private val clientHandler = ClientHandler()
|
||||||
fun connect() {
|
fun connect() {
|
||||||
@@ -52,7 +57,8 @@ open class CommandClient(
|
|||||||
ConnectionType.Log -> Libbox.CommandLog
|
ConnectionType.Log -> Libbox.CommandLog
|
||||||
ConnectionType.ClashMode -> Libbox.CommandClashMode
|
ConnectionType.ClashMode -> Libbox.CommandClashMode
|
||||||
}
|
}
|
||||||
options.statusInterval = 2 * 1000 * 1000 * 1000
|
options.isMainClient = isMainClient
|
||||||
|
options.statusInterval = 1 * 1000 * 1000 * 1000
|
||||||
val commandClient = CommandClient(clientHandler, options)
|
val commandClient = CommandClient(clientHandler, options)
|
||||||
scope.launch(Dispatchers.IO) {
|
scope.launch(Dispatchers.IO) {
|
||||||
for (i in 1..10) {
|
for (i in 1..10) {
|
||||||
@@ -119,13 +125,14 @@ open class CommandClient(
|
|||||||
handler.appendLogs(messageList.toList())
|
handler.appendLogs(messageList.toList())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun writeStatus(message: StatusMessage?) {
|
override fun writeStatus(message: StatusMessage) {
|
||||||
if (message == null) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
handler.updateStatus(message)
|
handler.updateStatus(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun openURL(url: String) {
|
||||||
|
handler.openURL(url)
|
||||||
|
}
|
||||||
|
|
||||||
override fun initializeClashMode(modeList: StringIterator, currentMode: String) {
|
override fun initializeClashMode(modeList: StringIterator, currentMode: String) {
|
||||||
handler.initializeClashMode(modeList.toList(), currentMode)
|
handler.initializeClashMode(modeList.toList(), currentMode)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user