--- /dev/null
+package com.ic.jni;\r
+\r
+public class ICJniUtils {\r
+\r
+ public ICJniUtils(){\r
+\r
+ }\r
+ static {\r
+ // build.gradle里面 android\defaultConfig\ndk\moduleName 的名称\r
+ // Android.mk, LOCAL_MODULE 的名称\r
+ System.loadLibrary("ICJniUtils");\r
+ }\r
+\r
+ /***************计步控制************************************/\r
+ /*运行此函数清除 系统计步为0*/\r
+ public static native int resetStepCount();\r
+\r
+ /*获取当前步数*/\r
+ public static native int getStepCount();\r
+ /*开启计步 不必判断返回值*/\r
+ public static native int enablePedometer();\r
+ /*停止计步 不必判断返回值*/\r
+ public static native int disablePedometer();\r
+\r
+ /*检测计步当前是否开启 1开启,0 关闭*/\r
+ public static native int isPedometerEnabled();\r
+\r
+ /*保存当前步数(getStepCount取得的值)到磁盘 不必判断返回值*/\r
+ public static native int saveStepCount();\r
+\r
+ /*恢复保存时的步数数据,下次getStepCount会在恢复的值上增加 不必判断返回值*/\r
+ public static native int recoverStepCount();\r
+\r
+\r
+ /******心率,血压****************************************/\r
+ /*检查 PPG硬件是否存在,返回 1 存在,0 不存在*/\r
+ public static native int isPPGavailable();\r
+\r
+ /*开启心率血压检测*/\r
+ public static native int enablePPG();\r
+\r
+ /*停止心率血压检测*/\r
+ public static native int disablePPG();\r
+ /*返回 心率值 每分钟跳动次数, 通过这个心率>0 判断是否已经有检测结果,\r
+ 有就可以直接通过getHighBloodPressure 和 getLowBloodPressure 获取血压高压低压值*/\r
+ public static native int getPPG();\r
+ /* 返回PPG 运行状态, 0 停止, 1,运行中*/\r
+ public static native int isPPGStarted();\r
+ /*返回是否佩戴 0 未佩戴,1 佩戴*/\r
+ public static native int isWeared();\r
+\r
+ /*获取血压高压值*/\r
+ public static native int getHighBloodPressure();\r
+\r
+ /*获取血压低压值*/\r
+ public static native int getLowBloodPressure();\r
+\r
+ /*获取血氧值*/\r
+ public static native int getSPO2();\r
+}\r
\r
import android.content.Intent;\r
import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.os.Message;\r
import android.preference.PreferenceManager;\r
import android.util.Log;\r
import android.view.View;\r
+import android.widget.TextView;\r
+\r
+import com.ic.jni.ICJniUtils;\r
+\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
\r
import mobile.miki.mainui.ButtonViewTwo;\r
import mobile.miki.mainui.TestMainActivity;\r
+import mobile.miki.util.Logger;\r
\r
public class HeartRate extends BaseActivity implements View.OnClickListener {\r
\r
private ButtonViewTwo buttonView;\r
boolean running;\r
\r
- static {\r
- System.loadLibrary("heartrate_test_jni");\r
- }\r
- public static native int get_heartrate();\r
+ Timer mTimer=null;\r
\r
+ private TextView tv_isweared;\r
+ private TextView tv_ppg;\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
setContentView(R.layout.heartrate_layout);\r
initView();\r
- int heartrate = get_heartrate();\r
- Log.i("dxc", "heartrate: " + heartrate);\r
+ int heartrate = ICJniUtils.isPPGavailable();\r
+ Log.i("dxc", "heartrate available : " + heartrate);\r
+\r
+ mTimer=new Timer();\r
+ TimerTask HRTimerTask=new TimerTask() {\r
+ @Override\r
+ public void run() {\r
+ mhandler.sendEmptyMessage(0);\r
+ }\r
+ };\r
+ mTimer.schedule(HRTimerTask,0,1000L);\r
+ }\r
+\r
+ Handler mhandler=new Handler(new Handler.Callback() {\r
+ @Override\r
+ public boolean handleMessage(Message message) {\r
+\r
+ if (ICJniUtils.isPPGStarted()==0){\r
+ ICJniUtils.enablePPG();\r
+\r
+ }\r
+ int ppg=ICJniUtils.getPPG();\r
+ int weared=ICJniUtils.isWeared();\r
+\r
+\r
+ String wearedstr=String.valueOf(weared);\r
+ String ppgstr=String.valueOf(ppg);\r
+ tv_isweared.setText(wearedstr);\r
+ tv_ppg.setText(ppgstr);\r
+ Logger.d("Weared:"+wearedstr+" PPG:"+ppgstr);\r
+ return false;\r
+ }\r
+ });\r
+ @Override\r
+ protected void onDestroy() {\r
+ super.onDestroy();\r
+ ICJniUtils.disablePPG();\r
+ if(mTimer!=null) {\r
+\r
+ mTimer.cancel();\r
+ mTimer=null;\r
+ }\r
}\r
\r
+\r
+\r
private void initView() {\r
buttonView = (ButtonViewTwo) findViewById(R.id.btn_set);\r
buttonView.btn_left.setOnClickListener(this);\r
buttonView.btn_right.setOnClickListener(this);\r
buttonView.setSuccessColor();\r
buttonView.btn_left.setClickable(true);\r
+\r
+ tv_isweared=(TextView)findViewById(R.id.tv_weared_value);\r
+ tv_ppg=(TextView)findViewById(R.id.tv_ppg_value);\r
+\r
}\r
\r
@Override\r
if (!running) {\r
startActivity(intent1);\r
} else {\r
- startActivity(intent1);\r
+ startActivity(intent);\r
}\r
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "true")\r
.commit();\r
if (!running) {\r
startActivity(intent1);\r
} else {\r
- startActivity(intent1);\r
+ startActivity(intent);\r
}\r
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("heartrate", "false")\r
.commit();\r
, new Key(KEYCODE_CUSTOM_RIGHT, "Right")};\r
private Key[] keyMapsLieBao = {new Key(KeyEvent.KEYCODE_POWER, "Power")\r
, new Key(KeyEvent.KEYCODE_YEN, "Key 1")};\r
+ private Key[] keyMapsQ3F = {new Key(KeyEvent.KEYCODE_POWER, "Power")\r
+ , new Key(KeyEvent.KEYCODE_BACK, "Back")};\r
\r
public KeysTestActivity() {\r
// TAG = "KeysTestActivity";\r
mKeyMapList.addAll(Arrays.asList(keyMapsLieBao));\r
} else if (FTUtils.isSugar()) {\r
mKeyMapList.addAll(Arrays.asList(keyMapsSUGAR));\r
+ } else if (FTUtils.isQ3F()) {\r
+ mKeyMapList.addAll(Arrays.asList(keyMapsQ3F));\r
} else {\r
mKeyMapList.addAll(Arrays.asList(keyMapsDefault));\r
}\r
engineer_button = (Button) findViewById(R.id.engineer_button);\r
more_button = (Button) findViewById(R.id.more_button);\r
unbound_button=(Button)findViewById(R.id.unbound_button);\r
+ unbound_button.setVisibility(View.GONE);\r
engineer_button.setOnClickListener(this);\r
more_button.setOnClickListener(this);\r
unbound_button.setOnClickListener(this);\r
testResultList.add("bt");
testResultList.add("dsp");
testResultList.add("heartrate");
+ } else if (FTUtils.isQ3F()){
+
+ list.add(getString(R.string.test_keypad));
+ list.add(getString(R.string.shakeTest));
+ list.add(getString(R.string.heartrate));
+ testResultList.add("keys");
+ testResultList.add("vibrator");
+ testResultList.add("heartrate");
}
stateArr = new String[testResultList.size()];
return list;
flagPosition.setVisibility(View.GONE);
}
+ if(FTUtils.doPCBATest()){
+ pcbatest.setVisibility(View.VISIBLE);
+ }else{
+ pcbatest.setVisibility(View.GONE);
+ }
+
pcbatest.setOnClickListener(this);
moblietest.setOnClickListener(this);
engineermodetest.setOnClickListener(this);
return getDISPLAY().contains("W501CS") || getMODEL().contains("SUGAR");\r
}\r
\r
-\r
+ public static boolean doPCBATest(){\r
+ return false;\r
+ }\r
public static void SetPreferences(Context paramContext, int paramInt,\r
Long time) {\r
SharedPreferences sharedPreferences = paramContext.getSharedPreferences("AgingTest", 0);\r
}\r
return false;\r
}\r
+\r
+\r
+ public static boolean isQ3F(){\r
+\r
+ if (getMODEL().contains("C41-QL02")) {\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
}\r
<?xml version="1.0" encoding="utf-8"?>\r
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
android:layout_width="match_parent"\r
android:layout_height="match_parent"\r
>\r
android:id="@+id/Factory_test_title"\r
style="@style/category_title_style"\r
android:layout_width="match_parent"\r
- android:layout_height="40dp"\r
+ android:layout_height="60dp"\r
android:gravity="center|center_horizontal"\r
android:text="@string/benji"\r
android:textSize="22sp" />\r
android:layout_weight="1"\r
android:background="@drawable/listpress"\r
android:gravity="center_vertical"\r
- android:orientation="vertical">\r
+ android:orientation="vertical"\r
+ tools:visibility="gone">\r
\r
<TextView\r
style="@style/title_text_large_style"\r
android:orientation="vertical" android:layout_width="match_parent"\r
android:layout_height="match_parent">\r
\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:orientation="horizontal">\r
+\r
+ <TextView\r
+ android:id="@+id/tv_ppg"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="心率 "\r
+ android:textSize="36sp" />\r
+\r
+ <TextView\r
+ android:id="@+id/tv_ppg_value"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="0"\r
+ android:textSize="36sp" />\r
+ </LinearLayout>\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:orientation="horizontal">\r
+\r
+ <TextView\r
+ android:id="@+id/tv_isweared"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="佩戴 "\r
+ android:textSize="36sp" />\r
+\r
+ <TextView\r
+ android:id="@+id/tv_weared_value"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="0"\r
+ android:textSize="36sp" />\r
+ </LinearLayout>\r
+\r
+ </LinearLayout>\r
+\r
<mobile.miki.mainui.ButtonViewTwo\r
android:id="@+id/btn_set"\r
android:layout_width="match_parent"\r