diff --git a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt index 23212f2..56448d3 100644 --- a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt +++ b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt @@ -8,7 +8,9 @@ import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.yuanxuan.rokid.databinding.ActivityMainBinding import com.yuanxuan.rokid.extension.fadeIn import com.yuanxuan.rokid.extension.fadeOut @@ -55,17 +57,19 @@ class MainActivity : AppCompatActivity() { private fun observer() { lifecycleScope.launch { - viewModel.uiState.collect { uiState -> - binding.batteryLevel.text = - resources.getString(R.string.status_bar_battery, uiState.batteryLevel) - binding.batteryLevelIv.setImageLevel(uiState.batteryLevel) - binding.wifiIv.setImageLevel(uiState.wifiLevel) - if (uiState.isVoiceInputVisible) { - binding.lottieVoiceInput.playAnimation() - binding.lottieVoiceInput.fadeIn(300) - } else { - binding.lottieVoiceInput.cancelAnimation() - binding.lottieVoiceInput.fadeOut(300) + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.uiState.collect { uiState -> + binding.batteryLevel.text = + resources.getString(R.string.status_bar_battery, uiState.batteryLevel) + binding.batteryLevelIv.setImageLevel(uiState.batteryLevel) + binding.wifiIv.setImageLevel(uiState.wifiLevel) + if (uiState.isVoiceInputVisible) { + binding.lottieVoiceInput.playAnimation() + binding.lottieVoiceInput.fadeIn(300) + } else { + binding.lottieVoiceInput.cancelAnimation() + binding.lottieVoiceInput.fadeOut(300) + } } } } diff --git a/app/src/main/java/com/yuanxuan/rokid/MainViewModel.kt b/app/src/main/java/com/yuanxuan/rokid/MainViewModel.kt index da58a0a..be6d557 100644 --- a/app/src/main/java/com/yuanxuan/rokid/MainViewModel.kt +++ b/app/src/main/java/com/yuanxuan/rokid/MainViewModel.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.seconds class MainViewModel : ViewModel() { @@ -33,7 +34,7 @@ class MainViewModel : ViewModel() { wifiLevel = 0, isVoiceInputVisible = false ), - started = SharingStarted.Eagerly, + started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds), ) fun quitInstructReceived(){ diff --git a/app/src/main/java/com/yuanxuan/rokid/network/websocket/OkHttpWebSocketConnection.kt b/app/src/main/java/com/yuanxuan/rokid/network/websocket/OkHttpWebSocketConnection.kt index e329e6d..c720065 100644 --- a/app/src/main/java/com/yuanxuan/rokid/network/websocket/OkHttpWebSocketConnection.kt +++ b/app/src/main/java/com/yuanxuan/rokid/network/websocket/OkHttpWebSocketConnection.kt @@ -36,21 +36,6 @@ class OkHttpWebSocketConnection() : WebSocketListener(), WebSocketConnection { client = okHttpClient.newWebSocket(request, this) } - override fun isDead(): Boolean { - TODO("Not yet implemented") - } - - override fun disconnect() { - TODO("Not yet implemented") - } - - override fun sendRequest( - request: WebSocketRequestMessage, - timeoutSeconds: Long - ) { - client?.send(request.requestId) - } - override fun onMessage(webSocket: WebSocket, text: String) { Timber.d(text) } @@ -61,7 +46,7 @@ class OkHttpWebSocketConnection() : WebSocketListener(), WebSocketConnection { } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { - Timber.e("websocket断开连接 ${t}") + Timber.e("websocket断开连接 $t") _webSocketConnectionStateFlow.update { WebSocketConnectionState.FAILED } } diff --git a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketConnection.kt b/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketConnection.kt index 24901bd..ab26f12 100644 --- a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketConnection.kt +++ b/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketConnection.kt @@ -11,17 +11,17 @@ interface WebSocketConnection { fun connect(sn: String) - fun isDead(): Boolean +// fun isDead(): Boolean - fun disconnect() +// fun disconnect() - fun sendRequest(request: WebSocketRequestMessage) { - return sendRequest(request, DEFAULT_SEND_TIMEOUT.inWholeSeconds) - } +// fun sendRequest(request: WebSocketRequestMessage) { +// return sendRequest(request, DEFAULT_SEND_TIMEOUT.inWholeSeconds) +// } - fun sendRequest( - request: WebSocketRequestMessage, - timeoutSeconds: Long - ) +// fun sendRequest( +// request: WebSocketRequestMessage, +// timeoutSeconds: Long +// ) } \ No newline at end of file diff --git a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketRequestMessage.kt b/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketRequestMessage.kt deleted file mode 100644 index e1755fe..0000000 --- a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketRequestMessage.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.yuanxuan.rokid.network.websocket - -data class WebSocketRequestMessage( - val requestId: String -) diff --git a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketResponseMessage.kt b/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketResponseMessage.kt index d325748..7c88dcd 100644 --- a/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketResponseMessage.kt +++ b/app/src/main/java/com/yuanxuan/rokid/network/websocket/WebSocketResponseMessage.kt @@ -1,5 +1,10 @@ package com.yuanxuan.rokid.network.websocket -data class WebSocketResponseMessage( - val requestId: String +import com.google.gson.annotations.SerializedName + +data class WebSocketResponseMessage( + @SerializedName("MsgType") + val msgType: Int, + @SerializedName("Msg") + val msg: T ) diff --git a/app/src/main/java/com/yuanxuan/rokid/ui/HomeViewModel.kt b/app/src/main/java/com/yuanxuan/rokid/ui/HomeViewModel.kt index 14b9736..ac559fd 100644 --- a/app/src/main/java/com/yuanxuan/rokid/ui/HomeViewModel.kt +++ b/app/src/main/java/com/yuanxuan/rokid/ui/HomeViewModel.kt @@ -7,6 +7,7 @@ import com.yuanxuan.rokid.dependencies.AppDependencies import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.shareIn +import kotlin.time.Duration.Companion.seconds class HomeViewModel : ViewModel() { val homeMenuBeans = @@ -33,7 +34,7 @@ class HomeViewModel : ViewModel() { ) }.shareIn( scope = viewModelScope, - started = SharingStarted.Eagerly, + started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds), replay = 1 ) } \ No newline at end of file diff --git a/app/src/main/java/com/yuanxuan/rokid/ui/SettingViewModel.kt b/app/src/main/java/com/yuanxuan/rokid/ui/SettingViewModel.kt index 2cbb34d..64cb907 100644 --- a/app/src/main/java/com/yuanxuan/rokid/ui/SettingViewModel.kt +++ b/app/src/main/java/com/yuanxuan/rokid/ui/SettingViewModel.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.shareIn +import kotlin.time.Duration.Companion.seconds class SettingViewModel : ViewModel() { @@ -25,7 +26,7 @@ class SettingViewModel : ViewModel() { } }.shareIn( scope = viewModelScope, - started = SharingStarted.Eagerly, + started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds), replay = 1 ) @@ -43,26 +44,26 @@ class SettingViewModel : ViewModel() { } }.shareIn( scope = viewModelScope, - started = SharingStarted.Eagerly, + started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds), replay = 1 ) - fun brightnessAdd(){ + fun brightnessAdd() { AppDependencies.deviceServiceManager.brightnessAdd() } - fun brightnessSubtract(){ + fun brightnessSubtract() { AppDependencies.deviceServiceManager.brightnessSubtract() } - fun volumeAdd(){ + fun volumeAdd() { AppDependencies.deviceServiceManager.volumeAdd() } - fun volumeSubtract(){ + fun volumeSubtract() { AppDependencies.deviceServiceManager.volumeSubtract() } - fun deviceSn()= AppDependencies.deviceServiceManager.sn + fun deviceSn() = AppDependencies.deviceServiceManager.sn } \ No newline at end of file