From: TrillGates Date: Tue, 26 Oct 2021 09:03:51 +0000 (+0800) Subject: 重构了代码,把UI提示移到了UI层。 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=1277f78118e1d93116092b6be4f95bee96cd2a07;p=IcTemperature.git 重构了代码,把UI提示移到了UI层。 --- diff --git a/app/build.gradle b/app/build.gradle index 523f052..dedd93e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -131,6 +131,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.0.4' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation "com.google.android.material:material:1.3.0-alpha01" implementation 'com.github.silvestrpredko:dot-progress-bar:1.1' implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation ('com.squareup.okhttp3:logging-interceptor:4.10.0-RC1') { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f693ae6..63072ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,8 +16,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> + android:theme="@style/AppTheme"> diff --git a/app/src/main/java/com/ic/temperature/MainActivity.kt b/app/src/main/java/com/ic/temperature/MainActivity.kt index 3e6b4d6..ab7ce3b 100644 --- a/app/src/main/java/com/ic/temperature/MainActivity.kt +++ b/app/src/main/java/com/ic/temperature/MainActivity.kt @@ -1,8 +1,12 @@ package com.ic.temperature import android.content.Context +import android.content.DialogInterface import android.os.Bundle import android.os.PowerManager +import android.widget.TextView +import android.widget.Toast +import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider import com.ic.iclooger.ICLogger @@ -10,6 +14,9 @@ import com.ic.temperature.databinding.ActivityMainBinding import com.ic.temperature.utils.DisplayType import com.ic.temperature.utils.ICViewModelFactory import com.ic.temperature.viewmodel.TemperatureViewModel +import com.ic.temperature.viewmodel.TemperatureViewModel.Companion.DIALOG_STATE_GETTING +import com.ic.temperature.viewmodel.TemperatureViewModel.Companion.DIALOG_STATE_NONE +import com.ic.temperature.viewmodel.TemperatureViewModel.Companion.DIALOG_STATE_WAITING /** * 这个是健康的界面,如果没有佩戴的话,不做检查。 @@ -28,6 +35,25 @@ import com.ic.temperature.viewmodel.TemperatureViewModel */ class MainActivity : AppCompatActivity() { + private fun showDialog() { + //弹窗提示,确定后才重置设备 + val builder = AlertDialog.Builder(this) + builder.setMessage(getString(R.string.background_wait)) + .setPositiveButton(getString(R.string.confirm_text)) { dialog, id -> + dialog.dismiss() + onBackPressed() + } + val alertDialog = builder.create() + alertDialog.show() + val yesBtn = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE) + yesBtn.textSize = 24.0f + ICLogger.d("yesBtn==> $yesBtn") + val viewById = alertDialog.findViewById(android.R.id.message) + viewById!!.setPadding(10, 10, 10, 10) + viewById!!.textSize = 24.0f + + } + private val viewModel by lazy { ViewModelProvider( @@ -45,8 +71,11 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(binding.root) initObserver() + } + + override fun onResume() { + super.onResume() initWakeLock() - viewModel.setActivity(this) } private var wakeLock: PowerManager.WakeLock? = null @@ -154,6 +183,21 @@ class MainActivity : AppCompatActivity() { finish() } } + mToastState.observe(that) { + when (it) { + DIALOG_STATE_NONE -> { + + } + DIALOG_STATE_WAITING -> { + showDialog() + } + DIALOG_STATE_GETTING -> { + Toast.makeText(that, R.string.background_wait, Toast.LENGTH_SHORT) + .show() + + } + } + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/ic/temperature/repository/TemperatureRepository.kt b/app/src/main/java/com/ic/temperature/repository/TemperatureRepository.kt index 50173f1..e72dd56 100644 --- a/app/src/main/java/com/ic/temperature/repository/TemperatureRepository.kt +++ b/app/src/main/java/com/ic/temperature/repository/TemperatureRepository.kt @@ -1,22 +1,11 @@ package com.ic.temperature.repository -import android.app.Activity -import android.app.Dialog import android.content.* -import android.os.Handler import android.os.IBinder -import android.os.Looper -import android.os.Message -import android.widget.TextView -import android.widget.Toast -import androidx.appcompat.app.AlertDialog -import com.ic.iclooger.ICLogger -import com.ic.temperature.R import com.ic.temperature.utils.Constants import com.ic.temperature.utils.IcLog import com.ic.work.ITempSensorCallback import com.ic.work.ITempSensorService -import com.ic.work.domain.Temperature class TemperatureRepository(context: Context) { @@ -26,17 +15,10 @@ class TemperatureRepository(context: Context) { private var mContext: Context = context - private var mActivity: Activity? = null - private var mService: ITempSensorService? = null - private var mCallback: ITemRepositoryCallback? = null - - private var dialog: Dialog? = null + private var remoteDataCallback: ITempSensorCallback.Stub? = null - fun setActivity(mContext: Activity?) { - mActivity = mContext - } fun release() { try { @@ -54,12 +36,12 @@ class TemperatureRepository(context: Context) { * * @param context */ - fun bindWorkService(context: Context, callback: ITemRepositoryCallback) { + fun bindWorkService(context: Context, callback: ITempSensorCallback.Stub) { if (mService != null) { println("has bind...") return } - this.mCallback = callback + this.remoteDataCallback = callback IcLog.i(TAG, "bind remote service..") context.bindService( Intent(Constants.ACTION_TEMPERATURE), @@ -69,111 +51,11 @@ class TemperatureRepository(context: Context) { } - private val remoteDataCallback by lazy { - Callback4Remote() - } private val mRemoteConnection by lazy { RemoteServiceConnection() } - inner class Callback4Remote : ITempSensorCallback.Stub() { - override fun onTemperatureTestError(message: String?, code: Int) { - IcLog.d(TAG, "message ==> $message code ==> $code") - //UI上做出提示 - } - - /** - * bodyOrWristTemp:体温或者腕温(当不支持腕温的时候,就是体温) - * maybeBodyTemp:可能是体温(如果支持腕温的时候) - * envTemp:环境温度 - */ - override fun onTemperatureGet(temperature: Temperature?) { - if (temperature == null) { - IcLog.d(TAG, "result is null") - return - } - IcLog.d(TAG, "temperature is == > $temperature") - IcLog.d( - TAG, - "final ... " - + temperature.wristTemp + - " maybeBodyTemp --> " - + temperature.bodyTemp + - " envTemp + > " - + temperature.envTemp - ) - //最后的结果 - if (dialog != null) { - dialog!!.dismiss(); - } - mCallback?.onTempFinal(temperature.wristTemp, temperature.bodyTemp, temperature.envTemp) - } - - override fun onTemperatureUpdating(temperature: Temperature) { - //温度更新中... - mCallback?.onTempUpdate( - temperature.wristTemp, - temperature.bodyTemp, - temperature.envTemp - ) - } - - override fun onGettingData() { - //正在获取 - IcLog.d(TAG, "正在获取 ...") - mUiRefreshHandler.sendEmptyMessage(RUNING_TASK_TYPE) - } - - override fun onWaiting() { - // - IcLog.d(TAG, "任务正在等待...") - //updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom)); - //让UI显示保持安静,准备测试的玩意 - mUiRefreshHandler.sendEmptyMessage(WAITING_TASK_TYPE) - } - } - - private val RUNING_TASK_TYPE = 0x01 - private val WAITING_TASK_TYPE = 0x02 - private val mUiRefreshHandler: Handler = object : Handler(Looper.getMainLooper()) { - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - when (msg.what) { - RUNING_TASK_TYPE -> Toast.makeText( - mContext, - mContext.getString(R.string.background_test), - Toast.LENGTH_SHORT - ).show() - WAITING_TASK_TYPE -> showDialog() - } - } - } - - private fun showDialog() { - //弹窗提示,确定后才重置设备 - val builder = AlertDialog.Builder(mContext) - builder.setMessage(mContext.getString(R.string.background_wait)) - .setPositiveButton(mContext.getString(R.string.confirm_text)) { dialog, id -> - dialog.dismiss() - //删除内容 - if (mActivity != null) { - mActivity!!.onBackPressed() - } - } - val alertDialog = builder.create() - alertDialog.show() - val yesBtn = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE) - val noBtn = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE) - yesBtn.textSize = 24.0f - noBtn.textSize = 24.0f - ICLogger.d("yesBtn==> $yesBtn") - ICLogger.d("noBtn==> $noBtn") - val viewById = alertDialog.findViewById(android.R.id.message) - viewById!!.setPadding(10, 10, 10, 10) - viewById!!.textSize = 24.0f - - } /** * 远程服务的回调 @@ -198,7 +80,6 @@ class TemperatureRepository(context: Context) { //加载温度内容 fun getTemperature() { - mCallback?.onTesting() try { //调用开始查询温度,2表示用户主动测试,1 //SERVER_CMD(0)/*服务端单次测量指令*/, diff --git a/app/src/main/java/com/ic/temperature/viewmodel/TemperatureViewModel.kt b/app/src/main/java/com/ic/temperature/viewmodel/TemperatureViewModel.kt index 6e3d68c..78dc646 100644 --- a/app/src/main/java/com/ic/temperature/viewmodel/TemperatureViewModel.kt +++ b/app/src/main/java/com/ic/temperature/viewmodel/TemperatureViewModel.kt @@ -1,6 +1,5 @@ package com.ic.temperature.viewmodel -import android.app.Activity import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -14,13 +13,13 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.ic.temperature.R import com.ic.temperature.domain.Temperature -import com.ic.temperature.repository.ITemRepositoryCallback import com.ic.temperature.repository.TemperatureRepository import com.ic.temperature.utils.* import com.ic.temperature.utils.Constants.KEY_ANTI_EVENT import com.ic.temperature.utils.Constants.STATE_ANTI_NONE import com.ic.temperature.utils.Constants.STATE_ANTI_OFF import com.ic.temperature.utils.Constants.STATE_ANTI_ON +import com.ic.work.ITempSensorCallback import java.lang.ref.WeakReference class TemperatureViewModel() : ViewModel() { @@ -35,6 +34,67 @@ class TemperatureViewModel() : ViewModel() { ResultHandler(this) } + private val remoteDataCallback by lazy { + Callback4Remote() + } + + + inner class Callback4Remote : ITempSensorCallback.Stub() { + override fun onTemperatureTestError(message: String?, code: Int) { + IcLog.d(TemperatureRepository.TAG, "message ==> $message code ==> $code") + //UI上做出提示 + } + + /** + * bodyOrWristTemp:体温或者腕温(当不支持腕温的时候,就是体温) + * maybeBodyTemp:可能是体温(如果支持腕温的时候) + * envTemp:环境温度 + */ + override fun onTemperatureGet(temperature: com.ic.work.domain.Temperature?) { + if (temperature == null) { + IcLog.d(TemperatureRepository.TAG, "result is null") + return + } + mToastState.postValue(DIALOG_STATE_NONE) + IcLog.d(TemperatureRepository.TAG, "temperature is == > $temperature") + IcLog.d( + TemperatureRepository.TAG, + "final ... " + + temperature.wristTemp + + " maybeBodyTemp --> " + + temperature.bodyTemp + + " envTemp + > " + + temperature.envTemp + ) + sendMsg( + temperature.wristTemp, temperature.bodyTemp, + temperature.envTemp, UPDATE_TEMPERATURE_FINAL_DATA + ) + } + + override fun onTemperatureUpdating(temperature: com.ic.work.domain.Temperature) { + //温度更新中... + sendMsg( + temperature.wristTemp, temperature.bodyTemp, + temperature.envTemp, UPDATE_TEMPERATURE_NORMAL_DATA + ) + } + + override fun onGettingData() { + //正在获取 + IcLog.d(TemperatureRepository.TAG, "正在获取 ...") + mToastState.postValue(DIALOG_STATE_GETTING) + } + + override fun onWaiting() { + // + IcLog.d(TemperatureRepository.TAG, "任务正在等待...") + //updateTipsInfo(mTipsSpares.get(top), mTipsSpares.get(bottom)); + //让UI显示保持安静,准备测试的玩意 + mToastState.postValue(DIALOG_STATE_WAITING) + } + } + class ResultHandler(viewModel: TemperatureViewModel) : Handler(Looper.getMainLooper()) { private var viewModel: WeakReference? = null @@ -92,10 +152,6 @@ class TemperatureViewModel() : ViewModel() { checkWristWear() } - fun setActivity(context: Activity?) { - repository.setActivity(context) - } - /** * 是否支持腕温检测 */ @@ -138,44 +194,17 @@ class TemperatureViewModel() : ViewModel() { ); } - private val mTemCallback = object : ITemRepositoryCallback { - override fun onTempUpdate( - bodyOrWristTemp: Double, - maybeBodyTemp: Double, - envTemp: Double - ) { - sendMsg( - bodyOrWristTemp, maybeBodyTemp, - envTemp, UPDATE_TEMPERATURE_NORMAL_DATA - ) - } - - override fun onTempFinal( - bodyOrWristTemp: Double, - maybeBodyTemp: Double, - envTemp: Double - ) { - sendMsg( - bodyOrWristTemp, maybeBodyTemp, - envTemp, UPDATE_TEMPERATURE_FINAL_DATA - ) - } - - override fun onTesting() { - //展示Loading,也 就是进度条那个 - mShowLoading.postValue(true) - //设置UI正在检测中 - mCheckTips.postValue(mContext.getString(R.string.activity_temp_tips_check)) - } - } - /** * 一进来就检查一下是否有佩戴,如果已经佩戴了,那么就绑定远程服务 * 如果没有戴表,那么就不绑定服务,接收到佩戴的广播以后再绑定。 */ private fun checkWristWear() { if (!isWristWear) { - repository.bindWorkService(mContext, mTemCallback) + //展示Loading,也 就是进度条那个 + mShowLoading.postValue(true) + //设置UI正在检测中 + mCheckTips.postValue(mContext.getString(R.string.activity_temp_tips_check)) + repository.bindWorkService(mContext, remoteDataCallback) } else { //给出提示:未正确佩戴设备 mCheckTips.value = mContext.getString(R.string.no_wearing_device_tips_text) @@ -188,6 +217,11 @@ class TemperatureViewModel() : ViewModel() { const val TAG = "TemperatureViewModel" const val UPDATE_TEMPERATURE_NORMAL_DATA = 1 const val UPDATE_TEMPERATURE_FINAL_DATA = 2 + + const val DIALOG_STATE_NONE = -1 + const val DIALOG_STATE_WAITING = 0 + const val DIALOG_STATE_GETTING = 1 + } private val mIntentReceiver by lazy { @@ -204,6 +238,11 @@ class TemperatureViewModel() : ViewModel() { mContext.getString(R.string.temperature_default_text) } + + //Toast状态 + val mToastState = MutableLiveData(DIALOG_STATE_NONE) + + //关心的数据======================= val mBodyTemp by lazy { val mutableLiveData = MutableLiveData() @@ -305,7 +344,11 @@ class TemperatureViewModel() : ViewModel() { //停止Loading mShowLoading.value = false } else if (state == STATE_ANTI_ON) { - repository.bindWorkService(context, mTemCallback) + //展示Loading,也 就是进度条那个 + mShowLoading.postValue(true) + //设置UI正在检测中 + mCheckTips.postValue(mContext.getString(R.string.activity_temp_tips_check)) + repository.bindWorkService(context, remoteDataCallback) } mHasWear = state == STATE_ANTI_ON diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml deleted file mode 100644 index ebfcee0..0000000 --- a/app/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 确定 - \ No newline at end of file diff --git a/app/src/main/res/values-night/strings.xml b/app/src/main/res/values-night/strings.xml deleted file mode 100644 index ebfcee0..0000000 --- a/app/src/main/res/values-night/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 确定 - \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml deleted file mode 100644 index ebfcee0..0000000 --- a/app/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 确定 - \ No newline at end of file