feat: toast

This commit is contained in:
yangxisong 2025-11-13 16:04:13 +08:00
parent 1b0e5ec8ab
commit ca99eaa3e4
5 changed files with 71 additions and 35 deletions

View File

@ -6,21 +6,6 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.yuanxuan.rokid.network.http.ApiResponse
import com.yuanxuan.rokid.network.http.Test
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import timber.log.Timber
import java.lang.reflect.Type
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -32,26 +17,8 @@ class MainActivity : AppCompatActivity() {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val json = "{\n" +
" \"code\": 0,\n" +
" \"msg\": \"success\",\n" +
" \"data\": {\n" +
" \"userId\": \"123\",\n" +
" \"name\": \"Alice\"\n" +
" }\n" +
"}"
val x = test<Test>(json)
// onBackPressedDispatcher.addCallback {
// }
}
private inline fun <reified T> test(responseBody: String): T {
val typeToken = object : TypeToken<ApiResponse<T>>() {}
val typeOfT: Type = typeToken.type
val apiResponse: ApiResponse<T> = Gson().fromJson(responseBody, typeOfT)
return apiResponse.data
onBackPressedDispatcher.addCallback {
}
}
}

View File

@ -6,6 +6,7 @@ import com.yuanxuan.rokid.network.http.ApiRepository
import com.yuanxuan.rokid.network.http.ApiService
import com.yuanxuan.rokid.network.http.RetrofitClient
import com.yuanxuan.rokid.network.websocket.WebSocketManager
import com.yuanxuan.rokid.toast.ToastManager
/**
* 项目的服务管理器所有依赖集中管理
@ -44,12 +45,16 @@ object AppDependencies {
apiService = retrofitClient.apiService
)
}
val toastManager by lazy {
provider.provideToastManager()
}
interface Provider {
fun provideDeviceServiceManager(): DeviceServiceManager
fun provideWebSocketManager(): WebSocketManager
fun provideRetrofitClient(): RetrofitClient
fun provideApiRepository(apiService: ApiService): ApiRepository
fun provideToastManager(): ToastManager
}
}

View File

@ -6,6 +6,7 @@ import com.yuanxuan.rokid.network.http.ApiRepository
import com.yuanxuan.rokid.network.http.ApiService
import com.yuanxuan.rokid.network.http.RetrofitClient
import com.yuanxuan.rokid.network.websocket.WebSocketManager
import com.yuanxuan.rokid.toast.ToastManager
import kotlinx.coroutines.CoroutineScope
class ApplicationDependencyProvider(val context: Application, val scope: CoroutineScope) :
@ -31,4 +32,11 @@ class ApplicationDependencyProvider(val context: Application, val scope: Corouti
)
}
override fun provideToastManager(): ToastManager {
return ToastManager(
context = context,
scope = scope
)
}
}

View File

@ -0,0 +1,37 @@
package com.yuanxuan.rokid.toast
import android.content.Context
import android.view.Gravity
import android.widget.Toast
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class ToastManager(
val context: Context,
val scope: CoroutineScope
) {
fun showShort(message: String?) {
message?.let {
scope.launch(Dispatchers.Main) {
Toast.makeText(context, message, Toast.LENGTH_SHORT)
.apply {
setGravity(Gravity.CENTER, 0, 0)
}.show()
}
}
}
fun showLong(message: String?) {
message?.let {
scope.launch(Dispatchers.Main) {
Toast.makeText(context, message, Toast.LENGTH_LONG)
.apply {
setGravity(Gravity.CENTER, 0, 0)
}.show()
}
}
}
}

View File

@ -0,0 +1,19 @@
package com.yuanxuan.rokid.toast
import com.yuanxuan.rokid.dependencies.AppDependencies
object ToastUtils {
private val toastManager by lazy {
AppDependencies.toastManager
}
fun showShort(messages: String?) {
toastManager.showShort(messages)
}
fun showLong(messages: String?) {
toastManager.showLong(messages)
}
}