From: TrillGates Date: Tue, 27 Jul 2021 07:57:51 +0000 (+0800) Subject: adjust ui for gator. X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=5fc339320b040c1375a432e64d039f55f4ebcde5;p=IcBlood.git adjust ui for gator. --- diff --git a/app/src/main/java/com/ic/blood/Gh301Activity.java b/app/src/main/java/com/ic/blood/Gh301Activity.java index 4cd7e98..ee8b273 100644 --- a/app/src/main/java/com/ic/blood/Gh301Activity.java +++ b/app/src/main/java/com/ic/blood/Gh301Activity.java @@ -8,12 +8,16 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import com.ic.blood.fragment.HeartRateFragment; +import com.ic.blood.fragment.HeartRateAndBloodOxygenFragment; +import com.ic.blood.fragment.JustHeartRateFragment; import com.ic.blood.fragment.OxygenFragment; import com.ic.blood.fragment.SelectFragment; import com.ic.blood.util.SystemUtils; public class Gh301Activity extends AppCompatActivity { + + private String isShowBothInfo; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -24,10 +28,16 @@ public class Gh301Activity extends AppCompatActivity { String isGh301 = SystemUtils .getSystemPropertiesString("persist.sys.is_gh301", "false"); + //hr:heart_rate,br:blood oxygen + isShowBothInfo = SystemUtils + .getSystemPropertiesString("persist.sys.hr_and_bo", + "false"); + if (Boolean.parseBoolean(isGh301)) { - showFragment(HeartRateFragment.newInstance()); - }else { + showFragment(Boolean.parseBoolean(isShowBothInfo) ? HeartRateAndBloodOxygenFragment.newInstance() : + JustHeartRateFragment.newInstance()); + } else { showFragment(SelectFragment.newInstance()); } } @@ -44,7 +54,9 @@ public class Gh301Activity extends AppCompatActivity { } public void showHeartRatePage() { - showFragment(HeartRateFragment.newInstance()); + showFragment(Boolean.parseBoolean(isShowBothInfo) ? + HeartRateAndBloodOxygenFragment.newInstance() : + JustHeartRateFragment.newInstance()); } @Override diff --git a/app/src/main/java/com/ic/blood/WelcomeActivity.java b/app/src/main/java/com/ic/blood/WelcomeActivity.java index bfbc2cc..0c332d5 100644 --- a/app/src/main/java/com/ic/blood/WelcomeActivity.java +++ b/app/src/main/java/com/ic/blood/WelcomeActivity.java @@ -18,7 +18,7 @@ public class WelcomeActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //判断是不是gh301 + //判断是不是gh301(gator) String isGh301 = SystemUtils .getSystemPropertiesString("persist.sys.is_gh301", "false"); diff --git a/app/src/main/java/com/ic/blood/fragment/HeartRateAndBloodOxygenFragment.java b/app/src/main/java/com/ic/blood/fragment/HeartRateAndBloodOxygenFragment.java new file mode 100644 index 0000000..023b298 --- /dev/null +++ b/app/src/main/java/com/ic/blood/fragment/HeartRateAndBloodOxygenFragment.java @@ -0,0 +1,213 @@ +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.FragmentHeartRateBothBinding; +import com.ic.blood.model.BloodCheckModel; +import com.ic.blood.presenter.BloodPresenter; +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 HeartRateAndBloodOxygenFragment extends Fragment { + + private static final String TAG = "BloodFragment"; + + private Context mContext; + private BloodApp mApp; + + private FragmentHeartRateBothBinding bloodBinding; + + private PowerManager.WakeLock mWakeLock = null; + private BloodCheckModel bloodModel; + + private GifDrawable gifFromAssets; + + private DelayExecuteHandler delayHandler; + private GifImageView gifImageView; + private ImageView heartRateView; + + public static HeartRateAndBloodOxygenFragment newInstance() { + return new HeartRateAndBloodOxygenFragment(); + } + + @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(); + delayHandler = new DelayExecuteHandler(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + //判断是哪个,显示一个,还是显示两个数据 + + bloodBinding = FragmentHeartRateBothBinding.inflate(inflater, container, false); + bloodBinding.setIsShowTips(true); + bloodBinding.setTopTips(getString(R.string.tips_quiet_please)); + initBloodModel(); + setGifDrawable(); + //绑定远程服务 + bloodModel.onCreateView(); + bloodModel.setActivity(getActivity()); + return bloodBinding.getRoot(); + } + + @Override + public void onResume() { + super.onResume(); + initWakeLock(mContext); + 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(); + } + + private void initBloodModel() { + //观察状态的变化 + BloodCheckModel.Factory factory = new BloodCheckModel.Factory(mApp); + bloodModel = new ViewModelProvider(this, factory).get(BloodCheckModel.class); + bloodModel.updateTestType(BloodPresenter.TestType.JUST_HEART_RATE); + 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 == 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(HeartRateAndBloodOxygenFragment fragment) { + mFragment = new WeakReference<>(fragment); + } + + @Override + public void dispatchMessage(@NonNull Message msg) { + super.dispatchMessage(msg); + HeartRateAndBloodOxygenFragment heartRateFragment = mFragment.get(); + if (heartRateFragment != null) { + heartRateFragment.releaseWakeLock(); + } + } + } +} diff --git a/app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java b/app/src/main/java/com/ic/blood/fragment/JustHeartRateFragment.java similarity index 92% rename from app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java rename to app/src/main/java/com/ic/blood/fragment/JustHeartRateFragment.java index 74249a5..385ea81 100644 --- a/app/src/main/java/com/ic/blood/fragment/HeartRateFragment.java +++ b/app/src/main/java/com/ic/blood/fragment/JustHeartRateFragment.java @@ -33,9 +33,9 @@ import static android.content.Context.POWER_SERVICE; /** - * 这个是只有心率和血氧的UI + * 这个是只有心率UI */ -public class HeartRateFragment extends Fragment { +public class JustHeartRateFragment extends Fragment { private static final String TAG = "BloodFragment"; @@ -53,8 +53,8 @@ public class HeartRateFragment extends Fragment { private GifImageView gifImageView; private ImageView heartRateView; - public static HeartRateFragment newInstance() { - return new HeartRateFragment(); + public static JustHeartRateFragment newInstance() { + return new JustHeartRateFragment(); } @Override @@ -73,6 +73,8 @@ public class HeartRateFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + //判断是哪个,显示一个,还是显示两个数据 + bloodBinding = FragmentHeartRateBinding.inflate(inflater, container, false); bloodBinding.setIsShowTips(true); bloodBinding.setTopTips(getString(R.string.tips_quiet_please)); @@ -151,7 +153,7 @@ public class HeartRateFragment extends Fragment { @SuppressLint("InvalidWakeLockTag") private void initWakeLock(Context context) { PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE); - if (powerManager != null && mWakeLock==null) { + if (powerManager != null && mWakeLock == null) { mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "BloodWakeLock"); } } @@ -193,16 +195,16 @@ public class HeartRateFragment extends Fragment { } private static class DelayExecuteHandler extends Handler { - private final WeakReference mFragment; + private final WeakReference mFragment; - public DelayExecuteHandler(HeartRateFragment fragment) { + public DelayExecuteHandler(JustHeartRateFragment fragment) { mFragment = new WeakReference<>(fragment); } @Override public void dispatchMessage(@NonNull Message msg) { super.dispatchMessage(msg); - HeartRateFragment heartRateFragment = mFragment.get(); + JustHeartRateFragment heartRateFragment = mFragment.get(); if (heartRateFragment != null) { heartRateFragment.releaseWakeLock(); } diff --git a/app/src/main/res/layout/fragment_heart_rate_both.xml b/app/src/main/res/layout/fragment_heart_rate_both.xml new file mode 100644 index 0000000..569f2f7 --- /dev/null +++ b/app/src/main/res/layout/fragment_heart_rate_both.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +