From: kfl_614 Date: Mon, 30 Nov 2020 08:46:20 +0000 (+0800) Subject: check wear state before get blood info. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=2ca44d4da9e16aeef060ce299e07570f3e9d4d0c;p=IcBlood.git check wear state before get blood info. --- diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5cd135a..9bba60d 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -14,6 +14,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index b6ea2b1..79dcac5 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,18 @@ - + + + + + \ No newline at end of file diff --git a/.idea/qaplug_profiles.xml b/.idea/qaplug_profiles.xml index 07de02a..3dfd21f 100644 --- a/.idea/qaplug_profiles.xml +++ b/.idea/qaplug_profiles.xml @@ -1,8 +1,465 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/ic/blood/fragment/BloodFragment.java b/app/src/main/java/com/ic/blood/fragment/BloodFragment.java index 3373484..dcaa259 100644 --- a/app/src/main/java/com/ic/blood/fragment/BloodFragment.java +++ b/app/src/main/java/com/ic/blood/fragment/BloodFragment.java @@ -75,7 +75,8 @@ public class BloodFragment extends Fragment { initBloodModel(); setGifDrawable(); - bloodModel.registerScreenReceiver(); + //绑定远程服务 + bloodModel.onCreateView(); return bloodBinding.getRoot(); } @@ -101,17 +102,20 @@ public class BloodFragment extends Fragment { } private void initBloodModel() { + //观察状态的变化 BloodCheckModel.Factory factory = new BloodCheckModel.Factory(mApp); bloodModel = new ViewModelProvider(this, factory).get(BloodCheckModel.class); + bloodModel.getObsStateTips().observe(this, value -> { + bloodBinding.setFinishTips(value); + }); bloodModel.getObsBloodValue().observe(getViewLifecycleOwner(), value -> { bloodBinding.setIsShowTips(false); bloodBinding.setHighValue(value[0]); bloodBinding.setLowValue(value[1]); bloodBinding.setHeartValue(value[2]); bloodBinding.setOxygenValue(value[3]); - bloodBinding.setFinishTips(getString(R.string.tips_finish_check)); gifFromAssets.stop(); - delayHandler.sendMessageDelayed(new Message(),1000*10); + delayHandler.sendMessageDelayed(new Message(), 1000 * 10); }); bloodModel.getObsBloodTempValue().observe(getViewLifecycleOwner(), value -> { @@ -120,7 +124,6 @@ public class BloodFragment extends Fragment { bloodBinding.setLowValue(value[1]); bloodBinding.setHeartValue(value[2]); bloodBinding.setOxygenValue(value[3]); - bloodBinding.setFinishTips(getString(R.string.tips_ing_check)); }); bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(), tips -> { @@ -167,14 +170,15 @@ public class BloodFragment extends Fragment { super.onDestroy(); IcLog.i(TAG, "onDestroy"); - bloodModel.unregisterScreenReceiver(); + //取消广播注册,释放资源 + bloodModel.onViewDestroy(); bloodModel = null; if (gifFromAssets != null) { gifFromAssets.recycle(); } - delayHandler=null; + delayHandler = null; } private static class DelayExecuteHandler extends Handler { diff --git a/app/src/main/java/com/ic/blood/model/BloodCheckModel.java b/app/src/main/java/com/ic/blood/model/BloodCheckModel.java index 0434991..070ef48 100644 --- a/app/src/main/java/com/ic/blood/model/BloodCheckModel.java +++ b/app/src/main/java/com/ic/blood/model/BloodCheckModel.java @@ -16,6 +16,8 @@ public class BloodCheckModel extends AndroidViewModel { private final BloodPresenter bloodPresenter; private LiveData mObsBloodValue; + //底层状态的文字提示,观察就好 + private LiveData mObsStateTips; private LiveData mObsBloodTempValue; private LiveData mObsTipsInfo; private LiveData mObsCheckEnd; @@ -26,9 +28,15 @@ public class BloodCheckModel extends AndroidViewModel { mObsBloodValue = bloodPresenter.getObsBloodValue(); mObsTipsInfo = bloodPresenter.getObsTipsInfo(); mObsCheckEnd = bloodPresenter.getObsCheckEnd(); + mObsStateTips = bloodPresenter.getObsStateTips(); mObsBloodTempValue = bloodPresenter.getObsBloodTempValue(); } + + public LiveData getObsStateTips() { + return mObsStateTips; + } + public LiveData getObsBloodValue() { return mObsBloodValue; } @@ -45,20 +53,20 @@ public class BloodCheckModel extends AndroidViewModel { return mObsCheckEnd; } - public void startCheckBlood(){ + public void startCheckBlood() { bloodPresenter.startCheckBlood(); } - public void stopCheckBlood(){ + public void stopCheckBlood() { bloodPresenter.stopCheckBlood(); } - public void registerScreenReceiver(){ - bloodPresenter.registerScreenReceiver(); + public void onCreateView() { + bloodPresenter.onCreate(); } - public void unregisterScreenReceiver(){ - bloodPresenter.unregisterScreenReceiver(); + public void onViewDestroy() { + bloodPresenter.release(); } public static class Factory extends ViewModelProvider.NewInstanceFactory { diff --git a/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java b/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java index f57b64d..c5a5dca 100644 --- a/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java +++ b/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java @@ -12,6 +12,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.util.SparseArray; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.ic.aidl.blood.BloodState; @@ -20,15 +21,18 @@ import com.ic.aidl.blood.IBloodRemoteService; import com.ic.blood.R; import com.ic.blood.util.IcLog; import com.ic.blood.util.ServiceUtil; +import com.ic.blood.util.SystemUtils; public class BloodPresenter { private static final String TAG = "BloodPresenter"; + public static final String ACTION_ANTI_OFF0 = "com.ic.ACTION_ANTIOFF"; private Context mContext; private MutableLiveData mObsBloodValue; + private MutableLiveData mObsStateTips; private MutableLiveData mObsTipsInfo; private MutableLiveData mObsCheckEnd; private MutableLiveData mObsBloodTempValue; @@ -36,6 +40,8 @@ public class BloodPresenter { private IBloodRemoteService mService; private SparseArray mTipsSpares; + //判断有没有配戴的,如果没有配戴的话,就不更新数据了 + private boolean mHasWear = false; public BloodPresenter(Context context) { this.mContext = context; @@ -51,6 +57,7 @@ public class BloodPresenter { mObsBloodValue = new MutableLiveData<>(); mObsTipsInfo = new MutableLiveData<>(); + mObsStateTips = new MutableLiveData<>(); mObsCheckEnd = new MutableLiveData<>(); mObsBloodTempValue = new MutableLiveData<>(); } @@ -71,32 +78,91 @@ public class BloodPresenter { return mObsBloodTempValue; } - public void registerScreenReceiver() { - ServiceUtil.bindServiceUtil(mContext, "com.ic.action.WORK_SERVICE", connection, mContext.getPackageName()); + + /** + * 绑定远程服务 + */ + public void onCreate() { + //注册广播接收者 + //注册监听是否有佩戴的广播 + IntentFilter antiStateFilter = new IntentFilter(); + antiStateFilter.addAction(ACTION_ANTI_OFF0); + mContext.registerReceiver(mAntiStateReceiver, antiStateFilter); + boolean isAntiOff = SystemUtils.getSystemPropertiesBoolean("persist.sys.ic_antioff", true); + this.mHasWear = !isAntiOff; + IcLog.i(TAG, "isAntiOff == > " + isAntiOff); + //判断当前是否有配戴 + if (!isAntiOff) { + //配戴了 + bindRemoteService(); + } } - public void unregisterScreenReceiver() { + //integer eventID =1 脱落, eventID =0 佩戴 + public static String KEY_ANTI_EVENT = "eventID"; + public static final int STATE_ANTI_ON = 0; + public static final int STATE_ANTI_OFF = 1; + public static final int STATE_ANTI_NONE = -1; + + private BroadcastReceiver mAntiStateReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + //如果来了佩戴的广播,判断到没有绑定远程服务的话,那么就绑定吧 + int state = intent.getIntExtra(KEY_ANTI_EVENT, -1); + IcLog.i(TAG, "on AntiStateChange...." + state); + if (state == STATE_ANTI_NONE) { + IcLog.i(TAG, "state error === > " + state); + return; + } + if (state == STATE_ANTI_OFF) { + //手表脱掉了0 + } else if (state == STATE_ANTI_ON && mService == null) { + //配戴了,但是还没有连接远程服务 + bindRemoteService(); + } + + mHasWear = state == STATE_ANTI_ON; + if (mHasWear) { + //判断状态,如果已经检测完了,就显示检测完成 + // 按客户需求,马上进来显示检测完成,看起来不爽 + startCheckBlood(); + } + } + }; + + private void bindRemoteService() { + ServiceUtil.bindServiceUtil(mContext, + "com.ic.action.WORK_SERVICE", + connection, + mContext.getPackageName()); + } + + public void release() { try { - if(mService != null){ + if (mService != null) { mService.unregisterCallback(bloodInterface); } ServiceUtil.unBindServiceUtil(mContext, connection); } catch (Exception e) { - IcLog.e(TAG, "unregisterScreenReceiver",e); - }finally { - mService=null; - bloodInterface=null; + IcLog.e(TAG, "unregisterScreenReceiver", e); + } finally { + mService = null; + bloodInterface = null; } - connection = null; + if (mAntiStateReceiver != null) { + IcLog.d(TAG, "mAntiStateReceiver UNREGISTER."); + mContext.unregisterReceiver(mAntiStateReceiver); + } } public void startCheckBlood() { if (mService != null) { + //处理UI变化 try { mService.startCheckBlood(); } catch (Exception e) { - IcLog.e(TAG, "startCheckBlood",e); + IcLog.e(TAG, "startCheckBlood", e); } } } @@ -106,7 +172,7 @@ public class BloodPresenter { try { mService.stopCheckBlood(); } catch (Exception e) { - IcLog.e(TAG, "stopCheckBlood",e); + IcLog.e(TAG, "stopCheckBlood", e); } } } @@ -118,7 +184,7 @@ public class BloodPresenter { } } - private void updateBoolValue(int hv, int lv, int hh,int oxygen) { + private void updateBoolValue(int hv, int lv, int hh, int oxygen) { if (mObsBloodValue != null) { mObsBloodValue.postValue(new String[]{ String.valueOf(hv), @@ -129,8 +195,6 @@ public class BloodPresenter { } - - private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { @@ -139,7 +203,7 @@ public class BloodPresenter { mService.registerCallback(bloodInterface); startCheckBlood(); } catch (Exception e) { - IcLog.e(TAG, "ServiceConnection",e); + IcLog.e(TAG, "ServiceConnection", e); } } @@ -153,17 +217,29 @@ public class BloodPresenter { @Override public void updateBloodCheckTemp(int high, int low, int heart, int oxygen) throws RemoteException { - + //如果当前不有配戴,就不更新了 + if (!mHasWear) { + IcLog.d(TAG, "have't wear device height -- > " + + high + " low == > " + low + + " heart === > " + heart + + " oxygen == > " + oxygen); + mObsStateTips.postValue(mContext.getString(R.string.tips_not_wear)); + return; + } + //测试的数值 mObsBloodTempValue.postValue(new String[]{ String.valueOf(high), String.valueOf(low), String.valueOf(heart), String.valueOf(oxygen)}); + mObsStateTips.postValue(mContext.getString(R.string.tips_ing_check)); } @Override public void updateBloodCheckResult(int high, int low, int heart, int oxygen) throws RemoteException { - updateBoolValue(high, low, heart,oxygen); + //最终结果 + updateBoolValue(high, low, heart, oxygen); + mObsStateTips.postValue(mContext.getString(R.string.tips_finish_check)); } @Override @@ -173,4 +249,7 @@ public class BloodPresenter { }; + public LiveData getObsStateTips() { + return mObsStateTips; + } } diff --git a/app/src/main/java/com/ic/blood/util/SystemUtils.java b/app/src/main/java/com/ic/blood/util/SystemUtils.java index fb0b9f5..4ded88b 100644 --- a/app/src/main/java/com/ic/blood/util/SystemUtils.java +++ b/app/src/main/java/com/ic/blood/util/SystemUtils.java @@ -1,4 +1,4 @@ -package com.ic.launcher.util; +package com.ic.blood.util; import java.io.FileInputStream; diff --git a/app/src/main/res/layout/fragment_blood.xml b/app/src/main/res/layout/fragment_blood.xml index 2ceed0a..9ca3827 100644 --- a/app/src/main/res/layout/fragment_blood.xml +++ b/app/src/main/res/layout/fragment_blood.xml @@ -79,11 +79,11 @@ android:layout_marginTop="40dp" android:visibility="@{isShowTips ? View.GONE : View.VISIBLE}"> - + +