From 0c990ea7ee90b64e560d9e7e12130eca5333242a Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 11 Feb 2026 14:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=BC=80=E5=A2=9E=E5=8A=A0=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=BD=91=E7=BB=9C=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../sw/dualscreen/activity/InitActivity.kt | 91 ++++++++++++++++--- .../sw/dualscreen/activity/MainActivity.kt | 8 +- .../java/com/sw/dualscreen/ext/CommonExt.kt | 33 +++++-- .../sw/dualscreen/viewmodel/UserViewModel.kt | 24 ++--- app/src/main/res/drawable/bg_init_button.xml | 14 ++- app/src/main/res/layout/activity_init.xml | 12 +-- 7 files changed, 136 insertions(+), 47 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f9f5f13..690caab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + diff --git a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt index 9147337..e345a06 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt @@ -1,16 +1,22 @@ package com.sw.dualscreen.activity import android.content.Intent +import android.os.CountDownTimer import androidx.activity.viewModels import androidx.lifecycle.lifecycleScope import com.sw.dualscreen.GlobalData import com.sw.dualscreen.databinding.ActivityInitBinding +import com.sw.dualscreen.dialog.RemindDialog +import com.sw.dualscreen.ext.clickWithDebounce +import com.sw.dualscreen.ext.visible import com.sw.dualscreen.model.response.FoodVector import com.sw.dualscreen.objbox.Food import com.sw.dualscreen.objbox.FoodModule import com.sw.dualscreen.objbox.ObjectBox +import com.sw.dualscreen.utils.L import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel +import com.sw.plate.utils.AppUtil import kotlinx.coroutines.launch class InitActivity : BaseActivity() { @@ -37,7 +43,11 @@ class InitActivity : BaseActivity() { "version" to GlobalData.foodModelVersion ) ) { items -> - val list = items ?: emptyList() + if (items == null) { + getVectorErrorDialog() + return@getCollectedFoodVector + } + val list = items if (pageNum == 1 && list.isEmpty()) { block() return@getCollectedFoodVector @@ -75,20 +85,13 @@ class InitActivity : BaseActivity() { override fun initialize() { super.initialize() - showWaitingDialog("加载中……") - lifecycleScope.launch { - FoodModule.init(this@InitActivity) { - getCollectedFoodVector { - runOnUiThread { - hideWaitingDialog() - binding.root.postDelayed({ - goMainActivity() - }, 1000) - } - } - } + initNetworkTimer() + binding.okButton.clickWithDebounce(500) { + checkNetworkTimer?.cancel() + checkNetworkTimer?.start() } - + showWaitingDialog("网络连接中...") + checkNetworkTimer?.start() // val isSuccess = viewModel.checkEquipmentInfo() // if (isSuccess) { @@ -116,9 +119,69 @@ class InitActivity : BaseActivity() { // } } + private fun getCollectedFoodVector() { + showWaitingDialog2("加载中……") + lifecycleScope.launch { + FoodModule.init(this@InitActivity) { + getCollectedFoodVector { + runOnUiThread { + hideWaitingDialog() + binding.root.postDelayed({ + goMainActivity() + }, 1000) + } + } + } + } + } + private fun goMainActivity() { val intent = Intent(this, MainActivity::class.java) startActivity(intent) finish() } + + private var checkNetworkTimer: CountDownTimer? = null + + private fun initNetworkTimer() { + checkNetworkTimer = object : CountDownTimer(5 * 300, 300) { + override fun onTick(millisUntilFinished: Long) { + + } + + override fun onFinish() { + L.e("检测网络连接状态" + AppUtil.isNetworkConnected(this@InitActivity)) + if (!AppUtil.isNetworkConnected(this@InitActivity)) { + hideWaitingDialog() + binding.okButton.visible() + loadNetworkErrorDialog() + return + } + getCollectedFoodVector() + } + } + } + + private fun loadNetworkErrorDialog() { + RemindDialog( + context = context, + content = "网络连接异常,请检查WiFi连接状态后重试", + confirmBlock = { + startActivity(Intent("android.settings.WIFI_SETTINGS")) + }).show() + } + + private fun getVectorErrorDialog() { + RemindDialog( + context = context, + content = "未查询到向量数据,请稍后重试?", + confirmBlock = { + getCollectedFoodVector() + }).show() + } + + override fun onDestroy() { + checkNetworkTimer?.cancel() + super.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt index afd30c8..3ba662e 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt @@ -916,8 +916,8 @@ class MainActivity : BaseActivity() { // private val initialDelay = 5 * 60 * 1000L // private val dealyMillis = 10 * 60 * 1000L private val initialDelay = 30 * 1000L - private val dealyMillis = 60 * 1000L - private var taskPageNo = 1 + private val dealyMillis = 3 * 60 * 1000L +// private var taskPageNo = 1 fun startFaceTask() { faceTaskJob = intervalExecutor.startIntervalTaskWithInitialDelay(initialDelay, dealyMillis) { @@ -926,10 +926,10 @@ class MainActivity : BaseActivity() { return@startIntervalTaskWithInitialDelay } viewModel.getFaceIncrementList( - pageNo = taskPageNo, +// pageNo = taskPageNo, timestamp = timestamp, onAllQueryFinished = { - taskPageNo = 1 +// taskPageNo = 1 }, onPageQueryFinished = { list -> runOnUiThread { diff --git a/app/src/main/java/com/sw/dualscreen/ext/CommonExt.kt b/app/src/main/java/com/sw/dualscreen/ext/CommonExt.kt index 236b486..86ad187 100644 --- a/app/src/main/java/com/sw/dualscreen/ext/CommonExt.kt +++ b/app/src/main/java/com/sw/dualscreen/ext/CommonExt.kt @@ -116,13 +116,34 @@ fun EditText.addOnActionSearchListener(searchCallback: () -> Unit) { return@setOnEditorActionListener false } } -fun View.clickWithDebounce(delay: Long = 500, action: () -> Unit) { - var job: Job? = null +//fun View.clickWithDebounce(delay: Long = 500, action: () -> Unit) { +// var job: Job? = null +// setOnClickListener { +// job?.cancel() +// job = CoroutineScope(Dispatchers.Main).launch { +// delay(delay) +// action() +// } +// } +//} + +/** + * 极简版防重复点击扩展函数 + * @param delay 防抖时间(默认300ms) + * @param action 点击执行逻辑 + */ +fun View.clickWithDebounce(delay: Long = 300, action: () -> Unit) { setOnClickListener { - job?.cancel() - job = CoroutineScope(Dispatchers.Main).launch { - delay(delay) - action() + // 用View的tag存储是否可点击的状态(默认可点击) + if (tag as? Boolean ?: true) { + tag = false // 标记为不可点击 + action() // 立即执行点击逻辑 + + // 启动协程,延迟后恢复可点击状态 + CoroutineScope(Dispatchers.Main).launch { + delay(delay) + tag = true // 恢复可点击 + } } } } diff --git a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt index 9636b48..1fa7771 100644 --- a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt @@ -185,17 +185,17 @@ class UserViewModel : BaseViewModel() { return@withContext } onPageQueryFinished(list) - if (list.size >= pageSize) { - lastFaceTimestamp = list.last().faceUpdateTimestamp ?: 0L - getFaceIncrementList( - pageNo = pageNo + 1, - pageSize = pageSize, - timestamp = timestamp, - onAllQueryFinished = onAllQueryFinished, - onPageQueryFinished = onPageQueryFinished - ) - return@withContext - } +// if (list.size >= pageSize) { +// lastFaceTimestamp = list.last().faceUpdateTimestamp ?: 0L +// getFaceIncrementList( +// pageNo = pageNo + 1, +// pageSize = pageSize, +// timestamp = timestamp, +// onAllQueryFinished = onAllQueryFinished, +// onPageQueryFinished = onPageQueryFinished +// ) +// return@withContext +// } //查询完成所有数据,保存时间戳 if (list.isNotEmpty()) { //非空实现最后一条数据的是时间戳,空使用上次list最后一条时间戳 @@ -576,7 +576,7 @@ class UserViewModel : BaseViewModel() { launchWithLoading { val response = repository.getCollectedFoodVector(param) if (parseResponse(response)) { - block(response.data) + block(response.data?:emptyList()) } else { block(null) } diff --git a/app/src/main/res/drawable/bg_init_button.xml b/app/src/main/res/drawable/bg_init_button.xml index 02f2a03..71ff7c1 100644 --- a/app/src/main/res/drawable/bg_init_button.xml +++ b/app/src/main/res/drawable/bg_init_button.xml @@ -1,7 +1,11 @@ - + + + - - - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_init.xml b/app/src/main/res/layout/activity_init.xml index fe50d0c..d42fde8 100644 --- a/app/src/main/res/layout/activity_init.xml +++ b/app/src/main/res/layout/activity_init.xml @@ -35,18 +35,18 @@ android:layout_marginTop="200dp" android:src="@mipmap/img_init" /> - @@ -56,7 +56,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/mainImgView" android:layout_centerHorizontal="true" - android:layout_marginTop="160dp" + android:layout_marginTop="260dp" android:padding="10dp" android:background="@drawable/bg_init_button" android:gravity="center"