From: TrillGates Date: Thu, 3 Jun 2021 02:22:20 +0000 (+0800) Subject: publish version ICL02Blood_V74_202106031018_release X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=b8cb31cef1731e5ff3e135edc3d8e960847a7254;p=IcBlood.git publish version ICL02Blood_V74_202106031018_release --- diff --git a/app/release/ICL02Blood_V66_202102011414_release.apk b/app/release/ICL02Blood_V66_202102011414_release.apk deleted file mode 100644 index 03dad4c..0000000 Binary files a/app/release/ICL02Blood_V66_202102011414_release.apk and /dev/null differ diff --git a/app/release/ICL02Blood_V74_202106031018_release.apk b/app/release/ICL02Blood_V74_202106031018_release.apk new file mode 100644 index 0000000..dbcf2e3 Binary files /dev/null and b/app/release/ICL02Blood_V74_202106031018_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index c17504c..8445a0b 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":66,"versionName":"202102011414","enabled":true,"outputFile":"ICL02Blood_V66_202102011414_release.apk","fullName":"release","baseName":"release"},"path":"ICL02Blood_V66_202102011414_release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":74,"versionName":"202106031018","enabled":true,"outputFile":"ICL02Blood_V74_202106031018_release.apk","fullName":"release","baseName":"release"},"path":"ICL02Blood_V74_202106031018_release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl index 296985d..53f13bb 100644 --- a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl @@ -9,4 +9,5 @@ interface IHeartRateSensorCallback { oneway void onHeartRateUpdate(in HeartRate heartRate); oneway void onGettingData(); oneway void onWaiting(); + oneway void onNoWear(); } \ No newline at end of file diff --git a/app/src/main/assets/only_hr_check.gif b/app/src/main/assets/only_hr_check.gif index 67011c6..250f036 100644 Binary files a/app/src/main/assets/only_hr_check.gif and b/app/src/main/assets/only_hr_check.gif differ diff --git a/app/src/main/java/com/ic/blood/BloodActivity.java b/app/src/main/java/com/ic/blood/BloodActivity.java index 6004406..fe46676 100644 --- a/app/src/main/java/com/ic/blood/BloodActivity.java +++ b/app/src/main/java/com/ic/blood/BloodActivity.java @@ -9,10 +9,16 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.net.wifi.aware.IdentityChangedListener; import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; import android.view.WindowManager; import com.ic.blood.fragment.BloodFragment; +import com.ic.blood.fragment.HeartRateFragment; +import com.ic.blood.util.IcLog; +import com.ic.blood.util.SystemUtils; public class BloodActivity extends AppCompatActivity { @@ -25,8 +31,21 @@ public class BloodActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blood); fragmentManager = getSupportFragmentManager(); - commitFragment(BloodFragment.newInstance()); - + try { + String noSupportBlood = SystemUtils + .getSystemPropertiesString("persist.sys.no_blood_pressure", + "false"); + Log.d(TAG, "protocolCode == > " + noSupportBlood); + if ("false".equals(noSupportBlood)) { + commitFragment(HeartRateFragment.newInstance()); + } else { + commitFragment(BloodFragment.newInstance()); + } + } catch (Exception e) { + e.printStackTrace(); + commitFragment(BloodFragment.newInstance()); + } + IcLog.d("TAG", "onCreate..."); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(screenOnOffReceiver, intentFilter); 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 9a037a4..f50a476 100644 --- a/app/src/main/java/com/ic/blood/fragment/BloodFragment.java +++ b/app/src/main/java/com/ic/blood/fragment/BloodFragment.java @@ -22,6 +22,7 @@ import com.ic.blood.R; import com.ic.blood.databinding.FragmentBloodBinding; import com.ic.blood.model.BloodCheckModel; import com.ic.blood.util.IcLog; +import com.ic.blood.util.SystemUtils; import java.io.IOException; import java.lang.ref.WeakReference; @@ -47,6 +48,8 @@ public class BloodFragment extends Fragment { private GifDrawable gifFromAssets; private DelayExecuteHandler delayHandler; + private GifImageView gifImageView; + private ImageView heartRateView; public static BloodFragment newInstance() { return new BloodFragment(); @@ -87,15 +90,17 @@ public class BloodFragment extends Fragment { if (mWakeLock != null) { mWakeLock.acquire(); } - + gifImageView.setVisibility(View.VISIBLE); + heartRateView.setVisibility(View.GONE); gifFromAssets.start(); } @Override public void onPause() { super.onPause(); + gifImageView.setVisibility(View.GONE); + heartRateView.setVisibility(View.VISIBLE); gifFromAssets.stop(); - releaseWakeLock(); IcLog.i(TAG, "finish"); ((BloodActivity) mContext).finish(); @@ -116,6 +121,8 @@ public class BloodFragment extends Fragment { bloodBinding.setHeartValue(value[2]); bloodBinding.setOxygenValue(value[3]); gifFromAssets.stop(); + gifImageView.setVisibility(View.GONE); + heartRateView.setVisibility(View.VISIBLE); delayHandler.sendMessageDelayed(new Message(), 1000 * 10); }); @@ -158,7 +165,8 @@ public class BloodFragment extends Fragment { } private void setGifDrawable() { - GifImageView gifImageView = bloodBinding.icHeartGif; + gifImageView = bloodBinding.icHeartGif; + heartRateView = bloodBinding.heartRateView; gifImageView.setScaleType(ImageView.ScaleType.CENTER); try { gifFromAssets = new GifDrawable(mContext.getAssets(), "only_hr_check.gif"); diff --git a/app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java b/app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java new file mode 100644 index 0000000..7099a76 --- /dev/null +++ b/app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java @@ -0,0 +1,208 @@ +package com.ic.blood.fragment; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.PowerManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +import com.ic.blood.BloodActivity; +import com.ic.blood.BloodApp; +import com.ic.blood.R; +import com.ic.blood.databinding.FragmentBloodBinding; +import com.ic.blood.databinding.FragmentOxygenHeartRateBinding; +import com.ic.blood.model.BloodCheckModel; +import com.ic.blood.util.IcLog; + +import java.io.IOException; +import java.lang.ref.WeakReference; + +import pl.droidsonroids.gif.GifDrawable; +import pl.droidsonroids.gif.GifImageView; + +import static android.content.Context.POWER_SERVICE; + + +/** + * 这个是只有心率和血氧的UI + */ +public class HeartRateFragment extends Fragment { + + private static final String TAG = "BloodFragment"; + + private Context mContext; + private BloodApp mApp; + + private FragmentOxygenHeartRateBinding bloodBinding; + + private PowerManager.WakeLock mWakeLock = null; + private BloodCheckModel bloodModel; + + private GifDrawable gifFromAssets; + + private DelayExecuteHandler delayHandler; + private GifImageView gifImageView; + private ImageView heartRateView; + + public static HeartRateFragment newInstance() { + return new HeartRateFragment(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + this.mContext = context; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mApp = (BloodApp) mContext.getApplicationContext(); + initWakeLock(mContext); + delayHandler = new DelayExecuteHandler(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + bloodBinding = FragmentOxygenHeartRateBinding.inflate(inflater, container, false); + bloodBinding.setIsShowTips(true); + bloodBinding.setTopTips(getString(R.string.tips_quiet_please)); + initBloodModel(); + setGifDrawable(); + //绑定远程服务 + bloodModel.onCreateView(); + return bloodBinding.getRoot(); + } + + @Override + public void onResume() { + super.onResume(); + if (mWakeLock != null) { + mWakeLock.acquire(); + } + gifImageView.setVisibility(View.VISIBLE); + heartRateView.setVisibility(View.GONE); + gifFromAssets.start(); + } + + @Override + public void onPause() { + super.onPause(); + gifImageView.setVisibility(View.GONE); + heartRateView.setVisibility(View.VISIBLE); + gifFromAssets.stop(); + releaseWakeLock(); + IcLog.i(TAG, "finish"); + ((BloodActivity) mContext).finish(); + } + + 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); + bloodBinding.setBottomTips(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]); + gifFromAssets.stop(); + gifImageView.setVisibility(View.GONE); + heartRateView.setVisibility(View.VISIBLE); + delayHandler.sendMessageDelayed(new Message(), 1000 * 10); + }); + + bloodModel.getObsBloodTempValue().observe(getViewLifecycleOwner(), value -> { + bloodBinding.setIsShowTips(false); + bloodBinding.setHighValue(value[0]); + bloodBinding.setLowValue(value[1]); + bloodBinding.setHeartValue(value[2]); + bloodBinding.setOxygenValue(value[3]); + }); + + //bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(), tips -> { + //这里做法不好呀,连文字资源都由底层的ID来控制 + //这样子耦合度非常高了,所以注释了,不使用这种方式更新提示。 + //bloodBinding.setIsShowTips(true); + //bloodBinding.setTopTips(tips[0]); + //bloodBinding.setBottomTips(tips[1]); + //}); + + bloodModel.getObsCheckEnd().observe(getViewLifecycleOwner(), end -> { + IcLog.i(TAG, "finish"); + ((BloodActivity) mContext).finish(); + }); + } + + @SuppressLint("InvalidWakeLockTag") + private void initWakeLock(Context context) { + PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE); + if (powerManager != null) { + mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "BloodWakeLock"); + } + } + + private void releaseWakeLock() { + IcLog.i(TAG, "Release WakeLock"); + if (mWakeLock != null) { + mWakeLock.release(); + } + mWakeLock = null; + } + + private void setGifDrawable() { + gifImageView = bloodBinding.icHeartGif; + heartRateView = bloodBinding.heartRateView; + gifImageView.setScaleType(ImageView.ScaleType.CENTER); + try { + gifFromAssets = new GifDrawable(mContext.getAssets(), "only_hr_check.gif"); + gifImageView.setImageDrawable(gifFromAssets); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + IcLog.i(TAG, "onDestroy"); + + //取消广播注册,释放资源 + bloodModel.onViewDestroy(); + bloodModel = null; + + if (gifFromAssets != null) { + gifFromAssets.recycle(); + } + + delayHandler = null; + } + + private static class DelayExecuteHandler extends Handler { + private final WeakReference mFragment; + + public DelayExecuteHandler(HeartRateFragment fragment) { + mFragment = new WeakReference(fragment); + } + + @Override + public void dispatchMessage(@NonNull Message msg) { + super.dispatchMessage(msg); + mFragment.get().releaseWakeLock(); + } + } +} 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 745df8a..6d3760c 100644 --- a/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java +++ b/app/src/main/java/com/ic/blood/presenter/BloodPresenter.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.IBinder; +import android.os.RemoteException; import android.util.SparseArray; import androidx.lifecycle.LiveData; @@ -271,6 +272,11 @@ public class BloodPresenter { //让UI显示保持安静,准备测试的玩意 } + @Override + public void onNoWear() { + + } + }; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc2444..737dd14 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -3,8 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".MainActivity"> + android:layout_height="match_parent"> - + + + @@ -32,7 +34,7 @@ - + @@ -47,13 +49,15 @@ android:id="@+id/ic_heart_gif" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_gravity="center" /> - - + android:visibility="gone" /> + + + + android:visibility="@{isShowTips ? View.VISIBLE : View.GONE}" /> + android:visibility="@{isShowTips ? View.VISIBLE : View.GONE}" /> + android:id="@+id/ic_heart_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginTop="40dp" + android:visibility="@{isShowTips ? View.GONE : View.VISIBLE}"> - - + + + + android:text="@{oxygenValue}" /> @@ -133,15 +138,24 @@ style="@style/bloodTextStyle" android:layout_below="@id/ic_high_name" android:layout_centerHorizontal="true" - android:text="@{highValue}"/> + android:text="@{highValue}" /> + + + @@ -155,7 +169,7 @@ style="@style/bloodTextStyle" android:layout_below="@id/ic_low_name" android:layout_centerHorizontal="true" - android:text="@{lowValue}"/> + android:text="@{lowValue}" /> diff --git a/app/src/main/res/layout/fragment_oxygen_heart_rate.xml b/app/src/main/res/layout/fragment_oxygen_heart_rate.xml new file mode 100644 index 0000000..c486ca9 --- /dev/null +++ b/app/src/main/res/layout/fragment_oxygen_heart_rate.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-mdpi/default_heart_rate_icon.png b/app/src/main/res/mipmap-mdpi/default_heart_rate_icon.png new file mode 100644 index 0000000..684c52b Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/default_heart_rate_icon.png differ diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d87cbee..27ec637 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -14,6 +14,7 @@ wrap_content wrap_content #FFFFFF + bold 32sp diff --git a/app/version_code.properties b/app/version_code.properties index e611164..a91baa2 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Mon Feb 01 14:14:33 CST 2021 -VERSION_CODE=66 +#Thu Jun 03 10:18:21 CST 2021 +VERSION_CODE=74