增加Q3F支持,添加心率,按键(power+back)和马达的测试。
authorsnickersun <scy@incartech.cn>
Tue, 17 Mar 2020 08:17:37 +0000 (16:17 +0800)
committersnickersun <scy@incartech.cn>
Tue, 17 Mar 2020 08:17:37 +0000 (16:17 +0800)
app/src/main/java/com/ic/jni/ICJniUtils.java [new file with mode: 0644]
app/src/main/java/mobile/miki/HeartRate.java
app/src/main/java/mobile/miki/KeysTestActivity.java
app/src/main/java/mobile/miki/mainui/ModeSelectActivity.java
app/src/main/java/mobile/miki/mainui/TestMainActivity.java
app/src/main/java/mobile/miki/mainui/TestMainList.java
app/src/main/java/mobile/miki/util/FTUtils.java
app/src/main/res/layout/dig_layout_testlist.xml
app/src/main/res/layout/heartrate_layout.xml

diff --git a/app/src/main/java/com/ic/jni/ICJniUtils.java b/app/src/main/java/com/ic/jni/ICJniUtils.java
new file mode 100644 (file)
index 0000000..997d234
--- /dev/null
@@ -0,0 +1,60 @@
+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
index b8bfc22..da231ec 100644 (file)
@@ -2,38 +2,92 @@ package mobile.miki;
 \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
@@ -48,7 +102,7 @@ public class HeartRate extends BaseActivity implements View.OnClickListener {
                 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
@@ -58,7 +112,7 @@ public class HeartRate extends BaseActivity implements View.OnClickListener {
                 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
index 9a74fe1..a221074 100644 (file)
@@ -74,6 +74,8 @@ public class KeysTestActivity extends BaseActivity implements
             , 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
@@ -128,6 +130,8 @@ public class KeysTestActivity extends BaseActivity implements
             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
index e9e7b04..6dd2692 100644 (file)
@@ -25,6 +25,7 @@ public class ModeSelectActivity extends Activity implements OnClickListener {
                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
index 62a1b61..31ba878 100644 (file)
@@ -319,6 +319,14 @@ public class TestMainActivity extends BaseActivity implements OnClickListener, A
             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;
index 12a5e88..6248cea 100644 (file)
@@ -66,6 +66,12 @@ public class TestMainList extends BaseActivity implements OnClickListener {
                        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);
index 1a34be8..9f909af 100644 (file)
@@ -39,7 +39,9 @@ public class FTUtils {
         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
@@ -194,4 +196,13 @@ public class FTUtils {
         }\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
index c54b7d9..2cf5b72 100644 (file)
@@ -1,5 +1,6 @@
 <?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
@@ -14,7 +15,7 @@
             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
@@ -28,7 +29,8 @@
             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
index 6aea350..0ddc61a 100644 (file)
@@ -3,6 +3,53 @@
     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