From: SnickerSun Date: Thu, 15 Jul 2021 08:15:54 +0000 (+0800) Subject: release V115 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=984cecb365d82c3605f43b909e5053dc3f43a2ab;p=factoryMode.git release V115 添加C49C支持,GH3011漏光测试界面 --- diff --git a/app/EQC_G5.jks b/app/EQC_G5.jks new file mode 100644 index 0000000..2229d46 Binary files /dev/null and b/app/EQC_G5.jks differ diff --git a/app/build.gradle b/app/build.gradle index bd7851d..a1f6fe9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,125 +1,125 @@ -apply plugin: 'com.android.application' -// APK 名称 -static def getApkBaseName() { - return "FactoryMode" -} - -def getVersionCode() { - def versionCodeFile = file('version_code.properties') - if (versionCodeFile.canRead()) { - Properties properties = new Properties() - properties.load(new FileInputStream(versionCodeFile)) - def versionCode = properties['VERSION_CODE'].toInteger()//读取version_code.properties文件存放的版本号。 - def runTasks = gradle.startParameter.taskNames - def task = ':app:assembleRelease' - if (task in runTasks) { - properties['VERSION_CODE'] = (++versionCode).toString() - properties.store(versionCodeFile.newWriter(), null) - } - - return versionCode - } else { - throw new GradleException("无法读取version_code.properties文件!") - } -} - -def releaseTime() { - - return new Date().format("yyyyMMddHHmm", TimeZone.getTimeZone("GMT+08:00")) - -} -android { - signingConfigs { - key { - storeFile file("AndroidSystem.jks") - storePassword "android123456" - keyAlias "android" - keyPassword "android123456" - } - } - lintOptions { - checkReleaseBuilds false - abortOnError false - } - compileSdkVersion 27 - - def currentVersionCode = getVersionCode() - def currentVersionName = releaseTime() - - defaultConfig { - applicationId "mobile.miki" - minSdkVersion 19 - targetSdkVersion 19 - versionCode currentVersionCode - versionName "${currentVersionName}" - } - buildTypes { - release { - minifyEnabled false - signingConfig signingConfigs.key - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - } - debug { - signingConfig signingConfigs.key - } - } - //打包后应用名称 - android.applicationVariants.all { variant -> - variant.outputs.all { - if (variant.buildType.name == "release") { - outputFileName = "${getApkBaseName()}_V${currentVersionCode}_${currentVersionName}_release.apk" - } else { - outputFileName = "${getApkBaseName()}_V${currentVersionCode}_${currentVersionName}_debug.apk" - } - } - } -// buildToolsVersion '20.0.3' - - sourceSets { - main { - jni.srcDirs = [] - } - } - compileOptions { - sourceCompatibility = 1.7 - targetCompatibility = 1.7 - } - ndkVersion '20.1.5948944' - sourceSets.main { - jniLibs.srcDir 'src/main/libs' - jni.srcDirs = [] //disable automatic ndk-build call - } -} - -dependencies { - compileOnly files ('libs/frameworks-full-debug.jar') - provided files ('libs/telephony_common-full-debug.jar') - implementation 'com.squareup.okhttp3:okhttp:3.4.1' - implementation 'io.reactivex:rxandroid:1.2.1' - implementation 'com.liulishuo.filedownloader:library:1.6.3' - compileOnly files('libs/IAtChannel_classes.jar') - implementation files('libs/LineWrapContainer.aar') - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:recyclerview-v7:27.1.1' -// implementation 'com.android.support:recyclerview-v7:20.0.0' - -} -preBuild { - - doLast { - def imlFile = file( project.name + ".iml") - println 'Change ' + project.name + '.iml order' - try { - def parsedXml = (new XmlParser()).parse(imlFile) - def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } - parsedXml.component[1].remove(jdkNode) - def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" - println 'what' + sdkString - new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) - groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) - } catch (FileNotFoundException e) { - // nop, iml not found - println "no iml found" - } - } +apply plugin: 'com.android.application' +// APK 名称 +static def getApkBaseName() { + return "FactoryMode" +} + +def getVersionCode() { + def versionCodeFile = file('version_code.properties') + if (versionCodeFile.canRead()) { + Properties properties = new Properties() + properties.load(new FileInputStream(versionCodeFile)) + def versionCode = properties['VERSION_CODE'].toInteger()//读取version_code.properties文件存放的版本号。 + def runTasks = gradle.startParameter.taskNames + def task = ':app:assembleRelease' + if (task in runTasks) { + properties['VERSION_CODE'] = (++versionCode).toString() + properties.store(versionCodeFile.newWriter(), null) + } + + return versionCode + } else { + throw new GradleException("无法读取version_code.properties文件!") + } +} + +def releaseTime() { + + return new Date().format("yyyyMMddHHmm", TimeZone.getTimeZone("GMT+08:00")) + +} +android { + signingConfigs { + key { + storeFile file("EQC_G5.jks") + storePassword "123456" + keyAlias "android" + keyPassword "123456" + } + } + lintOptions { + checkReleaseBuilds false + abortOnError false + } + compileSdkVersion 27 + + def currentVersionCode = getVersionCode() + def currentVersionName = releaseTime() + + defaultConfig { + applicationId "mobile.miki" + minSdkVersion 19 + targetSdkVersion 19 + versionCode currentVersionCode + versionName "${currentVersionName}" + } + buildTypes { + release { + minifyEnabled false + signingConfig signingConfigs.key + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + debug { + signingConfig signingConfigs.key + } + } + //打包后应用名称 + android.applicationVariants.all { variant -> + variant.outputs.all { + if (variant.buildType.name == "release") { + outputFileName = "${getApkBaseName()}_V${currentVersionCode}_${currentVersionName}_release.apk" + } else { + outputFileName = "${getApkBaseName()}_V${currentVersionCode}_${currentVersionName}_debug.apk" + } + } + } +// buildToolsVersion '20.0.3' + + sourceSets { + main { + jni.srcDirs = [] + } + } + compileOptions { + sourceCompatibility = 1.7 + targetCompatibility = 1.7 + } + ndkVersion '20.1.5948944' + sourceSets.main { + jniLibs.srcDir 'src/main/libs' + jni.srcDirs = [] //disable automatic ndk-build call + } +} + +dependencies { + compileOnly files ('libs/frameworks-full-debug.jar') + provided files ('libs/telephony_common-full-debug.jar') + implementation 'com.squareup.okhttp3:okhttp:3.4.1' + implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'com.liulishuo.filedownloader:library:1.6.3' + compileOnly files('libs/IAtChannel_classes.jar') + implementation files('libs/LineWrapContainer.aar') + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:recyclerview-v7:27.1.1' +// implementation 'com.android.support:recyclerview-v7:20.0.0' + +} +preBuild { + + doLast { + def imlFile = file( project.name + ".iml") + println 'Change ' + project.name + '.iml order' + try { + def parsedXml = (new XmlParser()).parse(imlFile) + def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } + parsedXml.component[1].remove(jdkNode) + def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" + println 'what' + sdkString + new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) + groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) + } catch (FileNotFoundException e) { + // nop, iml not found + println "no iml found" + } + } } \ No newline at end of file diff --git a/app/release/FactoryMode_V107_202106201846_release.apk b/app/release/FactoryMode_V115_202107151603_release.apk similarity index 93% rename from app/release/FactoryMode_V107_202106201846_release.apk rename to app/release/FactoryMode_V115_202107151603_release.apk index a991d07..93a7aad 100644 Binary files a/app/release/FactoryMode_V107_202106201846_release.apk and b/app/release/FactoryMode_V115_202107151603_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index 5b7efa1..f1c3552 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":110,"versionName":"202107061631","enabled":true,"outputFile":"FactoryMode_V110_202107061631_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V110_202107061631_release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":115,"versionName":"202107151603","enabled":true,"outputFile":"FactoryMode_V115_202107151603_release.apk","fullName":"release","baseName":"release"},"path":"FactoryMode_V115_202107151603_release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f4ccab1..3919ca0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,255 +1,258 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/mobile/miki/HeartRateSystemTest.java b/app/src/main/java/mobile/miki/HeartRateSystemTest.java new file mode 100644 index 0000000..2774546 --- /dev/null +++ b/app/src/main/java/mobile/miki/HeartRateSystemTest.java @@ -0,0 +1,282 @@ +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; +import android.preference.PreferenceManager; +import android.util.Log; +import android.view.View; +import android.widget.Button; +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.FTUtils; + +public class HeartRateSystemTest extends BaseActivity implements View.OnClickListener, SensorEventListener { + + + boolean running; + public static final int TYPE_HEART_RATE = 21; + Timer mTimer=null; + + private TextView tv_testname; + private TextView tv_testname_value; + private TextView tv_irda; + private TextView tv_red; + private TextView tv_green; + private TextView tv_status; + private Button btn_systemtest; + private Button btn_ctrtest; + private Button btn_close; + + private SensorManager mSensorManager=null; + private Sensor mHeartRate=null; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.heartrate_systemtest_layout); + initView(); + + Intent intent = getIntent(); + running = false; + if (intent != null) { + running = intent.getBooleanExtra("running", false); + } + + if(FTUtils.hasGH30x()){ + mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); + + + }else{ + + } + } + + Handler mhandler=new Handler(new Handler.Callback() { + @Override + public boolean handleMessage(Message message) { + + + Bundle bdl = message.getData(); + int ledNum = bdl.getInt("ledNum"); + int result = bdl.getInt("result"); + switch(ledNum){ + case 7: + if(result==1){ + tv_testname.setText(getString(R.string.whiteblock_text)); + tv_testname_value.setText(getString(R.string.ctrtest_text)); + tv_irda.setText(""); + tv_green.setText(""); + tv_red.setText(""); + tv_status.setText("Testing"); + }else if(result==0){ + tv_testname.setText(getString(R.string.blackblock_text)); + tv_testname_value.setText(getString(R.string.systemtest_text)); + tv_irda.setText(""); + tv_green.setText(""); + tv_red.setText(""); + tv_status.setText("Testing"); + }else if (result==2){ + tv_status.setText("Test Done"); + } + break; + case 0://IRDA + { + //os_res: <0=> ok , <1=> rawdata err , <2=> noise err , <3=> para err + switch (result){ + case 0: + tv_irda.setText("OK"); + break; + case 1: + tv_irda.setText("Rawdata Err"); + break; + case 2: + tv_irda.setText("Noise Err"); + break; + case 3: + tv_irda.setText("Eara Err"); + break; + + } + } + break; + case 1: //redLed + { + switch (result){ + case 0: + tv_red.setText("OK"); + break; + case 1: + tv_red.setText("Rawdata Err"); + break; + case 2: + tv_red.setText("Noise Err"); + break; + case 3: + tv_red.setText("Eara Err"); + break; + + } + + } + break; + case 2: //GreenLed + { + switch (result){ + case 0: + tv_green.setText("OK"); + break; + case 1: + tv_green.setText("Rawdata Err"); + break; + case 2: + tv_green.setText("Noise Err"); + break; + case 3: + tv_green.setText("Eara Err"); + break; + + } + + } + break; + } + + return false; + } + }); + @Override + protected void onDestroy() { + super.onDestroy(); + + if(FTUtils.hasGH30x()){ + mSensorManager.unregisterListener(this); + Log.i("dxc", "Heart Rate GH30X closed"); + } + } + + @Override + protected void onPause() { + super.onPause(); + Log.i( "dxc","Heart Rate onPause"); + + } + + private void initView() { + + btn_close=(Button)findViewById(R.id.button_close); + btn_ctrtest=(Button)findViewById(R.id.button_ctrtest); + btn_systemtest=(Button)findViewById(R.id.button_systemtest); + + tv_testname=(TextView)findViewById(R.id.testname); + tv_testname_value=(TextView)findViewById(R.id.testname_value); + tv_irda=(TextView)findViewById(R.id.irda_value); + tv_green=(TextView)findViewById(R.id.green_value); + tv_red =(TextView)findViewById(R.id.redled_value); + tv_status=(TextView)findViewById(R.id.runing_status_value); + + tv_irda.setText(""); + tv_green.setText(""); + tv_red.setText(""); + tv_status.setText(""); + tv_testname.setText(getString(R.string.blackblock_text)); + tv_testname_value.setText(getString(R.string.systemtest_text)); + + btn_systemtest.setOnClickListener(this); + btn_ctrtest.setOnClickListener(this); + btn_close.setOnClickListener(this); + } + private final int DELAY_TIME_FOR_SYSTEM_TEST = SensorManager.SENSOR_DELAY_UI;//66 + private final int DELAY_TIME_FOR_SYSTEM_CTR_TEST = SensorManager.SENSOR_DELAY_GAME;//20 + private final int DELAY_TIME_FOR_SPO2_TEST = SensorManager.SENSOR_DELAY_FASTEST;//1 + private final int DELAY_TIME_FOR_PPG_TEST = SensorManager.SENSOR_DELAY_NORMAL;//200 + @Override + public void onClick(View view) { + // Intent intent1 = new Intent(this, TestMainActivity.class); + boolean ret=false; + switch (view.getId()) { + + case R.id.button_ctrtest: + tv_testname.setText(getString(R.string.whiteblock_text)); + tv_testname_value.setText(getString(R.string.ctrtest_text)); + tv_irda.setText(""); + tv_green.setText(""); + tv_red.setText(""); + tv_status.setText("Start Test"); + if (FTUtils.hasGH30x()) + { + mSensorManager.unregisterListener(this); + mHeartRate = mSensorManager.getDefaultSensor(TYPE_HEART_RATE); + ret = mSensorManager.registerListener(this, mHeartRate, DELAY_TIME_FOR_SYSTEM_CTR_TEST); + Log.i("dxc", "Heart Rate GH30X DELAY_TIME_FOR_SYSTEM_CTR_TEST ret :: " + ret); + }else{ + tv_status.setText("not GH301 or GH3011"); + } + break; + case R.id.button_systemtest: + tv_testname.setText(getString(R.string.blackblock_text)); + tv_testname_value.setText(getString(R.string.systemtest_text)); + tv_irda.setText(""); + tv_green.setText(""); + tv_red.setText(""); + + if(FTUtils.hasGH30x()){ + mSensorManager.unregisterListener(this); + mHeartRate = mSensorManager.getDefaultSensor(TYPE_HEART_RATE); + ret = mSensorManager.registerListener(this, mHeartRate, DELAY_TIME_FOR_SYSTEM_TEST); + Log.i("dxc", "Heart Rate GH30X DELAY_TIME_FOR_SYSTEM_TEST ret :: " + ret); + tv_status.setText("Start Test"); + }else{ + tv_status.setText("not GH301 or GH3011"); + } + break; + case R.id.button_close: + // startActivity(intent1); + 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] + ); + + Message msg=new Message(); + Bundle bdl=new Bundle(); + msg.what=1; + bdl.putInt("ledNum", (int)values[0]); + bdl.putInt("result",(int)values[3]); + msg.setData(bdl); + mhandler.sendMessage(msg); + // 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/KeysTestActivity.java b/app/src/main/java/mobile/miki/KeysTestActivity.java index cdfdcbc..35566ed 100644 --- a/app/src/main/java/mobile/miki/KeysTestActivity.java +++ b/app/src/main/java/mobile/miki/KeysTestActivity.java @@ -131,7 +131,7 @@ public class KeysTestActivity extends BaseActivity implements mKeyMapList.addAll(Arrays.asList(keyMapsLieBao)); } else if (FTUtils.isSugar()) { mKeyMapList.addAll(Arrays.asList(keyMapsSUGAR)); - } else if (FTUtils.isL69A()|| FTUtils.isQ3F()||FTUtils.isV20()) { + } else if (FTUtils.isL69A()|| FTUtils.isQ3F()||FTUtils.isV20() ||FTUtils.isC49()) { mKeyMapList.addAll(Arrays.asList(keyMapsQ3F)); } else { mKeyMapList.addAll(Arrays.asList(keyMapsDefault)); diff --git a/app/src/main/java/mobile/miki/mainui/TestMainList.java b/app/src/main/java/mobile/miki/mainui/TestMainList.java index 8d4d51f..3a761e5 100644 --- a/app/src/main/java/mobile/miki/mainui/TestMainList.java +++ b/app/src/main/java/mobile/miki/mainui/TestMainList.java @@ -28,6 +28,7 @@ import java.util.TimerTask; import mobile.miki.BaseActivity; import mobile.miki.FactoryReset_activity; import mobile.miki.GPSActivity; +import mobile.miki.HeartRateSystemTest; import mobile.miki.MyApplication; import mobile.miki.R; import mobile.miki.TemperatureAdjustActivity; @@ -55,6 +56,7 @@ public class TestMainList extends BaseActivity implements OnClickListener { private LinearLayout gpsFulltest; private LinearLayout tempAdjust; private LinearLayout tempDataGet; + private LinearLayout heartrateSystemCTRtest; @Override protected void onCreate(Bundle savedInstanceState) { @@ -83,6 +85,8 @@ public class TestMainList extends BaseActivity implements OnClickListener { tempAdjust = (LinearLayout) findViewById(R.id.tempAdjustLayout); flagPosition = (LinearLayout) findViewById(R.id.flagposiontion); tempDataGet = (LinearLayout) findViewById(R.id.temp_data_get); + + heartrateSystemCTRtest = (LinearLayout) findViewById(R.id.gh3011_layout); if (!FTUtils.isSugar()) { flagPosition.setVisibility(View.GONE); } @@ -108,6 +112,7 @@ public class TestMainList extends BaseActivity implements OnClickListener { gpsFulltest.setOnClickListener(this); tempAdjust.setOnClickListener(this); tempDataGet.setOnClickListener(this); + heartrateSystemCTRtest.setOnClickListener(this); // Log.d(TAG, "onCreate"); Settings.System.putInt(getContentResolver(), "mobile.miki.FactoryModeRunning", 1); Config.initConfig(this); @@ -231,6 +236,10 @@ public class TestMainList extends BaseActivity implements OnClickListener { intent.setComponent(componentName); startActivity(intent); break; + case R.id.gh3011_layout: + intent = new Intent(TestMainList.this, HeartRateSystemTest.class); + startActivity(intent); + break; default: break; } diff --git a/app/src/main/java/mobile/miki/util/FTUtils.java b/app/src/main/java/mobile/miki/util/FTUtils.java index 1cf49ae..61eae3d 100644 --- a/app/src/main/java/mobile/miki/util/FTUtils.java +++ b/app/src/main/java/mobile/miki/util/FTUtils.java @@ -321,5 +321,14 @@ public class FTUtils { return false; } + public static boolean hasGH30x(){ + + if(SystemProperties.get("persist.sys.is_gh301","").equals("true")|| SystemProperties.get("persist.sys.is_gh3011","").equals("true")) + return true; + else + return false; + + } + } diff --git a/app/src/main/res/layout/dig_layout_testlist.xml b/app/src/main/res/layout/dig_layout_testlist.xml index 55c5989..e203c91 100644 --- a/app/src/main/res/layout/dig_layout_testlist.xml +++ b/app/src/main/res/layout/dig_layout_testlist.xml @@ -396,7 +396,43 @@ android:text="@string/temp_data_get_text" android:textSize="22sp" /> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dig_layout_testlist_280.xml b/app/src/main/res/layout/dig_layout_testlist_280.xml index cfa6a37..5b30f31 100644 --- a/app/src/main/res/layout/dig_layout_testlist_280.xml +++ b/app/src/main/res/layout/dig_layout_testlist_280.xml @@ -396,7 +396,43 @@ android:text="@string/temp_data_get_text" android:textSize="22sp" /> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/heartrate_systemtest_layout.xml b/app/src/main/res/layout/heartrate_systemtest_layout.xml new file mode 100644 index 0000000..6f74529 --- /dev/null +++ b/app/src/main/res/layout/heartrate_systemtest_layout.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +