From: snickersun Date: Mon, 10 Aug 2020 11:59:53 +0000 (+0800) Subject: release V37 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=a2f72980fe4206ae078a4088df8ea016ff0d36bf;p=factoryMode.git release V37 1、添加 测量体温窗口 2、添加通过customname 判断H88和Q3F 3、更新最新的 ICJniUtils 接口,支持IC66,IC68等新模块 4、修改温度校准窗口逻辑。支持EM7068 温度校准 --- diff --git a/app/release/FactoryMode_V37_202008101956_release.apk b/app/release/FactoryMode_V37_202008101956_release.apk new file mode 100644 index 0000000..aacb520 Binary files /dev/null and b/app/release/FactoryMode_V37_202008101956_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index a1793c7..30e78aa 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":28,"versionName":"202006261247","enabled":true,"outputFile":"FactoryMode_V28_202006261247_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V28_202006261247_release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":37,"versionName":"202008101956","enabled":true,"outputFile":"FactoryMode_V37_202008101956_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V37_202008101956_release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f835c92..42c3937 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -110,6 +110,10 @@ + + diff --git a/app/src/main/java/com/ic/jni/ICJniUtils.java b/app/src/main/java/com/ic/jni/ICJniUtils.java index ca48df9..9062096 100644 --- a/app/src/main/java/com/ic/jni/ICJniUtils.java +++ b/app/src/main/java/com/ic/jni/ICJniUtils.java @@ -2,6 +2,35 @@ package com.ic.jni; public class ICJniUtils { + public enum GSensorType + { + GSENSOR_TYPE_NONE, + GSENSOR_TYPE_QMA7981, + GSENSOR_TYPE_SC7A21, + GSENSOR_TYPE_MAX + }; + + public enum TempSensorType + { + TEMPSENSOR_TYPE_NONE, + TEMPSENSOR_TYPE_NST175, + TEMPSENSOR_TYPE_IC68, + TEMPSENSOR_TYPE_EM7068, + TEMPSENSOR_TYPE_MAX + }; + + public enum PPG_EGC_SensorType + { + PPG_EGC_TYPE_NONE, + PPG_EGC_TYPE_EM7028, + PPG_EGC_TYPE_EM7068, + PPG_EGC_TYPE_HRS3313, + PPG_EGC_TYPE_HRS3301, + PPG_EGC_TYPE_IC66, + PPG_EGC_TYPE_PAH8002, + PPG_EGC_TYPE_MAX + }; + public ICJniUtils(){ } @@ -12,75 +41,201 @@ public class ICJniUtils { } /***************计步控制************************************/ - /*运行此函数清除 系统计步为0*/ + /*** + * 运行此函数清除 系统计步为0,一版在午夜执行 + * @return + */ public static native int resetStepCount(); - /*获取当前步数*/ + /*** + * 获取当前步数 + * @return + */ public static native int getStepCount(); - /*开启计步 不必判断返回值*/ + + /*** + * 开启计步 不必判断返回值 + * @return + */ public static native int enablePedometer(); - /*停止计步 不必判断返回值*/ + + /*** + * 停止计步 不必判断返回值 + * @return + */ public static native int disablePedometer(); - /*检测计步当前是否开启 1开启,0 关闭*/ + /*** + * 检测计步当前是否开启 + * @return + * 1开启,0 关闭 + */ public static native int isPedometerEnabled(); - /*保存当前步数(getStepCount取得的值)到磁盘 不必判断返回值*/ + /*** + * 获取当前计步器(GSensor)类型 GSensorType + * @return + * 不存在返回 GSENSOR_TYPE_NONE,否则返回Gsensor类型 + * 理论上此设备必选,一定存在。 + */ + public static native int getGsensorType(); + + /*保存当前步数(getStepCount取得的值)到磁盘 不必判断返回值 + * 为了兼容,已经不再使用 + * */ public static native int saveStepCount(); - /*恢复保存时的步数数据,下次getStepCount会在恢复的值上增加 不必判断返回值*/ + /*恢复保存时的步数数据,下次getStepCount会在恢复的值上增加 不必判断返回值 + * * 为了兼容,已经不再使用 + * */ public static native int recoverStepCount(); - /******心率,血压****************************************/ - /*检查 PPG硬件是否存在,返回 1 存在,0 不存在*/ + /*** + * 检查 PPG硬件是否存在,返回PPG_EGC_SensorType + * @return + * 返回PPG_EGC_TYPE_NONE代表不存在,否则返回 传感器类型 + */ public static native int isPPGavailable(); - /*开启心率血压检测*/ + /** + * 开启心率血压检测 + * @return + */ public static native int enablePPG(); - /*停止心率血压检测*/ + /*** + * 停止心率血压检测 + * @return + */ public static native int disablePPG(); - /*返回 心率值 每分钟跳动次数, 通过这个心率>0 判断是否已经有检测结果, - 有就可以直接通过getHighBloodPressure 和 getLowBloodPressure 获取血压高压低压值*/ - public static native int getPPG(); - /* 返回PPG 运行状态, 0 停止, 1,运行中*/ + + + /*** + * 返回PPG 运行状态, 0 停止, 1,运行中 + * @return + */ public static native int isPPGStarted(); - /*返回是否佩戴 0 未佩戴,1 佩戴*/ + + /*** + * 返回 心率值 每分钟跳动次数, 通过这个心率>0 判断是否已经有检测结果, + * 有就可以直接通过getHighBloodPressure 和 getLowBloodPressure 获取血压高压低压值 + * @return + */ + public static native int getPPG(); + + /*** + * 返回是否佩戴 0 未佩戴,1 佩戴 。 + * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。 + * @return + */ public static native int isWeared(); - /*获取血压高压值*/ + /*** + * 获取血压高压值 + * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。 + * @return + */ public static native int getHighBloodPressure(); - /*获取血压低压值*/ + /*** + * 获取血压低压值 + * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。 + * @return + */ public static native int getLowBloodPressure(); - /*获取血氧值*/ + /*** + * 获取血氧值 + * 请注意,此数据必须在执行 getPPG() 后才有效,否则一直为上一次的值。 + * @return + */ public static native int getSPO2(); - /*获取温度校准后= getTemperatureOrigin - adjustValue */ + /*** + * 开始温度检测,有些sensor不需要,为了兼容,请开始前执行一次,并且sleep 1秒钟 + * @return + */ + public static native int enableTemperature(); + + /*** + * 停止温度检测,有些sensor不需要,为了兼容请结束后还是要执行一次。 + * @return 返回值<0 表示失败 =>0表示成功 + */ + public static native int disableTemperature(); + + /*** + * 检查体温检测设备是否开启 + * @return 返回0 未开启 1 开启 + */ + public static native int isTemperatureDevOpened(); + /*** + * 执行温度校准操作,一版在整机生产时的恒温箱中执行 + * @param refTemp 恒温箱的温度 + * @return 返回值<0 表示失败 =>0表示成功 + */ + public static native int doTempCalibration(double refTemp); + + /*** + * 获取温度 校准后数据 单位摄氏度 + * @return 返回值<=0 表示失败 >0表示成功 + */ public static native double getTemperature(); - /*获取温度校准前*/ - public static native double getTemperatureOrigin(); - - /*设置校准参数*/ - public static native int setTemperatureAdjustValue(double value); - - /*设置校准参数*/ - public static native double getTemperatureAdjustValue(); - - /*设置当前温度标志位,实际上就是按照二进制位来定义的。 - 0、可以测温 - 第一位为1,0x1、充电超过2分钟或者充电超过2分钟后拔除5分钟内 0001 - 第二位为1,0x2、亮屏超过5分钟或者亮屏超过5分钟后灭屏5分钟内 0010 - 第三位为1,0x4、通话超过2分钟或者通话超过2分钟后挂断5分钟内 0100 - 所有大于0的都不能测温 */ + /*** + * 设置当前温度标志位, + * @param flag + * 实际上就是按照二进制位来定义的。 + * 0、可以测温 + * 第一位为1,0x1、充电超过2分钟或者充电超过2分钟后拔除5分钟内 0001 + * 第二位为1,0x2、亮屏超过5分钟或者亮屏超过5分钟后灭屏5分钟内 0010 + * 第三位为1,0x4、通话超过2分钟或者通话超过2分钟后挂断5分钟内 0100 + * 所有大于0的都不能测温 + * 注:暂时未启用,预留 + * @return + */ public static native int setTemperatureValidFlag(int flag); - /*此操作仅仅为了检查标志状态设置成功与否,标志已经在内部被使用*/ + /*** + * 此操作仅仅为了检查标志状态设置成功与否,标志已经在内部被使用 + * 注:暂时未启用,预留 + * @return + */ public static native int getTemperatureValidFlag(); + /*** + * 根据环境参考温度和腕温换算 体温 + * ic66可以直接输出体温,不需要这个公式。 + * @param wrist_temp + * 腕温 + * @param ref_temp + * 室外参考温度 + * @return 返回值<=0 表示失败 >0表示成功 + */ + public static native double getBodyTempFromWristTemp(double wrist_temp,double ref_temp); + + + /*** + * 有体温检测功能则返回 TempSensorType + * TempSensor_NONE 就表示没有体温检测功能,否则返回温度传感器类型 + * @return + */ + public static native int isTemperatureDevAvailable(); + + + /*获取温度校准前 + * 为了兼容已经不用 + * */ + public static native double getTemperatureOrigin(); + /*设置校准参数 + * * 为了兼容已经不用 + * */ + public static native int setTemperatureAdjustValue(double value); + + /*设置校准参数 + * * 为了兼容已经不用 + * */ + public static native double getTemperatureAdjustValue(); } diff --git a/app/src/main/java/mobile/miki/HeartRate.java b/app/src/main/java/mobile/miki/HeartRate.java index fa3f559..e045f88 100644 --- a/app/src/main/java/mobile/miki/HeartRate.java +++ b/app/src/main/java/mobile/miki/HeartRate.java @@ -1,6 +1,10 @@ package mobile.miki; import android.content.Intent; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -23,65 +27,83 @@ import mobile.miki.mainui.TestMainActivity; import mobile.miki.util.Config; import mobile.miki.util.Logger; -public class HeartRate extends BaseActivity implements View.OnClickListener { +public class HeartRate extends BaseActivity implements View.OnClickListener, SensorEventListener { private ButtonViewTwo buttonView; boolean running; - + public static final int TYPE_HEART_RATE = 21; Timer mTimer=null; private TextView tv_isweared; private TextView tv_ppg; - private TextView tv_temperature; + private int hrsType; + private SensorManager mSensorManager=null; + private Sensor mHeartRate=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.heartrate_layout); initView(); - int heartrate = ICJniUtils.isPPGavailable(); - Log.i("dxc", "heartrate available : " + heartrate); - - mTimer=new Timer(); - TimerTask HRTimerTask=new TimerTask() { - @Override - public void run() { - mhandler.sendEmptyMessage(0); - } - }; - mTimer.schedule(HRTimerTask,0,1000L); + int hrsType = ICJniUtils.isPPGavailable(); + Log.i("dxc", "heartrate available : " + hrsType); + if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) { + + mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); + mHeartRate = mSensorManager.getDefaultSensor(TYPE_HEART_RATE); + boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_UI); + Log.i( "dxc","Heart Rate PPG_EGC_TYPE_IC66 opened ret :: " + ret); + + } else { + mTimer = new Timer(); + TimerTask HRTimerTask = new TimerTask() { + @Override + public void run() { + mhandler.sendEmptyMessage(0); + } + }; + mTimer.schedule(HRTimerTask, 0, 1000L); + } } Handler mhandler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message message) { - if (ICJniUtils.isPPGStarted()==0){ - ICJniUtils.enablePPG(); + if(ICJniUtils.isPPGavailable()>0) { + if (ICJniUtils.isPPGStarted()==0){ + ICJniUtils.enablePPG(); + + } + int ppg = ICJniUtils.getPPG(); + int weared = ICJniUtils.isWeared(); + + String wearedstr = String.valueOf(weared); + String ppgstr = String.valueOf(ppg); + + tv_isweared.setText(wearedstr); + tv_ppg.setText(ppgstr); + Log.d("dxc","Weared:" + wearedstr + " PPG:" + ppgstr ); + }else{ + tv_isweared.setText(HeartRate.this.getResources().getString(R.string.no_heartrate)); + tv_ppg.setText(""); } - int ppg=ICJniUtils.getPPG(); - int weared=ICJniUtils.isWeared(); - double temp=ICJniUtils.getTemperature(); - double adjust=ICJniUtils.getTemperatureAdjustValue(); - String wearedstr=String.valueOf(weared); - String ppgstr=String.valueOf(ppg); - String tempstr=String.format("%1$.2f",temp); - tempstr=tempstr+" ("+String.format("%1$.2f",adjust)+")"; - tv_isweared.setText(wearedstr); - tv_ppg.setText(ppgstr); - tv_temperature.setText(tempstr); - Logger.d("Weared:"+wearedstr+" PPG:"+ppgstr+" Temperature:"+tempstr); return false; } }); @Override protected void onDestroy() { super.onDestroy(); - ICJniUtils.disablePPG(); - if(mTimer!=null) { - - mTimer.cancel(); - mTimer=null; + if ( hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) { + mSensorManager.unregisterListener(this); + Log.i( "dxc","Heart Rate PPG_EGC_TYPE_IC66 closed"); + }else if(hrsType>0) { + + ICJniUtils.disablePPG(); + if(mTimer!=null) { + mTimer.cancel(); + mTimer=null; + } } } @@ -96,7 +118,6 @@ public class HeartRate extends BaseActivity implements View.OnClickListener { tv_isweared=(TextView)findViewById(R.id.tv_weared_value); tv_ppg=(TextView)findViewById(R.id.tv_ppg_value); - tv_temperature=(TextView)findViewById(R.id.tv_temperature_value); } @@ -114,8 +135,7 @@ public class HeartRate extends BaseActivity implements View.OnClickListener { } else { startActivity(intent); } - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "true") - .commit(); + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "true").commit(); finish(); break; case R.id.btn_two_right: @@ -124,10 +144,33 @@ public class HeartRate extends BaseActivity implements View.OnClickListener { } else { startActivity(intent); } - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "false") - .commit(); + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "false").commit(); finish(); break; } } + + @Override + public void onSensorChanged(SensorEvent sensorEvent) { + float values[]=sensorEvent.values; + int length = values.length; + Log.i( "dxc","onSensorChanged() is called "+length + +" PPG = "+values[0] + +", BPH = "+values[1] + +", BPL = "+values[2] + +", spo2 = "+values[3] + +" , Weared = "+values[4] + ); + + int PPG = (int)values[0];//调用底层函数保证状态更新。 + boolean isWared = ((int)values[4] == 2); + tv_isweared.setText(isWared?1:0); + tv_ppg.setText(PPG); + /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/ + } + + @Override + public void onAccuracyChanged(Sensor sensor, int i) { + Log.i("dxc","onAccuracyChanged() is called "+sensor.getName()+" accuracy="+i); + } } diff --git a/app/src/main/java/mobile/miki/TemperatureActivity.java b/app/src/main/java/mobile/miki/TemperatureActivity.java new file mode 100644 index 0000000..f8dda2d --- /dev/null +++ b/app/src/main/java/mobile/miki/TemperatureActivity.java @@ -0,0 +1,132 @@ +package mobile.miki; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.PreferenceManager; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import com.ic.jni.ICJniUtils; + +import java.util.Timer; +import java.util.TimerTask; + +import mobile.miki.mainui.ButtonViewTwo; +import mobile.miki.mainui.TestMainActivity; +import mobile.miki.util.Config; +import mobile.miki.util.Logger; + +public class TemperatureActivity extends BaseActivity implements View.OnClickListener { + + private ButtonViewTwo buttonView; + boolean running; + + Timer mTimer=null; + + private TextView tv_temperature; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.temperature_layout); + initView(); + int temper = ICJniUtils.isTemperatureDevAvailable(); + Log.i("dxc", "Temperature available : " + temper); + + if (temper>0){ + ICJniUtils.enableTemperature(); + mTimer=new Timer(); + TimerTask HRTimerTask=new TimerTask() { + @Override + public void run() { + mhandler.sendEmptyMessage(0); + } + }; + mTimer.schedule(HRTimerTask,500,1000L); + + }else{ + this.tv_temperature.setText(this.getResources().getString(R.string.no_temperature)); + Log.i("dxc","No temperature!"); + } + } + + Handler mhandler=new Handler(new Handler.Callback() { + @Override + public boolean handleMessage(Message message) { + + + double temp=ICJniUtils.getTemperature(); + //double adjust=ICJniUtils.getTemperatureAdjustValue(); + + String tempstr=String.format("%1$.2f",temp); + // tempstr=tempstr+" ("+String.format("%1$.2f",adjust)+")"; + + tv_temperature.setText(tempstr); + Logger.d("Temperature:"+tempstr); + return false; + } + }); + @Override + protected void onDestroy() { + super.onDestroy(); + // ICJniUtils.disablePPG(); + + int temper = ICJniUtils.isTemperatureDevAvailable(); + Log.i("dxc", "Temperature available : " + temper); + + if (temper>0) { + if(mTimer!=null) { + + mTimer.cancel(); + mTimer=null; + } + ICJniUtils.disableTemperature(); + }else{ + Log.i("dxc","No temperature!"); + } + + } + + + + private void initView() { + buttonView = (ButtonViewTwo) findViewById(R.id.btn_set); + buttonView.btn_left.setOnClickListener(this); + buttonView.btn_right.setOnClickListener(this); + buttonView.setSuccessColor(); + buttonView.btn_left.setClickable(true); + tv_temperature=(TextView)findViewById(R.id.tv_temperature_value); + + } + + @Override + public void onClick(View view) { + Intent intent = Config.getNextTestIntent(this,this.getClass());//new Intent(this, SimDetectActivity.class); + intent.putExtra("running", true); + Intent intent1 = new Intent(this, TestMainActivity.class); + // TestResult testResult = (TestResult) getApplicationContext(); + switch (view.getId()) { + + case R.id.btn_two_left: + if (!running) { + startActivity(intent1); + } else { + startActivity(intent); + } + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("temperature", "true").commit(); + finish(); + break; + case R.id.btn_two_right: + if (!running) { + startActivity(intent1); + } else { + startActivity(intent); + } + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("temperature", "false").commit(); + finish(); + break; + } + } +} diff --git a/app/src/main/java/mobile/miki/TemperatureAdjustActivity.java b/app/src/main/java/mobile/miki/TemperatureAdjustActivity.java index de21e1d..0a01d0c 100644 --- a/app/src/main/java/mobile/miki/TemperatureAdjustActivity.java +++ b/app/src/main/java/mobile/miki/TemperatureAdjustActivity.java @@ -1,5 +1,6 @@ package mobile.miki; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.hardware.Sensor; @@ -22,14 +23,20 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.TimeUnit; import mobile.miki.mainui.ButtonViewTwo; import mobile.miki.mainui.TestMainActivity; import mobile.miki.mainui.TestMainList; import mobile.miki.util.Config; import mobile.miki.util.Logger; +import rx.Observable; +import rx.functions.Action1; -public class TemperatureAdjustActivity extends BaseActivity implements View.OnClickListener { +import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP; +import static android.os.PowerManager.SCREEN_DIM_WAKE_LOCK; + +public class TemperatureAdjustActivity extends Activity implements View.OnClickListener { private ButtonViewTwo buttonView; boolean running; @@ -48,15 +55,20 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl setContentView(R.layout.temperature_adjust_layout); initView(); - timestamp_start=System.currentTimeMillis(); - mTestTimer=new Timer(); - TimerTask HRTimerTask=new TimerTask() { - @Override - public void run() { - mhandler.sendEmptyMessage(0); - } - }; - mTestTimer.schedule(HRTimerTask,0,1000L); + if (ICJniUtils.isTemperatureDevAvailable()>0) { + ICJniUtils.enableTemperature(); + timestamp_start = System.currentTimeMillis(); + mTestTimer = new Timer(); + TimerTask HRTimerTask = new TimerTask() { + @Override + public void run() { + mhandler.sendEmptyMessage(0); + } + }; + mTestTimer.schedule(HRTimerTask, 500, 1000L); + }else{ + Log.i("dxc",""); + } //startSensor(); } @@ -69,7 +81,7 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); if (mSensorManager == null || mSensor == null) { - Log.d("近距离","设备不支持1"); + Log.d("dxc","近距离 设备不支持1"); return; //throw new UnsupportedOperationException("设备不支持"); } @@ -77,7 +89,7 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL); if (!isRegister) { //throw new UnsupportedOperationException("设备不支持"); - Log.d("近距离","设备不支持2"); + Log.d("dxc","近距离 设备不支持2"); return ; } } @@ -86,7 +98,7 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl @Override public void onSensorChanged(SensorEvent sensorEvent) { float proximity=sensorEvent.values[0]; - Log.d("近距离", String.valueOf(proximity)); + Log.d("dxc", "近距离 "+String.valueOf(proximity)); } @Override @@ -101,12 +113,10 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl @Override protected void onResume() { super.onResume(); - if (screenOnWakelock==null) - screenOnWakelock = getScreenOnWakeLock(this,TemperatureAdjustActivity.class.getSimpleName()); } public static PowerManager.WakeLock getScreenOnWakeLock(Context context, String tag) { - PowerManager.WakeLock wakeLock = ((PowerManager)(context.getSystemService(Context.POWER_SERVICE))).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, tag); + final PowerManager.WakeLock wakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE)).newWakeLock(ACQUIRE_CAUSES_WAKEUP| SCREEN_DIM_WAKE_LOCK, TemperatureAdjustActivity.class.getSimpleName()); wakeLock.acquire(); return wakeLock; } @@ -125,22 +135,28 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl Handler mhandler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message message) { - double temp = ICJniUtils.getTemperatureOrigin(); + double temp = ICJniUtils.getTemperature(); String tempstr = String.format("%1$.2f", temp); tv_temperature.setText(tempstr); - Logger.d("Temperature:" + tempstr); + Log.d("dxc","Temperature:" + tempstr); String header = "体温校准开始,请放置在37摄氏度恒温箱中。剩余 "; String tail = "秒。。。"; long time_cost = (System.currentTimeMillis() - timestamp_start) / 1000; adjust_start_seconds_left = (adjust_timeout_time - time_cost); if (adjust_start_seconds_left == 0) { - tv_mesg.setText("体温校准完毕,偏差数据"+String.format("%1$.2f",(avg_temp-37.0f))+"摄氏度!"); + int ret= ICJniUtils.doTempCalibration(37.0f); + tv_mesg.setText("体温校准完毕,偏差数据"+String.format("%1$.2f",(avg_temp-37.0f))+"摄氏度!ret "+ret); + if(mTestTimer!=null) { mTestTimer.cancel(); mTestTimer=null; } + //检测完毕亮屏查看结果。 + if (screenOnWakelock==null) + screenOnWakelock = getScreenOnWakeLock(TemperatureAdjustActivity.this,TemperatureAdjustActivity.class.getSimpleName()); + }else{ if(adjust_start_seconds_left <=5 && adjust_start_seconds_left > 0) { @@ -167,7 +183,6 @@ public class TemperatureAdjustActivity extends BaseActivity implements View.OnCl } - private void initView() { buttonView = (ButtonViewTwo) findViewById(R.id.btn_set); buttonView.btn_left.setOnClickListener(this); diff --git a/app/src/main/java/mobile/miki/mainui/TestMainActivity.java b/app/src/main/java/mobile/miki/mainui/TestMainActivity.java index bd11340..e6deeb2 100644 --- a/app/src/main/java/mobile/miki/mainui/TestMainActivity.java +++ b/app/src/main/java/mobile/miki/mainui/TestMainActivity.java @@ -18,6 +18,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import mobile.miki.BaseActivity; import mobile.miki.BatteryTestActivity; diff --git a/app/src/main/java/mobile/miki/util/Config.java b/app/src/main/java/mobile/miki/util/Config.java index 803ea67..998d415 100644 --- a/app/src/main/java/mobile/miki/util/Config.java +++ b/app/src/main/java/mobile/miki/util/Config.java @@ -24,6 +24,7 @@ import mobile.miki.R; import mobile.miki.RingtoneActivity; import mobile.miki.SimDetectActivity; import mobile.miki.SystemMemory; +import mobile.miki.TemperatureActivity; import mobile.miki.TouchTest; import mobile.miki.UltravioletMonitorActivity; import mobile.miki.VersionActivity; @@ -139,6 +140,8 @@ public class Config { return context.getResources().getString(R.string.dsp); }else if (ClassName.equals(HeartRate.class.getSimpleName())){ return context.getResources().getString(R.string.heartrate); + }else if (ClassName.equals(TemperatureActivity.class.getSimpleName())){ + return context.getResources().getString(R.string.temperature); }else { return null; @@ -190,6 +193,8 @@ public class Config { intent = new Intent(context, DSPActivity.class); }else if (testItemName.equals(context.getResources().getString(R.string.heartrate))) { intent = new Intent(context, HeartRate.class); + }else if (testItemName.equals(context.getResources().getString(R.string.temperature))) { + intent = new Intent(context, TemperatureActivity.class); } if (intent != null) { @@ -279,9 +284,11 @@ public class Config { //list.add(context.getString(R.string.test_keypad)); list.add(context.getString(R.string.heartrate)); + list.add(context.getString(R.string.temperature)); list.remove(context.getString(R.string.camera)); //testResultList.add("keys"); testResultList.add("heartrate"); + testResultList.add("temperature"); testResultList.remove("camera"); } stateArr = new String[testResultList.size()]; diff --git a/app/src/main/java/mobile/miki/util/FTUtils.java b/app/src/main/java/mobile/miki/util/FTUtils.java index 1d4fd3a..416c9d4 100644 --- a/app/src/main/java/mobile/miki/util/FTUtils.java +++ b/app/src/main/java/mobile/miki/util/FTUtils.java @@ -200,14 +200,14 @@ public class FTUtils { public static boolean isQ3F(){ - if (getMODEL().contains("C41-QL02")||getMODEL().contains("C41S-QL02")|| SystemProperties.get("ro.product.isQ3F","").equalsIgnoreCase("true")) { + if (getMODEL().contains("C41-QL02")||getMODEL().contains("C41S-QL02")|| SystemProperties.get("ro.product.isQ3F","").equalsIgnoreCase("true") || SystemProperties.get("persist.sys.id_num","").equalsIgnoreCase("q3f")) { return true; } return false; } public static boolean isH88(){ - if (getMODEL().contains("H88")||SystemProperties.get("ro.product.isH88","").equalsIgnoreCase("true")) { + if (getMODEL().contains("H88")||SystemProperties.get("ro.product.isH88","").equalsIgnoreCase("true") || SystemProperties.get("persist.sys.id_num","").equalsIgnoreCase("H88") ) { return true; } return false; diff --git a/app/src/main/res/layout/heartrate_layout.xml b/app/src/main/res/layout/heartrate_layout.xml index 330b159..6ed4ef9 100644 --- a/app/src/main/res/layout/heartrate_layout.xml +++ b/app/src/main/res/layout/heartrate_layout.xml @@ -17,7 +17,7 @@ android:id="@+id/tv_isweared" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="佩戴 " + android:text="@string/isWeared" android:textSize="36sp" /> - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0db5db3..8f87ad1 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -862,6 +862,8 @@ 更多设置 解绑 温度校准 + 温度测试 + 没发现测温设备! 开始录音 结束录音 @@ -895,7 +897,11 @@ Bluetooth mac barcode 标志位检查 + 佩戴 心率 + + 无心率设备! + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5c74565..8567eb8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -403,6 +403,9 @@ Backlight GPS Temperature Adjust 温度校准 + Temperature + No Temperature device found! + Start recording Stop recording Start playing @@ -911,6 +914,9 @@ 标志位检查 DSP change + isWeared HeartRate + No HeartRate device found! + hall diff --git a/app/version_code.properties b/app/version_code.properties index efd5a44..e534dad 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Tue Jul 28 05:58:09 CST 2020 -VERSION_CODE=33 +#Mon Aug 10 19:56:33 CST 2020 +VERSION_CODE=37