diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 83f0b80..4982fea 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -7,6 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -18,6 +19,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicInteger @@ -38,6 +40,8 @@ private var isUseAlgorithm = false private var isGetServerConfig = false private var retryTimes = AtomicInteger(0) + private var deviceId = 0 + private var selectedScene: BusinessSceneModel.DataModel? = null override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -188,6 +192,7 @@ } private fun getSceneByDevice(id: Int) { + deviceId = id algorithmViewModel.getSceneByDevice( id, onLoading = {}, @@ -220,8 +225,44 @@ } } - binding.updateAlgorithmButton.setOnClickListener { + binding.sceneTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedScene = dataBeans[position] + } + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.updateAlgorithmButton.setOnClickListener { + if (selectedScene == null) { + "请先选择场景".show(requireContext()) + return@setOnClickListener + } + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("确定更新AI模型配置吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + algorithmViewModel.updateAlgorithmByDevice( + deviceId, + selectedScene!!.id, + onLoading = {}, + onSuccess = { "更新AI模型成功".show(requireContext()) }, + onFailed = { it.show(requireContext()) } + ) + } + + override fun onCancelClick() {} + }).build().show() } binding.updateServerConfigButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 83f0b80..4982fea 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -7,6 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -18,6 +19,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicInteger @@ -38,6 +40,8 @@ private var isUseAlgorithm = false private var isGetServerConfig = false private var retryTimes = AtomicInteger(0) + private var deviceId = 0 + private var selectedScene: BusinessSceneModel.DataModel? = null override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -188,6 +192,7 @@ } private fun getSceneByDevice(id: Int) { + deviceId = id algorithmViewModel.getSceneByDevice( id, onLoading = {}, @@ -220,8 +225,44 @@ } } - binding.updateAlgorithmButton.setOnClickListener { + binding.sceneTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedScene = dataBeans[position] + } + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.updateAlgorithmButton.setOnClickListener { + if (selectedScene == null) { + "请先选择场景".show(requireContext()) + return@setOnClickListener + } + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("确定更新AI模型配置吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + algorithmViewModel.updateAlgorithmByDevice( + deviceId, + selectedScene!!.id, + onLoading = {}, + onSuccess = { "更新AI模型成功".show(requireContext()) }, + onFailed = { it.show(requireContext()) } + ) + } + + override fun onCancelClick() {} + }).build().show() } binding.updateServerConfigButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index dcc8ca8..b10a161 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -173,4 +173,13 @@ */ @GET("/api/device_scene_relation/get_by_device") suspend fun getSceneByDevice(@Query("device_id") deviceId: Int): String + + /** + * 更新算法模型 + */ + @POST("/api/device_scene_relation/update_by_device") + suspend fun updateAlgorithmByDevice( + @QueryMap deviceId: Map, + @QueryMap sceneId: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 83f0b80..4982fea 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -7,6 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -18,6 +19,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicInteger @@ -38,6 +40,8 @@ private var isUseAlgorithm = false private var isGetServerConfig = false private var retryTimes = AtomicInteger(0) + private var deviceId = 0 + private var selectedScene: BusinessSceneModel.DataModel? = null override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -188,6 +192,7 @@ } private fun getSceneByDevice(id: Int) { + deviceId = id algorithmViewModel.getSceneByDevice( id, onLoading = {}, @@ -220,8 +225,44 @@ } } - binding.updateAlgorithmButton.setOnClickListener { + binding.sceneTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedScene = dataBeans[position] + } + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.updateAlgorithmButton.setOnClickListener { + if (selectedScene == null) { + "请先选择场景".show(requireContext()) + return@setOnClickListener + } + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("确定更新AI模型配置吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + algorithmViewModel.updateAlgorithmByDevice( + deviceId, + selectedScene!!.id, + onLoading = {}, + onSuccess = { "更新AI模型成功".show(requireContext()) }, + onFailed = { it.show(requireContext()) } + ) + } + + override fun onCancelClick() {} + }).build().show() } binding.updateServerConfigButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index dcc8ca8..b10a161 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -173,4 +173,13 @@ */ @GET("/api/device_scene_relation/get_by_device") suspend fun getSceneByDevice(@Query("device_id") deviceId: Int): String + + /** + * 更新算法模型 + */ + @POST("/api/device_scene_relation/update_by_device") + suspend fun updateAlgorithmByDevice( + @QueryMap deviceId: Map, + @QueryMap sceneId: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 3ca2220..4926a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -269,4 +269,22 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") return service.getSceneByDevice(deviceId) } + + suspend fun updateAlgorithmByDevice(deviceId: Int, sceneId: Int): String { + val deviceIdMap = HashMap() + deviceIdMap["device_id"] = deviceId + + val sceneIdMap = HashMap() + sceneIdMap["scene_id"] = sceneId + + val httpConfig = SaveKeyValues.getValue( + LocaleConstant.ALGORITHM_DEVICE_API_KEY, "192.168.10.236" + ) as String + if (httpConfig == "") { + Log.d(kTag, "httpConfig is null") + return "" + } + val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") + return service.updateAlgorithmByDevice(deviceIdMap, sceneIdMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 83f0b80..4982fea 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -7,6 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -18,6 +19,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicInteger @@ -38,6 +40,8 @@ private var isUseAlgorithm = false private var isGetServerConfig = false private var retryTimes = AtomicInteger(0) + private var deviceId = 0 + private var selectedScene: BusinessSceneModel.DataModel? = null override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -188,6 +192,7 @@ } private fun getSceneByDevice(id: Int) { + deviceId = id algorithmViewModel.getSceneByDevice( id, onLoading = {}, @@ -220,8 +225,44 @@ } } - binding.updateAlgorithmButton.setOnClickListener { + binding.sceneTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedScene = dataBeans[position] + } + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.updateAlgorithmButton.setOnClickListener { + if (selectedScene == null) { + "请先选择场景".show(requireContext()) + return@setOnClickListener + } + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("确定更新AI模型配置吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + algorithmViewModel.updateAlgorithmByDevice( + deviceId, + selectedScene!!.id, + onLoading = {}, + onSuccess = { "更新AI模型成功".show(requireContext()) }, + onFailed = { it.show(requireContext()) } + ) + } + + override fun onCancelClick() {} + }).build().show() } binding.updateServerConfigButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index dcc8ca8..b10a161 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -173,4 +173,13 @@ */ @GET("/api/device_scene_relation/get_by_device") suspend fun getSceneByDevice(@Query("device_id") deviceId: Int): String + + /** + * 更新算法模型 + */ + @POST("/api/device_scene_relation/update_by_device") + suspend fun updateAlgorithmByDevice( + @QueryMap deviceId: Map, + @QueryMap sceneId: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 3ca2220..4926a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -269,4 +269,22 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") return service.getSceneByDevice(deviceId) } + + suspend fun updateAlgorithmByDevice(deviceId: Int, sceneId: Int): String { + val deviceIdMap = HashMap() + deviceIdMap["device_id"] = deviceId + + val sceneIdMap = HashMap() + sceneIdMap["scene_id"] = sceneId + + val httpConfig = SaveKeyValues.getValue( + LocaleConstant.ALGORITHM_DEVICE_API_KEY, "192.168.10.236" + ) as String + if (httpConfig == "") { + Log.d(kTag, "httpConfig is null") + return "" + } + val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") + return service.updateAlgorithmByDevice(deviceIdMap, sceneIdMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt index a222914..2ff6c35 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt @@ -64,4 +64,24 @@ it.printStackTrace() onFailed(it.message ?: "Unknown error") }) + + fun updateAlgorithmByDevice( + deviceId: Int, + sceneId: Int, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.updateAlgorithmByDevice(deviceId, sceneId) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt index 83f0b80..4982fea 100644 --- a/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/br/operationsite/fragments/BaseSettingsFragment.kt @@ -7,6 +7,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -18,6 +19,7 @@ import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicInteger @@ -38,6 +40,8 @@ private var isUseAlgorithm = false private var isGetServerConfig = false private var retryTimes = AtomicInteger(0) + private var deviceId = 0 + private var selectedScene: BusinessSceneModel.DataModel? = null override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) @@ -188,6 +192,7 @@ } private fun getSceneByDevice(id: Int) { + deviceId = id algorithmViewModel.getSceneByDevice( id, onLoading = {}, @@ -220,8 +225,44 @@ } } - binding.updateAlgorithmButton.setOnClickListener { + binding.sceneTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedScene = dataBeans[position] + } + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.updateAlgorithmButton.setOnClickListener { + if (selectedScene == null) { + "请先选择场景".show(requireContext()) + return@setOnClickListener + } + AlertControlDialog.Builder() + .setContext(requireContext()) + .setTitle("提示") + .setMessage("确定更新AI模型配置吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + algorithmViewModel.updateAlgorithmByDevice( + deviceId, + selectedScene!!.id, + onLoading = {}, + onSuccess = { "更新AI模型成功".show(requireContext()) }, + onFailed = { it.show(requireContext()) } + ) + } + + override fun onCancelClick() {} + }).build().show() } binding.updateServerConfigButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index dcc8ca8..b10a161 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -173,4 +173,13 @@ */ @GET("/api/device_scene_relation/get_by_device") suspend fun getSceneByDevice(@Query("device_id") deviceId: Int): String + + /** + * 更新算法模型 + */ + @POST("/api/device_scene_relation/update_by_device") + suspend fun updateAlgorithmByDevice( + @QueryMap deviceId: Map, + @QueryMap sceneId: Map + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 3ca2220..4926a34 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -269,4 +269,22 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") return service.getSceneByDevice(deviceId) } + + suspend fun updateAlgorithmByDevice(deviceId: Int, sceneId: Int): String { + val deviceIdMap = HashMap() + deviceIdMap["device_id"] = deviceId + + val sceneIdMap = HashMap() + sceneIdMap["scene_id"] = sceneId + + val httpConfig = SaveKeyValues.getValue( + LocaleConstant.ALGORITHM_DEVICE_API_KEY, "192.168.10.236" + ) as String + if (httpConfig == "") { + Log.d(kTag, "httpConfig is null") + return "" + } + val service = RetrofitFactory.createRetrofit("http://$httpConfig:9000") + return service.updateAlgorithmByDevice(deviceIdMap, sceneIdMap) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt index a222914..2ff6c35 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/AlgorithmViewModel.kt @@ -64,4 +64,24 @@ it.printStackTrace() onFailed(it.message ?: "Unknown error") }) + + fun updateAlgorithmByDevice( + deviceId: Int, + sceneId: Int, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.updateAlgorithmByDevice(deviceId, sceneId) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_base_settings.xml b/app/src/main/res/layout/fragment_base_settings.xml index e3b0394..fff76d5 100644 --- a/app/src/main/res/layout/fragment_base_settings.xml +++ b/app/src/main/res/layout/fragment_base_settings.xml @@ -256,7 +256,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginHorizontal="@dimen/dp_20" - android:layout_marginVertical="11dp" + android:layout_marginVertical="@dimen/dp_10" android:layout_weight="2.25" android:background="@drawable/bg_solid_layout_white_radius_5" android:textColor="@color/black"