├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── custom.md ├── .gitignore ├── LICENSE ├── README.md ├── README_EN.md ├── android_sdk_source ├── Demo │ └── VpBluetoothSDK │ │ ├── .gitignore │ │ ├── .idea │ │ ├── compiler.xml │ │ ├── gradle.xml │ │ ├── kotlinc.xml │ │ ├── modules.xml │ │ └── vcs.xml │ │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── libs │ │ │ ├── AMap2DMap_6.0.0_AMapSearch_9.4.5_AMapLocation_6.2.0_20221026.jar │ │ │ ├── BmpConvert_V1.2.1-release.aar │ │ │ ├── JL_Watch_V1.10.0-release.aar │ │ │ ├── gson-2.2.4.jar │ │ │ ├── jl_bt_ota_V1.9.3-release.aar │ │ │ ├── jl_rcsp_V0.5.2-release.aar │ │ │ ├── libble-0.5.aar │ │ │ ├── libcomx-0.5.jar │ │ │ ├── libdfu-1.5.aar │ │ │ ├── libfastdfu-0.5.aar │ │ │ ├── vpbluetooth-1.16.aar │ │ │ └── vpprotocol-2.3.19.15.aar │ │ ├── proguard-rules.pro │ │ ├── release │ │ │ ├── VPSDK_2.2.95.15.apk │ │ │ └── output-metadata.json │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── timaimee │ │ │ │ └── vpdemo │ │ │ │ └── ApplicationTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── 20230217103821.png_31140.png │ │ │ │ ├── 20230217104452.png_16165.png │ │ │ │ ├── 20230217112135.png_41670.png │ │ │ │ ├── custom_rect_240_240_bg.png │ │ │ │ ├── custom_round_240_240_bg.png │ │ │ │ └── custom_round_360_360_bg.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── timaimee │ │ │ │ │ └── vpdemo │ │ │ │ │ ├── DeviceCompare.java │ │ │ │ │ ├── MyService.java │ │ │ │ │ ├── activity │ │ │ │ │ ├── AddClockActivity.java │ │ │ │ │ ├── AddContactActivity.java │ │ │ │ │ ├── AimSportCalcActivity.java │ │ │ │ │ ├── ContactActivity.java │ │ │ │ │ ├── CustomProgressDialog.java │ │ │ │ │ ├── ECGSwitchActivity.java │ │ │ │ │ ├── EcgDetectActivity.java │ │ │ │ │ ├── EcgDetectView.java │ │ │ │ │ ├── EcgHeartRealthView.java │ │ │ │ │ ├── EcgMultiLeadDetect1Activity.java │ │ │ │ │ ├── F2DebugActivity.java │ │ │ │ │ ├── FunctionSwitchActivity.java │ │ │ │ │ ├── G08WHealthAlarmIntervalActivity.java │ │ │ │ │ ├── G15QRCodeActivity.java │ │ │ │ │ ├── GpsLatlonActivity.java │ │ │ │ │ ├── GpsReportActivity.java │ │ │ │ │ ├── HealthRemindActivity.java │ │ │ │ │ ├── InstitutionActivity.java │ │ │ │ │ ├── JLDeviceOPTActivity.java │ │ │ │ │ ├── MagneticTherapyActivity.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── NewAlarmActivity.java │ │ │ │ │ ├── NotificationSettingsActivity.java │ │ │ │ │ ├── OperaterActivity.java │ │ │ │ │ ├── Oprate.java │ │ │ │ │ ├── OriginalDataLogActivity.java │ │ │ │ │ ├── PttActivity.java │ │ │ │ │ ├── SwitchView.java │ │ │ │ │ ├── TestActivity.java │ │ │ │ │ ├── TextAlarmActivity.java │ │ │ │ │ ├── UiUpdateAGPSActivity.java │ │ │ │ │ ├── UiUpdateCustomActivity.java │ │ │ │ │ ├── UiUpdateG15ImgActivity.java │ │ │ │ │ ├── UiUpdateServerActivity.java │ │ │ │ │ ├── WorldClockActivity.java │ │ │ │ │ └── WorldClockAddListAdapter.java │ │ │ │ │ ├── adapter │ │ │ │ │ ├── BleScanViewAdapter.java │ │ │ │ │ ├── ContactAdapter.java │ │ │ │ │ ├── CustomLogAdapter.java │ │ │ │ │ ├── DividerItemDecoration.java │ │ │ │ │ ├── GridAdatper.java │ │ │ │ │ ├── HealthRemindAdapter.java │ │ │ │ │ ├── ListViewAdatper.java │ │ │ │ │ ├── NewAlarmAdapter.java │ │ │ │ │ ├── OnRecycleViewClickCallback.java │ │ │ │ │ ├── TextAlarmAdapter.java │ │ │ │ │ └── WorldClockAdapter.java │ │ │ │ │ ├── bean │ │ │ │ │ └── TimeZoneBean.java │ │ │ │ │ ├── oad │ │ │ │ │ ├── activity │ │ │ │ │ │ ├── NotificationActivity.java │ │ │ │ │ │ └── OadActivity.java │ │ │ │ │ └── service │ │ │ │ │ │ └── DfuService.java │ │ │ │ │ └── utils │ │ │ │ │ └── XmlParser.java │ │ │ ├── jniLibs │ │ │ │ ├── arm64-v8a │ │ │ │ │ └── libnative-lib.so │ │ │ │ ├── armeabi-v7a │ │ │ │ │ └── libnative-lib.so │ │ │ │ ├── armeabi │ │ │ │ │ └── libnative-lib.so │ │ │ │ ├── mips │ │ │ │ │ └── libnative-lib.so │ │ │ │ ├── mips64 │ │ │ │ │ └── libnative-lib.so │ │ │ │ ├── x86 │ │ │ │ │ └── libnative-lib.so │ │ │ │ └── x86_64 │ │ │ │ │ └── libnative-lib.so │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ ├── contacts_icon_nodata.png │ │ │ │ ├── fit_dialog_bg.xml │ │ │ │ ├── fit_move_point.png │ │ │ │ ├── fit_start_point.png │ │ │ │ ├── hband_home_module_delete.png │ │ │ │ ├── hband_home_module_drag.png │ │ │ │ ├── ic_action_notify_cancel.png │ │ │ │ ├── login_button.xml │ │ │ │ ├── login_button_normal.png │ │ │ │ ├── login_button_press.png │ │ │ │ ├── login_button_press1.png │ │ │ │ └── refresh.png │ │ │ │ ├── layout │ │ │ │ ├── activity_add_clock.xml │ │ │ │ ├── activity_add_contact.xml │ │ │ │ ├── activity_contact.xml │ │ │ │ ├── activity_ecg.xml │ │ │ │ ├── activity_ecg_multi_lead_detect.xml │ │ │ │ ├── activity_ecg_switch.xml │ │ │ │ ├── activity_ecgdetect.xml │ │ │ │ ├── activity_f2_debug.xml │ │ │ │ ├── activity_function_swtich.xml │ │ │ │ ├── activity_g08w_health_alarm_interval.xml │ │ │ │ ├── activity_g15_qrcode.xml │ │ │ │ ├── activity_gps_report.xml │ │ │ │ ├── activity_gpslatlon.xml │ │ │ │ ├── activity_health_remind.xml │ │ │ │ ├── activity_institution.xml │ │ │ │ ├── activity_jl_device.xml │ │ │ │ ├── activity_magnetic_therapy.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── activity_notification_settings.xml │ │ │ │ ├── activity_oad_custom.xml │ │ │ │ ├── activity_operate.xml │ │ │ │ ├── activity_ptt.xml │ │ │ │ ├── activity_show_log.xml │ │ │ │ ├── activity_sportcalc.xml │ │ │ │ ├── activity_test.xml │ │ │ │ ├── activity_text_alarm.xml │ │ │ │ ├── activity_uiupdate_agps.xml │ │ │ │ ├── activity_uiupdate_custom.xml │ │ │ │ ├── activity_uiupdate_g15img.xml │ │ │ │ ├── activity_uiupdate_server.xml │ │ │ │ ├── activity_world_clock.xml │ │ │ │ ├── dialog_connect_progress.xml │ │ │ │ ├── item_add_clock_list.xml │ │ │ │ ├── item_contact.xml │ │ │ │ ├── item_dropdown.xml │ │ │ │ ├── item_grid.xml │ │ │ │ ├── item_health_remind.xml │ │ │ │ ├── item_log.xml │ │ │ │ ├── item_main.xml │ │ │ │ ├── item_new_alarm.xml │ │ │ │ ├── item_notify.xml │ │ │ │ ├── item_select.xml │ │ │ │ ├── item_text_alarm.xml │ │ │ │ └── item_world_clock.xml │ │ │ │ ├── menu │ │ │ │ └── menu_main.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_d.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_d.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_d.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_d.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_d.png │ │ │ │ ├── values-v21 │ │ │ │ ├── strings_dfu.xml │ │ │ │ └── styles.xml │ │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ │ ├── values │ │ │ │ ├── attrs.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ ├── strings_dfu.xml │ │ │ │ └── styles.xml │ │ │ │ ├── xml-zh │ │ │ │ └── world_clock_datasource.xml │ │ │ │ └── xml │ │ │ │ ├── file_paths.xml │ │ │ │ └── world_clock_datasource.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── timaimee │ │ │ └── vpdemo │ │ │ └── ExampleUnitTest.java │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle ├── apidoc │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── com │ │ └── veepoo │ │ │ └── protocol │ │ │ ├── VPOperateAbstract.html │ │ │ ├── VPOperateFactory.html │ │ │ ├── VPOperateListener.html │ │ │ ├── VPOperateManager.html │ │ │ ├── jl │ │ │ ├── JLBleConstant.html │ │ │ ├── classic │ │ │ │ ├── BluetoothConstant.html │ │ │ │ ├── BluetoothEventCallback.html │ │ │ │ ├── BluetoothOption.html │ │ │ │ ├── BluetoothUtil.html │ │ │ │ ├── ClassicBTManager.html │ │ │ │ ├── ErrorInfo.html │ │ │ │ ├── impl │ │ │ │ │ ├── BluetoothBrEdr.html │ │ │ │ │ ├── BluetoothPair.PairTask.html │ │ │ │ │ ├── BluetoothPair.html │ │ │ │ │ ├── BluetoothSpp.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ └── package-tree.html │ │ │ │ ├── interfaces │ │ │ │ │ ├── IBluetoothBase.html │ │ │ │ │ ├── IBluetoothBrEdr.html │ │ │ │ │ ├── IBluetoothDiscovery.html │ │ │ │ │ ├── IBluetoothEventCallback.html │ │ │ │ │ ├── IBluetoothOperation.html │ │ │ │ │ ├── IBluetoothPair.html │ │ │ │ │ ├── IBluetoothSpp.html │ │ │ │ │ ├── listener │ │ │ │ │ │ ├── OnBrEdrListener.html │ │ │ │ │ │ ├── OnBtDevicePairListener.html │ │ │ │ │ │ ├── OnBtDiscoveryListener.html │ │ │ │ │ │ ├── OnBtSppListener.html │ │ │ │ │ │ ├── package-frame.html │ │ │ │ │ │ ├── package-summary.html │ │ │ │ │ │ └── package-tree.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ └── package-tree.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── tool │ │ │ │ │ ├── BluetoothDiscovery.html │ │ │ │ │ ├── BluetoothEventCbManager.html │ │ │ │ │ ├── BrEdrEventCbManager.html │ │ │ │ │ ├── BtDiscoveryCbManager.html │ │ │ │ │ ├── BtPairEventCbManager.html │ │ │ │ │ ├── CHexConverter.html │ │ │ │ │ ├── ReceiveSppDataThread.OnRecvSppDataListener.html │ │ │ │ │ ├── ReceiveSppDataThread.html │ │ │ │ │ ├── SppEventCbManager.html │ │ │ │ │ ├── Utils.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ └── package-tree.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── send │ │ │ │ ├── IBleOp.html │ │ │ │ ├── OnThreadStateListener.html │ │ │ │ ├── OnWriteDataCallback.html │ │ │ │ ├── SendBleDataThread.BleSendTask.html │ │ │ │ ├── SendBleDataThread.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── listener │ │ │ ├── IHealthRemindListener.html │ │ │ ├── base │ │ │ │ ├── IABleConnectStatusListener.html │ │ │ │ ├── IABluetoothStateListener.html │ │ │ │ ├── IBleNotifyResponse.html │ │ │ │ ├── IBleSendWriteMsgListener.html │ │ │ │ ├── IBleWriteResponse.html │ │ │ │ ├── ICallBack.html │ │ │ │ ├── IConnectResponse.html │ │ │ │ ├── IHandler.html │ │ │ │ ├── IListener.html │ │ │ │ ├── INotifyResponse.html │ │ │ │ ├── IOperate.html │ │ │ │ ├── ISend.html │ │ │ │ ├── IUpdateSdkResponse.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── data │ │ │ │ ├── AbsBloodGlucoseChangeListener.html │ │ │ │ ├── IAlarm2DataListListener.html │ │ │ │ ├── IAlarm2DataReadListener.html │ │ │ │ ├── IAlarmDataListener.html │ │ │ │ ├── IAllHealthDataListener.html │ │ │ │ ├── IAllSetDataListener.html │ │ │ │ ├── IAppReportGpsDataListener.html │ │ │ │ ├── IAutoDetectOriginDataListener.html │ │ │ │ ├── IBPDetectDataListener.html │ │ │ │ ├── IBPFunctionListener.html │ │ │ │ ├── IBPSettingDataListener.html │ │ │ │ ├── IBatteryDataListener.html │ │ │ │ ├── IBloodGlucoseChangeListener.html │ │ │ │ ├── IBreathDataListener.html │ │ │ │ ├── ICameraDataListener.html │ │ │ │ ├── IChantingDataListener.html │ │ │ │ ├── ICheckWearDataListener.html │ │ │ │ ├── IContactOptListener.html │ │ │ │ ├── ICountDownListener.html │ │ │ │ ├── ICustomProtocolStateListener.html │ │ │ │ ├── ICustomSettingDataListener.html │ │ │ │ ├── IDeviceBTConnectionListener.DefaultImpls.html │ │ │ │ ├── IDeviceBTConnectionListener.html │ │ │ │ ├── IDeviceBTInfoListener.html │ │ │ │ ├── IDeviceControlPhoneModelState.html │ │ │ │ ├── IDeviceFuctionDataListener.html │ │ │ │ ├── IDeviceRenameListener.html │ │ │ │ ├── IDrinkDataListener.html │ │ │ │ ├── IECGAutoReportListener.html │ │ │ │ ├── IECGDetectListener.html │ │ │ │ ├── IECGLightDataCallback.html │ │ │ │ ├── IECGReadDataListener.html │ │ │ │ ├── IECGReadIdListener.html │ │ │ │ ├── IECGSwitchListener.html │ │ │ │ ├── IF2DebugListener.html │ │ │ │ ├── IFatigueDataListener.html │ │ │ │ ├── IFindDeviceDatalistener.html │ │ │ │ ├── IFindDevicelistener.html │ │ │ │ ├── IFindPhonelistener.html │ │ │ │ ├── IG15MessageListener.html │ │ │ │ ├── IG15QRCodeSendListener.html │ │ │ │ ├── IGpsLatLonDataListener.html │ │ │ │ ├── IHRVOriginDataListener.html │ │ │ │ ├── IHeartDataListener.html │ │ │ │ ├── IHeartWaringDataListener.html │ │ │ │ ├── IKaaBaDataListener.html │ │ │ │ ├── IKnocknotifyListener.html │ │ │ │ ├── ILanguageDataListener.html │ │ │ │ ├── ILightDataCallBack.html │ │ │ │ ├── ILongSeatDataListener.html │ │ │ │ ├── ILowPowerListener.html │ │ │ │ ├── IMtuChangeListener.html │ │ │ │ ├── IMusicControlListener.html │ │ │ │ ├── IMusicDataListener.html │ │ │ │ ├── INightTurnWristeDataListener.html │ │ │ │ ├── IOriginData3Listener.html │ │ │ │ ├── IOriginDataListener.html │ │ │ │ ├── IOriginProgressListener.html │ │ │ │ ├── IPersonInfoDataListener.html │ │ │ │ ├── IPhoneListener.html │ │ │ │ ├── IPttDetectListener.html │ │ │ │ ├── IPttModelStateListener.html │ │ │ │ ├── IPwdDataListener.html │ │ │ │ ├── IRRIntervalProgressListener.html │ │ │ │ ├── IReportGpsDataListener.html │ │ │ │ ├── IResponseListener.html │ │ │ │ ├── ISOSCallTimesListener.html │ │ │ │ ├── ISOSListener.html │ │ │ │ ├── IScreenLightListener.html │ │ │ │ ├── IScreenLightTimeListener.html │ │ │ │ ├── IScreenStyleListener.html │ │ │ │ ├── ISleepDataListener.html │ │ │ │ ├── ISocialMsgDataListener.html │ │ │ │ ├── ISpo2hBreathBreakRemainListener.html │ │ │ │ ├── ISpo2hDataListener.html │ │ │ │ ├── ISpo2hOriginDataListener.html │ │ │ │ ├── ISportDataListener.html │ │ │ │ ├── ISportModelOriginListener.html │ │ │ │ ├── ISportModelStateListener.html │ │ │ │ ├── ITemptureDataListener.html │ │ │ │ ├── ITemptureDetectDataListener.html │ │ │ │ ├── ITextAlarmDataListener.html │ │ │ │ ├── ITextAlarmDataReadListener.html │ │ │ │ ├── IUIBaseInfoFormAGPSListener.html │ │ │ │ ├── IUIBaseInfoFormCustomListener.html │ │ │ │ ├── IUIBaseInfoFormG15ImgListener.html │ │ │ │ ├── IUIBaseInfoFormServerListener.html │ │ │ │ ├── IUIBaseInfoListener.html │ │ │ │ ├── IUIOprateListener.html │ │ │ │ ├── IUiUpdateListener.html │ │ │ │ ├── IWeatherStatusDataListener.html │ │ │ │ ├── IWomenDataListener.html │ │ │ │ ├── OnDeviceAlarm2ChangedListener.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── oad │ │ │ │ ├── OnDownLoadListener.html │ │ │ │ ├── OnFindOadDeviceListener.html │ │ │ │ ├── OnGetOadVersionListener.html │ │ │ │ ├── OnUpdateCheckListener.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ │ │ ├── model │ │ │ ├── DayState.html │ │ │ ├── G15QRCode.html │ │ │ ├── OadFileBean.html │ │ │ ├── SingleSleepItem.html │ │ │ ├── TUiTheme.html │ │ │ ├── datas │ │ │ │ ├── AlarmData.html │ │ │ │ ├── AlarmData2.html │ │ │ │ ├── AllSetData.html │ │ │ │ ├── AutoDetectOriginData.html │ │ │ │ ├── AutoDetectStateData.html │ │ │ │ ├── BTInfo.BTStatus.html │ │ │ │ ├── BTInfo.html │ │ │ │ ├── BTStatus.Companion.html │ │ │ │ ├── BatteryData.html │ │ │ │ ├── BpData.html │ │ │ │ ├── BpFunctionData.html │ │ │ │ ├── BpSettingData.html │ │ │ │ ├── BreathBreakRemindData.html │ │ │ │ ├── BreathData.html │ │ │ │ ├── ChantingData.html │ │ │ │ ├── CheckWearData.html │ │ │ │ ├── Contact.html │ │ │ │ ├── CountDownData.html │ │ │ │ ├── DrinkData.html │ │ │ │ ├── EcgDetectInfo.html │ │ │ │ ├── EcgDetectResult.html │ │ │ │ ├── EcgDetectState.html │ │ │ │ ├── EcgDiagnosis.html │ │ │ │ ├── EcgSingleData.html │ │ │ │ ├── FatigueData.html │ │ │ │ ├── FindDeviceData.html │ │ │ │ ├── FunctionDeviceSupportData.html │ │ │ │ ├── FunctionSocailMsgData.html │ │ │ │ ├── GpsLatlonData.html │ │ │ │ ├── HRVOriginData.html │ │ │ │ ├── HalfHourBpData.html │ │ │ │ ├── HalfHourRateData.html │ │ │ │ ├── HalfHourSportData.html │ │ │ │ ├── HealthRemind.html │ │ │ │ ├── HeartData.html │ │ │ │ ├── HeartWaringData.html │ │ │ │ ├── InsomniaTimeData.html │ │ │ │ ├── KaaBaData.html │ │ │ │ ├── LanguageData.html │ │ │ │ ├── LongSeatData.html │ │ │ │ ├── LowPowerData.html │ │ │ │ ├── MusicData.html │ │ │ │ ├── NightTurnWristeData.html │ │ │ │ ├── OriginData.html │ │ │ │ ├── OriginData3.html │ │ │ │ ├── OriginHalfHourData.html │ │ │ │ ├── PersonInfoData.html │ │ │ │ ├── PwdData.html │ │ │ │ ├── RRIntervalData.html │ │ │ │ ├── RRLorenzInfo.html │ │ │ │ ├── RRLorenzPointInfo.html │ │ │ │ ├── ReportGpsData.html │ │ │ │ ├── ReportGpsLatLongData.html │ │ │ │ ├── ResponseData.html │ │ │ │ ├── ScreenLightData.html │ │ │ │ ├── ScreenLightTimeData.html │ │ │ │ ├── ScreenStyleData.html │ │ │ │ ├── SleepCrcData.html │ │ │ │ ├── SleepData.html │ │ │ │ ├── SleepPrecisionData.html │ │ │ │ ├── Spo2hData.html │ │ │ │ ├── Spo2hOriginData.html │ │ │ │ ├── SportData.html │ │ │ │ ├── SportModelOriginHeadData.html │ │ │ │ ├── SportModelOriginItemData.html │ │ │ │ ├── SportModelStateData.html │ │ │ │ ├── TemptureData.html │ │ │ │ ├── TemptureDetectData.html │ │ │ │ ├── TextAlarmData.html │ │ │ │ ├── TimeData.html │ │ │ │ ├── UICustomSetData.html │ │ │ │ ├── UIDataAGPS.html │ │ │ │ ├── UIDataCustom.html │ │ │ │ ├── UIDataG15Img.html │ │ │ │ ├── UIDataServer.html │ │ │ │ ├── UiData.html │ │ │ │ ├── UserDateInfo.html │ │ │ │ ├── WeatherData2.html │ │ │ │ ├── WeatherStatusData.html │ │ │ │ ├── WomenData.html │ │ │ │ ├── ecg │ │ │ │ │ ├── FiveMinuteData.html │ │ │ │ │ ├── HRVFiveMinuteData.html │ │ │ │ │ ├── Spo2hMinuteData.html │ │ │ │ │ ├── SportFiveMinuteData.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ └── package-tree.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── weather │ │ │ │ │ ├── WeatherData.html │ │ │ │ │ ├── WeatherEvery3Hour.html │ │ │ │ │ ├── WeatherEveryDay.html │ │ │ │ │ ├── package-frame.html │ │ │ │ │ ├── package-summary.html │ │ │ │ │ └── package-tree.html │ │ │ ├── enums │ │ │ │ ├── DebugCmd.html │ │ │ │ ├── EAalarmStatus.html │ │ │ │ ├── EAllSetStatus.html │ │ │ │ ├── EAllSetType.html │ │ │ │ ├── EBPDetectModel.html │ │ │ │ ├── EBPDetectStatus.html │ │ │ │ ├── EBPStatus.html │ │ │ │ ├── EBloodGlucoseStatus.html │ │ │ │ ├── EBloodGlucoseUnit.html │ │ │ │ ├── ECPUPlatform.html │ │ │ │ ├── ECameraStatus.html │ │ │ │ ├── ECheckWear.html │ │ │ │ ├── EContactOpt.html │ │ │ │ ├── ECountDownStatus.html │ │ │ │ ├── ECpuType.html │ │ │ │ ├── ECustomStatus.html │ │ │ │ ├── EDeviceStatus.html │ │ │ │ ├── EECGResultType.html │ │ │ │ ├── EEcgDataType.html │ │ │ │ ├── EFatigueStatus.html │ │ │ │ ├── EFindDeviceStatus.html │ │ │ │ ├── EFunctionStatus.html │ │ │ │ ├── EGpsStatus.html │ │ │ │ ├── EHeartStatus.html │ │ │ │ ├── EHeartWaringStatus.html │ │ │ │ ├── ELanguage.html │ │ │ │ ├── ELongSeatStatus.html │ │ │ │ ├── ELowPowerOprate.html │ │ │ │ ├── EMultiAlarmOprate.html │ │ │ │ ├── ENightTurnWristeStatus.html │ │ │ │ ├── EOprateStauts.html │ │ │ │ ├── EPwdStatus.html │ │ │ │ ├── ERenameError.html │ │ │ │ ├── ESBBRStatus.html │ │ │ │ ├── ESPO2HStatus.html │ │ │ │ ├── EScreenLight.html │ │ │ │ ├── EScreenLightTime.html │ │ │ │ ├── EScreenStyle.html │ │ │ │ ├── ESex.html │ │ │ │ ├── ESleepTag.html │ │ │ │ ├── ESocailMsg.html │ │ │ │ ├── ESpo2hDataType.html │ │ │ │ ├── ESportModelStateStauts.html │ │ │ │ ├── ESportType.html │ │ │ │ ├── ETemperatureUnit.html │ │ │ │ ├── ETimeMode.html │ │ │ │ ├── EUIFromType.UICode.html │ │ │ │ ├── EUIFromType.html │ │ │ │ ├── EUiUpdateError.html │ │ │ │ ├── EWatchUIElementPosition.html │ │ │ │ ├── EWatchUIElementType.html │ │ │ │ ├── EWatchUIType.html │ │ │ │ ├── EWeatherOprateStatus.html │ │ │ │ ├── EWeatherType.html │ │ │ │ ├── EWomenOprateStatus.html │ │ │ │ ├── EWomenStatus.html │ │ │ │ ├── HealthRemindType.Companion.html │ │ │ │ ├── HealthRemindType.html │ │ │ │ ├── LorenColor.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── settings │ │ │ │ ├── Alarm2Setting.html │ │ │ │ ├── AlarmSetting.html │ │ │ │ ├── AllSetSetting.html │ │ │ │ ├── AutoDetectStateSetting.html │ │ │ │ ├── BpSetting.html │ │ │ │ ├── BreathBreakRemindSetting.html │ │ │ │ ├── ChantingSetting.html │ │ │ │ ├── CheckWearSetting.html │ │ │ │ ├── ContentPhoneSetting.html │ │ │ │ ├── ContentSetting.html │ │ │ │ ├── ContentSmsSetting.html │ │ │ │ ├── ContentSocailSetting.html │ │ │ │ ├── CountDownSetting.html │ │ │ │ ├── CustomSetting.html │ │ │ │ ├── CustomSettingData.html │ │ │ │ ├── DeviceTimeSetting.html │ │ │ │ ├── GpsLatLongSetting.html │ │ │ │ ├── GpsLatLongSettingFromApp.html │ │ │ │ ├── HeartWaringSetting.html │ │ │ │ ├── KaabaSetting.html │ │ │ │ ├── LongSeatSetting.html │ │ │ │ ├── LowPowerSetting.html │ │ │ │ ├── NightTurnWristSetting.html │ │ │ │ ├── OadSetting.html │ │ │ │ ├── ReadOriginSetting.html │ │ │ │ ├── ReadSleepSetting.html │ │ │ │ ├── ScreenSetting.html │ │ │ │ ├── SoldierContentSetting.html │ │ │ │ ├── SportModelSetting.html │ │ │ │ ├── TextAlarm2Setting.html │ │ │ │ ├── WeatherStatusSetting.html │ │ │ │ ├── WomenSetting.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ └── package-tree.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── util │ │ │ ├── Alarm2Util.html │ │ │ ├── AlarmCrcUtil.html │ │ │ ├── BigDecimalUtil.html │ │ │ ├── BitMapUtil.html │ │ │ ├── CUtil.Companion.html │ │ │ ├── CUtil.html │ │ │ ├── ColorUtil.html │ │ │ ├── ConVertyUtil.Companion.html │ │ │ ├── ConVertyUtil.html │ │ │ ├── ConvertHelper.html │ │ │ ├── CrcUtil.html │ │ │ ├── DateUtil.html │ │ │ ├── DialPictureUtil.OnDialPreviewCreateAndSaveListener.html │ │ │ ├── DialPictureUtil.html │ │ │ ├── ECGDataConvertUtl.html │ │ │ ├── EcgHZ250.html │ │ │ ├── EcgHZ256.html │ │ │ ├── EcgHZ512.html │ │ │ ├── EcgIdParseUtil.html │ │ │ ├── EcgUtil.html │ │ │ ├── FunctionCheckUtil.html │ │ │ ├── HRVOriginUtil.html │ │ │ ├── HVPInfoUtil.html │ │ │ ├── HalfHourDataUtil.html │ │ │ ├── HrvScoreUtil.html │ │ │ ├── InstitutionUtil.html │ │ │ ├── LOG_EXTKt.html │ │ │ ├── MD5.html │ │ │ ├── MultiAlarmSp.html │ │ │ ├── ParseBlockUtil.html │ │ │ ├── RRUtils.html │ │ │ ├── ScaleDialUtil.html │ │ │ ├── SerializeUtil.html │ │ │ ├── Spo2hOriginUtil.html │ │ │ ├── SportUtil.html │ │ │ ├── StaticUtil.html │ │ │ ├── TextAlarmSp.html │ │ │ ├── UiServerHttpUtil.html │ │ │ ├── UiUpdateUtil.html │ │ │ ├── VPLogger.html │ │ │ ├── VpBleByteUtil.html │ │ │ ├── VpContentUtil.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ └── package-tree.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── overview-frame.html │ ├── overview-summary.html │ ├── overview-tree.html │ ├── package-list │ ├── script.js │ └── stylesheet.css ├── jar_base │ ├── gson-2.2.4.jar │ ├── libble-0.5.aar │ ├── libcomx-0.5.jar │ ├── libdfu-1.5.aar │ ├── libfastdfu-0.5.aar │ └── vpbluetooth_1.0.4.jar ├── jar_core │ ├── BmpConvert_V1.2.1-release.aar │ ├── JL_Watch_V1.10.0-release.aar │ ├── jl_bt_ota_V1.9.3-release.aar │ ├── jl_rcsp_V0.5.2-release.aar │ ├── vpbluetooth-1.16.aar │ └── vpprotocol-2.3.19.15.aar ├── jniLibs │ ├── arm64-v8a │ │ └── libnative-lib.so │ ├── armeabi-v7a │ │ └── libnative-lib.so │ ├── x86 │ │ └── libnative-lib.so │ └── x86_64 │ │ └── libnative-lib.so ├── readme.md ├── sdkdoc │ ├── VeepooSDK Android Api - English.md │ ├── VeepooSDK Android Api.md │ ├── veepooSDK_Bug反馈文档.doc │ ├── veepooSDK_Bug反馈文档.pdf │ ├── veepooSDK接入文档.doc │ ├── veepooSDK接入文档.pdf │ └── 交互log │ │ ├── SharePerence数据.txt │ │ ├── 健康数据.txt │ │ ├── 功能数据.txt │ │ └── 睡眠数据.txt └── vpsdk_1.2.3.apk └── sh.exe.stackdump /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Smartphone (please complete the following information):** 21 | - Device: [e.g. iPhone6] 22 | - OS: [e.g. iOS8.1] 23 | - Version [e.g. 22] 24 | 25 | **SDK Version(please complete the following information):** 26 | - Version [e.g. 2.0.0.3] 27 | 28 | **Additional context** 29 | Add any other context about the problem here. 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | android_sdk_source/Demo/VpBluetoothSDK/.idea/jarRepositories.xml 4 | android_sdk_source/Demo/VpBluetoothSDK/.idea/misc.xml 5 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 21 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | 4 | apply plugin: 'kotlin-android-extensions' 5 | 6 | 7 | project.ext { 8 | hasLottie = true 9 | } 10 | 11 | android { 12 | compileSdkVersion 34 13 | signingConfigs { 14 | release { 15 | keyAlias 'zhongxin' 16 | keyPassword 'veepooandroid' 17 | storeFile file('F:\\ExportProject\\zhongxin003.keystore') 18 | storePassword 'veepooandroid' 19 | } 20 | } 21 | defaultConfig { 22 | applicationId "com.timaimee.vpdemo"//com.timaimee.vpdemo //com.ecg.kg 23 | minSdkVersion 24 24 | targetSdkVersion 34 25 | versionCode 159 26 | versionName "1.5.9" 27 | ndk { 28 | //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) 29 | abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" 30 | } 31 | } 32 | buildTypes { 33 | release { 34 | buildConfigField("boolean", "IS_DEBUG", "false") 35 | minifyEnabled false 36 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 37 | signingConfig signingConfigs.release 38 | } 39 | debug { 40 | buildConfigField("boolean", "IS_DEBUG", "true") 41 | } 42 | // release { 43 | // minifyEnabled false 44 | // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 45 | // } 46 | } 47 | sourceSets { 48 | main { 49 | aidl.srcDirs = ['src/main/aidl'] 50 | } 51 | } 52 | 53 | compileOptions { 54 | sourceCompatibility JavaVersion.VERSION_1_8 55 | targetCompatibility JavaVersion.VERSION_1_8 56 | } 57 | 58 | 59 | 60 | } 61 | repositories { 62 | flatDir { 63 | dirs 'libs' //this way we can find the .aar file in libs folder 64 | } 65 | } 66 | 67 | dependencies { 68 | implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs') 69 | implementation files('libs/libcomx-0.5.jar') 70 | implementation files('libs/gson-2.2.4.jar') 71 | implementation files('libs/vpbluetooth-1.16.aar') 72 | implementation files('libs/vpprotocol-2.3.19.15.aar') 73 | implementation files('libs/AMap2DMap_6.0.0_AMapSearch_9.4.5_AMapLocation_6.2.0_20221026.jar') 74 | 75 | implementation files('libs/JL_Watch_V1.10.0-release.aar') 76 | implementation files('libs/jl_rcsp_V0.5.2-release.aar') 77 | implementation files('libs/jl_bt_ota_V1.9.3-release.aar') 78 | implementation files('libs/BmpConvert_V1.2.1-release.aar') 79 | 80 | testImplementation 'junit:junit:4.12' 81 | implementation 'androidx.appcompat:appcompat:1.3.1' 82 | implementation 'androidx.recyclerview:recyclerview:1.2.1' 83 | implementation 'com.android.support:design:28.0.0-alpha1' 84 | implementation 'com.orhanobut:logger:1.15' 85 | implementation 'no.nordicsemi.android.support.v18:scanner:1.4.2' 86 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3' 87 | 88 | // implementation 'com.amap.api:3dmap:latest.integration' 89 | // implementation 'com.amap.api:search:latest.integration' 90 | implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.72" 91 | 92 | implementation 'com.yanzhenjie.recyclerview:support:1.3.2' 93 | implementation 'tech.gujin:toast-util:1.2.0' 94 | 95 | // implementation 'cn.carbs.android:SegmentControlView:1.0.0' 96 | 97 | } 98 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/AMap2DMap_6.0.0_AMapSearch_9.4.5_AMapLocation_6.2.0_20221026.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/AMap2DMap_6.0.0_AMapSearch_9.4.5_AMapLocation_6.2.0_20221026.jar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/BmpConvert_V1.2.1-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/BmpConvert_V1.2.1-release.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/JL_Watch_V1.10.0-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/JL_Watch_V1.10.0-release.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/gson-2.2.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/gson-2.2.4.jar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/jl_bt_ota_V1.9.3-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/jl_bt_ota_V1.9.3-release.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/jl_rcsp_V0.5.2-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/jl_rcsp_V0.5.2-release.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/libble-0.5.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/libble-0.5.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/libcomx-0.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/libcomx-0.5.jar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/libdfu-1.5.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/libdfu-1.5.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/libfastdfu-0.5.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/libfastdfu-0.5.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/vpbluetooth-1.16.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/vpbluetooth-1.16.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/libs/vpprotocol-2.3.19.15.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/libs/vpprotocol-2.3.19.15.aar -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\sdk_20160704\ANDROIDSDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/release/VPSDK_2.2.95.15.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/release/VPSDK_2.2.95.15.apk -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.timaimee.vpdemo", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "properties": [], 14 | "versionCode": 156, 15 | "versionName": "1.5.6", 16 | "enabled": true, 17 | "outputFile": "app-release.apk" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/androidTest/java/com/timaimee/vpdemo/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217103821.png_31140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217103821.png_31140.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217104452.png_16165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217104452.png_16165.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217112135.png_41670.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/20230217112135.png_41670.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_rect_240_240_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_rect_240_240_bg.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_round_240_240_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_round_240_240_bg.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_round_360_360_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/assets/custom_round_360_360_bg.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/DeviceCompare.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo; 2 | 3 | import com.inuker.bluetooth.library.search.SearchResult; 4 | 5 | import java.util.Comparator; 6 | 7 | /** 8 | * Created by timaimee on 2017/2/8. 9 | */ 10 | public class DeviceCompare implements Comparator { 11 | 12 | @Override 13 | public int compare(SearchResult o1, SearchResult o2) { 14 | return o2.rssi - o1.rssi; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/AddClockActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | 6 | import androidx.appcompat.app.AppCompatActivity; 7 | import androidx.recyclerview.widget.LinearLayoutManager; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | 10 | import com.timaimee.vpdemo.R; 11 | import com.timaimee.vpdemo.adapter.OnRecycleViewClickCallback; 12 | import com.timaimee.vpdemo.bean.TimeZoneBean; 13 | import com.timaimee.vpdemo.utils.XmlParser; 14 | 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | /** 19 | * Description 添加世界时钟 20 | * 21 | * @author KYM. 22 | * @date 2024/4/10 20:01 23 | */ 24 | public class AddClockActivity extends AppCompatActivity implements OnRecycleViewClickCallback { 25 | 26 | private RecyclerView mRecyclerView; 27 | private WorldClockAddListAdapter mAdapter; 28 | 29 | private List dataList = new ArrayList<>(); 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | setContentView(R.layout.activity_add_clock); 35 | mRecyclerView = findViewById(R.id.recyclerView); 36 | mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 37 | mAdapter = new WorldClockAddListAdapter(dataList, this); 38 | mRecyclerView.setAdapter(mAdapter); 39 | 40 | new Thread(new Runnable() { 41 | @Override 42 | public void run() { 43 | List timeZoneBeans = XmlParser.parseXml2TimeZoneBeanList(AddClockActivity.this, R.xml.world_clock_datasource); 44 | runOnUiThread(new Runnable() { 45 | @Override 46 | public void run() { 47 | dataList.clear(); 48 | dataList.addAll(timeZoneBeans); 49 | mAdapter.notifyDataSetChanged(); 50 | } 51 | }); 52 | } 53 | }).run(); 54 | } 55 | 56 | @Override 57 | public void OnRecycleViewClick(int position) { 58 | Bundle bundle = new Bundle(); 59 | bundle.putSerializable("TimeZoneBean", dataList.get(position)); 60 | Intent intent = new Intent(); 61 | intent.putExtras(bundle); 62 | setResult(1115, intent); 63 | finish(); 64 | } 65 | } -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/CustomProgressDialog.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.view.View; 6 | import android.widget.TextView; 7 | 8 | import com.timaimee.vpdemo.R; 9 | 10 | 11 | public class CustomProgressDialog extends Dialog { 12 | 13 | public CustomProgressDialog(Context context) { 14 | super(context, R.style.loading_dialog); 15 | this.setContentView(R.layout.dialog_connect_progress); 16 | } 17 | 18 | public void show(String str) { 19 | if (this.isShowing()) { 20 | this.dismiss(); 21 | } 22 | this.show(); 23 | } 24 | 25 | public void showNoTips() { 26 | if (this.isShowing()) { 27 | this.dismiss(); 28 | } 29 | this.setCancelable(false); 30 | this.show(); 31 | } 32 | 33 | public void disMissDialog() { 34 | if (this.isShowing()) { 35 | this.dismiss(); 36 | } 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/ECGSwitchActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.os.Handler; 6 | import android.os.Looper; 7 | import androidx.annotation.Nullable; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.TextView; 11 | import android.widget.Toast; 12 | 13 | import com.timaimee.vpdemo.R; 14 | import com.veepoo.protocol.VPOperateManager; 15 | import com.veepoo.protocol.listener.base.IBleWriteResponse; 16 | import com.veepoo.protocol.listener.data.IECGSwitchListener; 17 | import com.veepoo.protocol.model.enums.EFunctionStatus; 18 | 19 | /** 20 | * Author: YWX 21 | * Date: 2022/3/17 15:36 22 | * Description: ecg开关状态 23 | */ 24 | public class ECGSwitchActivity extends Activity implements IECGSwitchListener { 25 | 26 | Button btnRead, btnClose, btnOpen; 27 | TextView tvInfo; 28 | 29 | @Override 30 | protected void onCreate(@Nullable Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_ecg_switch); 33 | btnRead = findViewById(R.id.btnReadEcg); 34 | btnClose = findViewById(R.id.btnCloseEcg); 35 | btnOpen = findViewById(R.id.btnOpenEcg); 36 | tvInfo = findViewById(R.id.tvInfo); 37 | 38 | btnRead.setOnClickListener(new View.OnClickListener() { 39 | @Override 40 | public void onClick(View v) { 41 | VPOperateManager.getMangerInstance(ECGSwitchActivity.this).readECGSwitchStatus(writeResponse, ECGSwitchActivity.this); 42 | } 43 | }); 44 | 45 | btnOpen.setOnClickListener(new View.OnClickListener() { 46 | @Override 47 | public void onClick(View v) { 48 | VPOperateManager.getMangerInstance(ECGSwitchActivity.this).openECGSwitch(writeResponse, ECGSwitchActivity.this); 49 | } 50 | }); 51 | 52 | btnClose.setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | VPOperateManager.getMangerInstance(ECGSwitchActivity.this).closeECGSwitch(writeResponse, ECGSwitchActivity.this); 56 | } 57 | }); 58 | 59 | } 60 | 61 | @Override 62 | protected void onResume() { 63 | super.onResume(); 64 | VPOperateManager.getMangerInstance(ECGSwitchActivity.this).readECGSwitchStatus(writeResponse, ECGSwitchActivity.this); 65 | Toast.makeText(this, "reading ecg function supportable...", Toast.LENGTH_SHORT).show(); 66 | } 67 | 68 | private boolean isSupport = false; 69 | 70 | @Override 71 | public void onECGSwitchStatusChanged(EFunctionStatus eFunctionStatus) { 72 | if (eFunctionStatus == EFunctionStatus.UNSUPPORT) { 73 | Toast.makeText(this, "device not support ecg function", Toast.LENGTH_SHORT).show(); 74 | tvInfo.setText("ecg not support "); 75 | isSupport = false; 76 | } else { 77 | if (eFunctionStatus == EFunctionStatus.SUPPORT_OPEN) { 78 | isSupport = true; 79 | Toast.makeText(this, "ecg function is open", Toast.LENGTH_SHORT).show(); 80 | tvInfo.setText("ecg open success "); 81 | 82 | } else if (eFunctionStatus == EFunctionStatus.SUPPORT_CLOSE) { 83 | isSupport = true; 84 | Toast.makeText(this, "ecg function is close", Toast.LENGTH_SHORT).show(); 85 | tvInfo.setText("ecg close success "); 86 | 87 | } 88 | } 89 | 90 | } 91 | 92 | 93 | private IBleWriteResponse writeResponse = new IBleWriteResponse() { 94 | @Override 95 | public void onResponse(int code) { 96 | 97 | } 98 | }; 99 | } 100 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/EcgDetectActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import androidx.annotation.Nullable; 7 | import android.view.View; 8 | import android.widget.Button; 9 | 10 | import com.orhanobut.logger.Logger; 11 | import com.timaimee.vpdemo.R; 12 | import com.veepoo.protocol.VPOperateManager; 13 | import com.veepoo.protocol.listener.base.IBleWriteResponse; 14 | import com.veepoo.protocol.listener.data.IECGDetectListener; 15 | import com.veepoo.protocol.model.datas.EcgDetectInfo; 16 | import com.veepoo.protocol.model.datas.EcgDetectResult; 17 | import com.veepoo.protocol.model.datas.EcgDetectState; 18 | import com.veepoo.protocol.model.datas.EcgDiagnosis; 19 | 20 | import java.util.Arrays; 21 | 22 | public class EcgDetectActivity extends Activity implements View.OnClickListener { 23 | private final static String TAG = EcgDetectActivity.class.getSimpleName(); 24 | EcgHeartRealthView mEcgHeartView; 25 | Button start, stop; 26 | Button notify; 27 | Context mContext; 28 | WriteResponse writeResponse = new WriteResponse(); 29 | 30 | @Override 31 | protected void onCreate(@Nullable Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | setContentView(R.layout.activity_ecgdetect); 34 | mContext = EcgDetectActivity.this; 35 | mEcgHeartView = (EcgHeartRealthView) findViewById(R.id.ecg_real_view); 36 | notify = (Button) findViewById(R.id.greenlightdata); 37 | start = (Button) findViewById(R.id.start); 38 | stop = (Button) findViewById(R.id.stop); 39 | 40 | notify.setOnClickListener(this); 41 | start.setOnClickListener(this); 42 | stop.setOnClickListener(this); 43 | } 44 | 45 | @Override 46 | public void onClick(View v) { 47 | int id = v.getId(); 48 | switch (id) { 49 | case R.id.start: 50 | VPOperateManager.getInstance().startDetectECG(writeResponse, true, new IECGDetectListener() { 51 | @Override 52 | public void onEcgDetectInfoChange(EcgDetectInfo ecgDetectInfo) { 53 | String message = "-onEcgDetectInfoChange-:" + ecgDetectInfo.toString(); 54 | Logger.t(TAG).i(message); 55 | } 56 | 57 | @Override 58 | public void onEcgDetectStateChange(EcgDetectState ecgDetectState) { 59 | String message = "-onEcgDetectStateChange-:" + ecgDetectState.toString(); 60 | Logger.t(TAG).i(message); 61 | } 62 | 63 | @Override 64 | public void onEcgDetectResultChange(EcgDetectResult ecgDetectResult) { 65 | String message = "-onEcgDetectResultChange-:" + ecgDetectResult.toString(); 66 | Logger.t(TAG).i(message); 67 | } 68 | 69 | // @Override 70 | // public void onEcgADCChange(int[] ecgData) { 71 | // String message = "-onEcgADCChange-:" + Arrays.toString(ecgData); 72 | // Logger.t(TAG).i(message); 73 | //// mEcgHeartView.changeData(ecgData, 20); 74 | // } 75 | 76 | @Override 77 | public void onEcgDetectDiagnosisChange(EcgDiagnosis ecgDiagnosis) { 78 | Logger.t(TAG).i("ecg多诊断 :: = " + ecgDiagnosis.toString()); 79 | } 80 | 81 | @Override 82 | public void onEcgADCChange(int[] ints, int[] ints1) { 83 | 84 | } 85 | }); 86 | break; 87 | case R.id.stop: 88 | mEcgHeartView.clearData(); 89 | VPOperateManager.getMangerInstance(mContext).stopDetectECG(writeResponse, true, null); 90 | break; 91 | } 92 | } 93 | 94 | /** 95 | * 写入的状态返回 96 | */ 97 | class WriteResponse implements IBleWriteResponse { 98 | 99 | @Override 100 | public void onResponse(int code) { 101 | Logger.t(TAG).i("write cmd status:" + code); 102 | 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/F2DebugActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import androidx.annotation.Nullable; 6 | import android.view.View; 7 | import android.widget.Button; 8 | import android.widget.TextView; 9 | import android.widget.Toast; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.veepoo.protocol.VPOperateManager; 13 | import com.veepoo.protocol.listener.base.IBleWriteResponse; 14 | import com.veepoo.protocol.listener.data.IECGSwitchListener; 15 | import com.veepoo.protocol.listener.data.IF2DebugListener; 16 | import com.veepoo.protocol.model.enums.DebugCmd; 17 | import com.veepoo.protocol.model.enums.EFunctionStatus; 18 | 19 | /** 20 | * Author: YWX 21 | * Date: 2022/3/17 15:36 22 | * Description: ecg开关状态 23 | */ 24 | public class F2DebugActivity extends Activity implements IF2DebugListener { 25 | 26 | Button btnCmd1, btnCmd2, btnCmd3, btnCmd4; 27 | TextView tvInfo; 28 | 29 | @Override 30 | protected void onCreate(@Nullable Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_f2_debug); 33 | btnCmd1 = findViewById(R.id.btnCmd1); 34 | btnCmd2 = findViewById(R.id.btnCmd2); 35 | btnCmd3 = findViewById(R.id.btnCmd3); 36 | btnCmd4 = findViewById(R.id.btnCmd4); 37 | tvInfo = findViewById(R.id.tvInfo); 38 | btnCmd1.setText(DebugCmd.CMD1.des); 39 | btnCmd2.setText(DebugCmd.CMD2.des); 40 | btnCmd3.setText(DebugCmd.CMD3.des); 41 | btnCmd4.setText(DebugCmd.CMD4.des); 42 | 43 | // btnCmd1.setOnClickListener(new View.OnClickListener() { 44 | // @Override 45 | // public void onClick(View v) { 46 | // VPOperateManager.getMangerInstance(F2DebugActivity.this).sendF2DebugCmd(writeResponse, DebugCmd.CMD1, F2DebugActivity.this); 47 | // } 48 | // }); 49 | // 50 | // btnCmd2.setOnClickListener(new View.OnClickListener() { 51 | // @Override 52 | // public void onClick(View v) { 53 | // VPOperateManager.getMangerInstance(F2DebugActivity.this).sendF2DebugCmd(writeResponse, DebugCmd.CMD2, F2DebugActivity.this); 54 | // } 55 | // }); 56 | // 57 | // btnCmd3.setOnClickListener(new View.OnClickListener() { 58 | // @Override 59 | // public void onClick(View v) { 60 | // VPOperateManager.getMangerInstance(F2DebugActivity.this).sendF2DebugCmd(writeResponse, DebugCmd.CMD3, F2DebugActivity.this); 61 | // } 62 | // }); 63 | // 64 | // btnCmd4.setOnClickListener(new View.OnClickListener() { 65 | // @Override 66 | // public void onClick(View v) { 67 | // VPOperateManager.getMangerInstance(F2DebugActivity.this).sendF2DebugCmd(writeResponse, DebugCmd.CMD4, F2DebugActivity.this); 68 | // } 69 | // }); 70 | } 71 | 72 | @Override 73 | protected void onResume() { 74 | super.onResume(); 75 | } 76 | 77 | private IBleWriteResponse writeResponse = new IBleWriteResponse() { 78 | @Override 79 | public void onResponse(int code) { 80 | 81 | } 82 | }; 83 | 84 | @Override 85 | public void onIF2DebugStatusChanged(boolean isSuccess, DebugCmd debugCmd) { 86 | tvInfo.setText(debugCmd.toString() + ", 是否成功:" + isSuccess); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/FunctionSwitchActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | import androidx.appcompat.app.AppCompatActivity; 6 | import android.widget.TextView; 7 | 8 | import com.timaimee.vpdemo.R; 9 | import com.veepoo.protocol.VPOperateManager; 10 | import com.veepoo.protocol.listener.data.IDeviceFunctionStatusChangeListener; 11 | import com.veepoo.protocol.model.enums.EFunctionStatus; 12 | import com.veepoo.protocol.util.VPLogger; 13 | 14 | import org.jetbrains.annotations.NotNull; 15 | 16 | public class FunctionSwitchActivity extends AppCompatActivity { 17 | 18 | TextView tv; 19 | 20 | @Override 21 | protected void onCreate(@Nullable Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | setContentView(R.layout.activity_function_swtich); 24 | tv = findViewById(R.id.tv); 25 | if (OperaterActivity.des != null) { 26 | tv.setText(OperaterActivity.des + "::::" + (OperaterActivity.currentState == EFunctionStatus.SUPPORT_OPEN ? "开" : "关")); 27 | } 28 | VPOperateManager.getInstance().setDeviceFunctionStatusChangeListener(new IDeviceFunctionStatusChangeListener() { 29 | @Override 30 | public void onFunctionStatusChanged(@NotNull DeviceFunction function, @NotNull EFunctionStatus status) { 31 | VPLogger.e("未设置设备功能状态改变监听:" + function.getDes() + " - " + status); 32 | runOnUiThread(new Runnable() { 33 | @Override 34 | public void run() { 35 | OperaterActivity.currentState = status; 36 | OperaterActivity.des = function.getDes(); 37 | tv.setText(OperaterActivity.des + "::::" + (OperaterActivity.currentState == EFunctionStatus.SUPPORT_OPEN ? "开" : "关")); 38 | } 39 | }); 40 | } 41 | }); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/G15QRCodeActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import androidx.annotation.Nullable; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | import android.view.View; 6 | import android.widget.EditText; 7 | import android.widget.RadioGroup; 8 | import android.widget.Toast; 9 | 10 | import com.orhanobut.logger.Logger; 11 | import com.timaimee.vpdemo.R; 12 | import com.veepoo.protocol.VPOperateManager; 13 | import com.veepoo.protocol.listener.base.IBleWriteResponse; 14 | import com.veepoo.protocol.listener.data.IG15QRCodeSendListener; 15 | import com.veepoo.protocol.model.G15QRCode; 16 | import com.veepoo.protocol.util.VPLogger; 17 | 18 | /** 19 | * Author: YWX 20 | * Date: 2022/2/15 10:06 21 | * Description: 22 | */ 23 | public class G15QRCodeActivity extends AppCompatActivity { 24 | 25 | public static final String TAG = G15QRCodeActivity.class.getSimpleName(); 26 | 27 | EditText etContent; 28 | EditText etName; 29 | EditText etNumber; 30 | EditText etGroup; 31 | RadioGroup rgType; 32 | 33 | private int checkType = 0x00; 34 | 35 | @Override 36 | protected void onCreate(@Nullable android.os.Bundle savedInstanceState) { 37 | super.onCreate(savedInstanceState); 38 | setContentView(R.layout.activity_g15_qrcode); 39 | { 40 | etContent = findViewById(R.id.etContent); 41 | etName = findViewById(R.id.etName); 42 | etNumber = findViewById(R.id.etNumber); 43 | etGroup = findViewById(R.id.etGroup); 44 | rgType = findViewById(R.id.rgQRCode); 45 | } 46 | rgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 47 | @Override 48 | public void onCheckedChanged(RadioGroup group, int checkedId) { 49 | if (checkedId == R.id.rbHz) { 50 | checkType = 0x00; 51 | } else if (checkedId == R.id.rbSk) { 52 | checkType = 0x01; 53 | } 54 | } 55 | }); 56 | } 57 | 58 | public void sendQRCode(View view) { 59 | G15QRCode qrCode = getG15QRCode(); 60 | if (qrCode == null) return; 61 | try { 62 | VPOperateManager.getMangerInstance(this).sendG15QRCode(new IBleWriteResponse() { 63 | @Override 64 | public void onResponse(int code) { 65 | Logger.t(TAG).e("sendG15QRCode-------------->" + code); 66 | } 67 | }, qrCode, new IG15QRCodeSendListener() { 68 | @Override 69 | public void onG15QRCodeSendSuccess() { 70 | Toast.makeText(G15QRCodeActivity.this, "二维码发送成功", Toast.LENGTH_SHORT).show(); 71 | } 72 | 73 | @Override 74 | public void onG15QRCodeSendFailed() { 75 | Toast.makeText(G15QRCodeActivity.this, "二维码发送失败", Toast.LENGTH_SHORT).show(); 76 | } 77 | }); 78 | } catch (Exception e) { 79 | e.printStackTrace(); 80 | } 81 | } 82 | 83 | 84 | private G15QRCode getG15QRCode() { 85 | String qrContent = etContent.getText().toString().trim(); 86 | String qrName = etName.getText().toString().trim(); 87 | String qrNumber = etNumber.getText().toString().trim(); 88 | String qrGroup = etGroup.getText().toString().trim(); 89 | try { 90 | G15QRCode qrCode = new G15QRCode(checkType, qrContent, qrName, qrGroup, qrNumber); 91 | VPLogger.e("二维码:" + qrCode.toString()); 92 | return qrCode; 93 | } catch (Exception e) { 94 | Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 95 | return null; 96 | } 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/HealthRemindActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.os.Bundle; 4 | import android.widget.Toast; 5 | 6 | import androidx.annotation.Nullable; 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import androidx.recyclerview.widget.LinearLayoutManager; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.timaimee.vpdemo.adapter.HealthRemindAdapter; 13 | import com.veepoo.protocol.VPOperateManager; 14 | import com.veepoo.protocol.listener.IHealthRemindListener; 15 | import com.veepoo.protocol.listener.base.IBleWriteResponse; 16 | import com.veepoo.protocol.model.datas.HealthRemind; 17 | import com.veepoo.protocol.model.enums.HealthRemindType; 18 | 19 | import org.jetbrains.annotations.NotNull; 20 | 21 | import java.util.ArrayList; 22 | import java.util.List; 23 | 24 | public class HealthRemindActivity extends AppCompatActivity implements HealthRemindAdapter.OnHealthRemindToggleChangeListener, IHealthRemindListener { 25 | RecyclerView mRecyclerView; 26 | HealthRemindAdapter mAdapter; 27 | List mSettings = new ArrayList<>(); 28 | 29 | @Override 30 | protected void onCreate(@Nullable Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_health_remind); 33 | initHealthRemindView(); 34 | VPOperateManager.getInstance().readHealthRemind(HealthRemindType.ALL, this, new IBleWriteResponse() { 35 | @Override 36 | public void onResponse(int code) { 37 | 38 | } 39 | }); 40 | } 41 | 42 | private void initHealthRemindView() { 43 | mSettings.clear(); 44 | mRecyclerView = findViewById(R.id.rvHealthRemind); 45 | mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 46 | mAdapter = new HealthRemindAdapter(mSettings, this); 47 | mRecyclerView.setAdapter(mAdapter); 48 | } 49 | 50 | @Override 51 | protected void onDestroy() { 52 | super.onDestroy(); 53 | } 54 | 55 | @Override 56 | public void onToggleChanged(HealthRemind setting) { 57 | VPOperateManager.getInstance().settingHealthRemind(setting, this, new IBleWriteResponse() { 58 | @Override 59 | public void onResponse(int code) { 60 | 61 | } 62 | }); 63 | } 64 | 65 | @Override 66 | public void functionNotSupport() { 67 | showMsg("暂不支持该功能"); 68 | } 69 | 70 | @Override 71 | public void onHealthRemindRead(@NotNull HealthRemind healthRemind) { 72 | if (!mSettings.contains(healthRemind)) { 73 | mSettings.add(healthRemind); 74 | mAdapter.notifyDataSetChanged(); 75 | } 76 | } 77 | 78 | @Override 79 | public void onHealthRemindSettingSuccess(@NotNull HealthRemind healthRemind) { 80 | showMsg("设置成功:" + healthRemind.toString()); 81 | } 82 | 83 | @Override 84 | public void onHealthRemindReadFailed() { 85 | showMsg("读取失败"); 86 | } 87 | 88 | @Override 89 | public void onHealthRemindSettingFailed(@NotNull HealthRemindType healthRemindType) { 90 | showMsg("设置失败:" + healthRemindType.getDes()); 91 | } 92 | 93 | public void showMsg(String msg) { 94 | Toast.makeText(HealthRemindActivity.this, msg, Toast.LENGTH_SHORT).show(); 95 | } 96 | 97 | @Override 98 | public void onHealthRemindReport(@NotNull HealthRemind healthRemind) { 99 | showMsg("健康提醒上报:" + healthRemind.toString()); 100 | } 101 | 102 | @Override 103 | public void onHealthRemindReportFailed() { 104 | showMsg("健康提醒上报:failed" ); 105 | } 106 | 107 | @Override 108 | public void onHealthRemindReadingComplete() { 109 | 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/InstitutionActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.text.TextUtils; 6 | import android.view.View; 7 | import android.widget.Button; 8 | import android.widget.EditText; 9 | import android.widget.TextView; 10 | 11 | import com.orhanobut.logger.Logger; 12 | import com.timaimee.vpdemo.R; 13 | import com.veepoo.protocol.util.InstitutionUtil; 14 | 15 | /** 16 | * Created by timaimee on 2017/4/24. 17 | */ 18 | public class InstitutionActivity extends Activity implements View.OnClickListener { 19 | private final static String TAG = AimSportCalcActivity.class.getSimpleName(); 20 | TextView tv; 21 | EditText heightEd, weightEd, distanceEd; 22 | 23 | int height = 175, weight = 50, distance = 50; 24 | Button update; 25 | 26 | @Override 27 | protected void onCreate(Bundle savedInstanceState) { 28 | super.onCreate(savedInstanceState); 29 | setContentView(R.layout.activity_institution); 30 | tv = (TextView) findViewById(R.id.institution_tv); 31 | 32 | heightEd = (EditText) findViewById(R.id.institution_person_height); 33 | weightEd = (EditText) findViewById(R.id.institution_person_weight); 34 | distanceEd = (EditText) findViewById(R.id.institution_distance); 35 | update = (Button) findViewById(R.id.institution_update); 36 | update.setOnClickListener(this); 37 | 38 | String institutionStr = getInstitution(height, weight, distance); 39 | tv.setText(institutionStr); 40 | Logger.t(TAG).i(institutionStr); 41 | } 42 | 43 | private String getInstitution(int height, int weight, int distance) { 44 | 45 | StringBuffer sb = new StringBuffer(); 46 | 47 | 48 | int lbcm = InstitutionUtil.cmToLBCM(height); 49 | String cmToLbcm = "公制cm-->英制cm," + height + "cm->" + lbcm / 12 + "\'" + lbcm % 12 + "\'\'"; 50 | String lbcmTocm = "英制cm-->公制cm," + lbcm / 12 + "\'" + lbcm % 12 + "\'\'->" + InstitutionUtil.lbcmToCM(lbcm) + "cm"; 51 | 52 | float lbkg = InstitutionUtil.kgToLBKG(weight); 53 | String kgToLbkg = "公制kg-->英制kg, " + weight + "kg->" + lbkg + "Lbs"; 54 | String lbkgTokg = "英制kg-->公制kg, " + lbkg + "Lbs->" + InstitutionUtil.lbkgToKG(lbkg) + "kg"; 55 | 56 | double lbkm1 = InstitutionUtil.kmToLBKM1(distance); 57 | double lbkm2 = InstitutionUtil.kmToLBKM2(distance); 58 | String kmToLbkm1 = "公制km-->英制km,一位小数," + distance + "km->" + lbkm1 + "mile"; 59 | String kmToLbkm2 = "公制km-->英制km,二位小数," + distance + "km->" + InstitutionUtil.kmToLBKM2(distance) + "mile"; 60 | String LbkmTokm = "英制km-->公制km,2位小数," + lbkm2 + "mile->" + InstitutionUtil.LBkmTokm(lbkm2) + "km"; 61 | 62 | sb.append(kmToLbkm1); 63 | sb.append("\n"); 64 | sb.append(kmToLbkm2); 65 | sb.append("\n"); 66 | sb.append(LbkmTokm); 67 | sb.append("\n"); 68 | sb.append("\n"); 69 | sb.append("\n"); 70 | sb.append(cmToLbcm); 71 | sb.append("\n"); 72 | sb.append(lbcmTocm); 73 | sb.append("\n"); 74 | sb.append("\n"); 75 | sb.append("\n"); 76 | sb.append(kgToLbkg); 77 | sb.append("\n"); 78 | sb.append(lbkgTokg); 79 | sb.append("\n"); 80 | 81 | return sb.toString(); 82 | } 83 | 84 | @Override 85 | public void onClick(View v) { 86 | String heightStr = heightEd.getText().toString(); 87 | if (!TextUtils.isEmpty(heightStr)) { 88 | height = Integer.valueOf(heightStr); 89 | } 90 | 91 | String weightStr = weightEd.getText().toString(); 92 | if (!TextUtils.isEmpty(weightStr)) { 93 | weight = Integer.valueOf(weightStr); 94 | } 95 | 96 | String stepStr = distanceEd.getText().toString(); 97 | if (!TextUtils.isEmpty(stepStr)) { 98 | distance = Integer.valueOf(stepStr); 99 | } 100 | String institutionStr = getInstitution(height, weight, distance); 101 | tv.setText(institutionStr); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/activity/WorldClockAddListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.activity; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.timaimee.vpdemo.adapter.OnRecycleViewClickCallback; 13 | import com.timaimee.vpdemo.bean.TimeZoneBean; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Description 世界时钟适配 19 | * 20 | * @author KYM. 21 | * @date 2024/4/10 16:25 22 | */ 23 | public class WorldClockAddListAdapter extends RecyclerView.Adapter { 24 | 25 | private final List list; 26 | private final OnRecycleViewClickCallback onDragItemClick; 27 | 28 | public WorldClockAddListAdapter(List list, OnRecycleViewClickCallback onDragItemClick) { 29 | this.onDragItemClick = onDragItemClick; 30 | this.list = list; 31 | } 32 | 33 | class MyViewHolder extends RecyclerView.ViewHolder { 34 | private final TextView tvName; 35 | 36 | public MyViewHolder(View itemView) { 37 | super(itemView); 38 | 39 | tvName = (TextView) itemView.findViewById(R.id.tvName); 40 | 41 | itemView.setOnClickListener(new View.OnClickListener() { 42 | @Override 43 | public void onClick(View v) { 44 | int position = getAdapterPosition(); 45 | onDragItemClick.OnRecycleViewClick(position); 46 | } 47 | }); 48 | 49 | tvName.setOnClickListener(new View.OnClickListener() { 50 | @Override 51 | public void onClick(View v) { 52 | int position = getAdapterPosition(); 53 | onDragItemClick.OnRecycleViewClick(position); 54 | } 55 | }); 56 | } 57 | } 58 | 59 | @NonNull 60 | @Override 61 | public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 62 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_add_clock_list, parent, false); 63 | return new MyViewHolder(view); 64 | } 65 | 66 | @Override 67 | public int getItemViewType(int position) { 68 | return 0; 69 | } 70 | 71 | @Override 72 | public void onBindViewHolder(MyViewHolder holder, int position) { 73 | TimeZoneBean worldClock = list.get(position); 74 | holder.tvName.setText(worldClock.getCityName()); 75 | } 76 | 77 | @Override 78 | public int getItemCount() { 79 | return list.size(); 80 | } 81 | 82 | 83 | } 84 | 85 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/BleScanViewAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.content.Context; 4 | import androidx.recyclerview.widget.RecyclerView; 5 | import android.util.Log; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.TextView; 10 | 11 | import com.inuker.bluetooth.library.search.SearchResult; 12 | import com.timaimee.vpdemo.R; 13 | 14 | import java.util.List; 15 | 16 | 17 | /** 18 | * Created by timaimee on 2016/7/25. 19 | */ 20 | public class BleScanViewAdapter extends RecyclerView.Adapter { 21 | private final LayoutInflater mLayoutInflater; 22 | List itemData; 23 | OnRecycleViewClickCallback mBleCallback; 24 | 25 | public BleScanViewAdapter(Context context, List data) { 26 | this.itemData = data; 27 | mLayoutInflater = LayoutInflater.from(context); 28 | } 29 | 30 | @Override 31 | public NormalTextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 32 | return new NormalTextViewHolder(mLayoutInflater.inflate(R.layout.item_main, parent, false)); 33 | } 34 | 35 | @Override 36 | public void onBindViewHolder(NormalTextViewHolder holder, int position) { 37 | holder.mBleRssi.setText(itemData.get(position).getName() + "-" + itemData.get(position).getAddress() + "-" + itemData.get(position).rssi); 38 | 39 | } 40 | 41 | 42 | @Override 43 | public int getItemCount() { 44 | return itemData == null ? 0 : itemData.size(); 45 | } 46 | 47 | 48 | public void setBleItemOnclick(OnRecycleViewClickCallback bleCallback) { 49 | this.mBleCallback = bleCallback; 50 | } 51 | 52 | 53 | public class NormalTextViewHolder extends RecyclerView.ViewHolder { 54 | 55 | TextView mBleRssi; 56 | 57 | 58 | NormalTextViewHolder(View view) { 59 | super(view); 60 | mBleRssi = (TextView) view.findViewById(R.id.tv); 61 | view.setOnClickListener(new View.OnClickListener() { 62 | @Override 63 | public void onClick(View v) { 64 | mBleCallback.OnRecycleViewClick(getPosition()); 65 | Log.d("NormalTextViewHolder", "onClick--> position = " + getPosition()); 66 | } 67 | }); 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/ContactAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.ImageView; 7 | import android.widget.TextView; 8 | 9 | import androidx.annotation.NonNull; 10 | import androidx.recyclerview.widget.RecyclerView; 11 | 12 | import com.timaimee.vpdemo.R; 13 | import com.veepoo.protocol.model.datas.Contact; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Created by Administrator on 2018/12/22. 19 | */ 20 | 21 | public class ContactAdapter extends RecyclerView.Adapter { 22 | 23 | private final List list; 24 | private final OnRecycleViewClickCallback onDragItemClick; 25 | private final int contactType; 26 | 27 | public ContactAdapter(List list, OnRecycleViewClickCallback onDragItemClick, int contactType) { 28 | this.onDragItemClick = onDragItemClick; 29 | this.list = list; 30 | this.contactType = contactType; 31 | } 32 | 33 | class MyViewHolder extends RecyclerView.ViewHolder { 34 | private final TextView contactName; 35 | private final TextView contactPhone; 36 | private final TextView contactSOS; 37 | 38 | public MyViewHolder(View itemView) { 39 | super(itemView); 40 | 41 | contactName = (TextView) itemView.findViewById(R.id.iv_contact_name); 42 | contactPhone = (TextView) itemView.findViewById(R.id.iv_contact_phone); 43 | ImageView contactDelete = (ImageView) itemView.findViewById(R.id.iv_contact_delte); 44 | contactSOS = (TextView) itemView.findViewById(R.id.tvSOS); 45 | contactSOS.setVisibility(contactType == 2 ? View.VISIBLE : View.GONE); 46 | 47 | contactDelete.setOnClickListener(new View.OnClickListener() { 48 | @Override 49 | public void onClick(View v) { 50 | int position = getAdapterPosition(); 51 | onDragItemClick.OnRecycleViewClick(0x00 | position); 52 | } 53 | }); 54 | 55 | contactSOS.setOnClickListener(new View.OnClickListener() { 56 | @Override 57 | public void onClick(View v) { 58 | int position = getAdapterPosition(); 59 | onDragItemClick.OnRecycleViewClick(0x10 | position); 60 | } 61 | }); 62 | } 63 | } 64 | 65 | @NonNull 66 | @Override 67 | public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 68 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false); 69 | return new MyViewHolder(view); 70 | } 71 | 72 | @Override 73 | public int getItemViewType(int position) { 74 | return 0; 75 | } 76 | 77 | @Override 78 | public void onBindViewHolder(MyViewHolder holder, int position) { 79 | Contact contact = list.get(position); 80 | holder.contactName.setText(contact.getName()); 81 | holder.contactPhone.setText(contact.getPhoneNumber()); 82 | holder.contactSOS.setTextColor(holder.itemView.getResources().getColor(contact.isSettingSOS() ? R.color.real_red : R.color.black_30)); 83 | if(contactType == 2) { 84 | if (!contact.isSettingSOS()) { 85 | holder.contactSOS.setVisibility(isNeedGoneGreySOSTag() ? View.GONE : View.VISIBLE); 86 | } else { 87 | holder.contactSOS.setVisibility(View.VISIBLE); 88 | } 89 | } else { 90 | holder.contactSOS.setVisibility(View.GONE); 91 | } 92 | } 93 | 94 | @Override 95 | public int getItemCount() { 96 | return list.size(); 97 | } 98 | 99 | private boolean isNeedGoneGreySOSTag() { 100 | int sosCount = 0; 101 | for (Contact contact : list) { 102 | if (contact.isSettingSOS()) { 103 | sosCount++; 104 | } 105 | } 106 | return contactType == 2 && sosCount >= 5; 107 | } 108 | } 109 | 110 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/CustomLogAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.util.Log; 4 | 5 | import com.orhanobut.logger.LogAdapter; 6 | 7 | /** 8 | * Created by timaimee on 2016/7/19. 9 | */ 10 | public class CustomLogAdapter implements LogAdapter { 11 | @Override public void d(String tag, String message) { 12 | Log.d(tag, message); 13 | } 14 | 15 | @Override public void e(String tag, String message) { 16 | Log.e(tag, message); 17 | } 18 | 19 | @Override public void w(String tag, String message) { 20 | Log.w(tag, message); 21 | } 22 | 23 | @Override public void i(String tag, String message) { 24 | Log.i(tag, message); 25 | } 26 | 27 | @Override public void v(String tag, String message) { 28 | Log.v(tag, message); 29 | } 30 | 31 | @Override public void wtf(String tag, String message) { 32 | Log.wtf(tag, message); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/DividerItemDecoration.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import android.graphics.Canvas; 6 | import android.graphics.Rect; 7 | import android.graphics.drawable.Drawable; 8 | import android.view.View; 9 | 10 | import androidx.recyclerview.widget.LinearLayoutManager; 11 | import androidx.recyclerview.widget.RecyclerView; 12 | 13 | /** 14 | * Created by timaimee on 2016/8/10. 15 | */ 16 | public class DividerItemDecoration extends RecyclerView.ItemDecoration { 17 | private final static String TAG = DividerItemDecoration.class.getSimpleName(); 18 | private static final int[] ATTRS = new int[]{ 19 | android.R.attr.listDivider 20 | }; 21 | public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 22 | public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 23 | private Drawable mDivider; 24 | private int mOrientation; 25 | private boolean isDrawLastLine = true; 26 | 27 | public DividerItemDecoration(Context context, int orientation) { 28 | final TypedArray a = context.obtainStyledAttributes(ATTRS); 29 | mDivider = a.getDrawable(0); 30 | a.recycle(); 31 | setOrientation(orientation); 32 | } 33 | 34 | public DividerItemDecoration(Context context, int orientation, boolean isDrawLastLine) { 35 | this(context, orientation); 36 | this.isDrawLastLine = isDrawLastLine; 37 | } 38 | 39 | public void setOrientation(int orientation) { 40 | if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 41 | throw new IllegalArgumentException("invalid orientation"); 42 | } 43 | mOrientation = orientation; 44 | } 45 | 46 | @Override 47 | public void onDraw(Canvas c, RecyclerView parent) { 48 | 49 | if (mOrientation == VERTICAL_LIST) { 50 | drawVertical(c, parent, isDrawLastLine); 51 | } else { 52 | drawHorizontal(c, parent, isDrawLastLine); 53 | } 54 | 55 | } 56 | 57 | 58 | public void drawVertical(Canvas c, RecyclerView parent, boolean isDrawLastLine) { 59 | final int left = parent.getPaddingLeft(); 60 | final int right = parent.getWidth() - parent.getPaddingRight(); 61 | 62 | final int childCount = parent.getChildCount(); 63 | for (int i = 0; i < childCount; i++) { 64 | if (!isDrawLastLine && i == childCount - 1) { 65 | return; 66 | } 67 | final View child = parent.getChildAt(i); 68 | RecyclerView v = new RecyclerView(parent.getContext()); 69 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 70 | .getLayoutParams(); 71 | final int top = child.getBottom() + params.bottomMargin; 72 | final int bottom = top + mDivider.getIntrinsicHeight(); 73 | mDivider.setBounds(left, top, right, bottom); 74 | mDivider.draw(c); 75 | 76 | } 77 | } 78 | 79 | public void drawHorizontal(Canvas c, RecyclerView parent, boolean isDrawLastLine) { 80 | final int top = parent.getPaddingTop(); 81 | final int bottom = parent.getHeight() - parent.getPaddingBottom(); 82 | 83 | final int childCount = parent.getChildCount(); 84 | 85 | for (int i = 0; i < childCount; i++) { 86 | if (!isDrawLastLine && i == childCount - 1) { 87 | //划最后一条 88 | return; 89 | } 90 | final View child = parent.getChildAt(i); 91 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 92 | .getLayoutParams(); 93 | final int left = child.getRight() + params.rightMargin; 94 | final int right = left + mDivider.getIntrinsicHeight(); 95 | mDivider.setBounds(left, top, right, bottom); 96 | mDivider.draw(c); 97 | 98 | } 99 | } 100 | 101 | @Override 102 | public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { 103 | if (mOrientation == VERTICAL_LIST) { 104 | outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 105 | } else { 106 | outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 107 | } 108 | } 109 | } -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/GridAdatper.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.content.Context; 4 | import android.graphics.Color; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.BaseAdapter; 9 | import android.widget.TextView; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.timaimee.vpdemo.activity.Oprate; 13 | 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | /** 18 | * Created by timaimee on 2016/12/21. 19 | */ 20 | public class GridAdatper extends BaseAdapter { 21 | private List> mGridData; 22 | LayoutInflater mLayoutInflater; 23 | 24 | 25 | public GridAdatper(Context context, List> itemData) { 26 | this.mGridData = itemData; 27 | mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 28 | } 29 | 30 | 31 | @Override 32 | public int getCount() { 33 | return mGridData.size(); 34 | } 35 | 36 | @Override 37 | public Object getItem(int i) { 38 | 39 | return mGridData.get(i); 40 | } 41 | 42 | @Override 43 | public long getItemId(int i) { 44 | return i; 45 | } 46 | 47 | @Override 48 | public View getView(int i, View convertView, ViewGroup viewGroup) { 49 | GridHold mGridHold; 50 | if (null == convertView) { 51 | convertView = mLayoutInflater.inflate(R.layout.item_grid, null); 52 | mGridHold = new GridHold(); 53 | mGridHold.mButton = (TextView) convertView.findViewById(R.id.gridbutton); 54 | convertView.setTag(mGridHold); 55 | } else { 56 | mGridHold = (GridHold) convertView.getTag(); 57 | } 58 | Map map = mGridData.get(i); 59 | mGridHold.mButton.setText(map.get("str")); 60 | if (i % 4 == 0) { 61 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#FF7032")); 62 | } else if (i % 4 == 1) { 63 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#3F51B5")); 64 | } else if (i % 4 == 2) { 65 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#2695f0")); 66 | } else if (i % 4 == 3) { 67 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#852BFE")); 68 | } 69 | 70 | if (mGridHold.mButton.getText().toString().equals(Oprate.SHARE_LOG)) { 71 | mGridHold.mButton.setBackgroundColor(Color.RED); 72 | } 73 | if (mGridHold.mButton.getText().toString().equals(Oprate.READ_HEALTH_ORIGINAL)) { 74 | mGridHold.mButton.setBackgroundColor(Color.RED); 75 | } 76 | if (mGridHold.mButton.getText().toString().equals(Oprate.JL_DEVICE)) { 77 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#A5FB3E")); 78 | } 79 | if (mGridHold.mButton.getText().toString().equals(Oprate.ALARM_NEW_)) { 80 | mGridHold.mButton.setBackgroundColor(Color.parseColor("#F5CF0E")); 81 | } 82 | return convertView; 83 | } 84 | 85 | 86 | static class GridHold { 87 | TextView mButton; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/HealthRemindAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.timaimee.vpdemo.activity.SwitchView; 13 | import com.veepoo.protocol.model.datas.HealthRemind; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Author: YWX 19 | * Date: 2021/9/30 17:05 20 | * Description: 21 | */ 22 | public class HealthRemindAdapter extends RecyclerView.Adapter { 23 | 24 | private List settings; 25 | 26 | public HealthRemindAdapter(List data, OnHealthRemindToggleChangeListener listener) { 27 | settings = data; 28 | this.listener = listener; 29 | } 30 | 31 | @NonNull 32 | @Override 33 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 34 | return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_health_remind, parent,false)); 35 | } 36 | 37 | @Override 38 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 39 | holder.updateUI(settings.get(position), listener); 40 | } 41 | 42 | @Override 43 | public int getItemCount() { 44 | return settings.size(); 45 | } 46 | 47 | static class ViewHolder extends RecyclerView.ViewHolder { 48 | TextView tvHealthRemindInfo; 49 | TextView tvHealthTime; 50 | SwitchView sv; 51 | 52 | public ViewHolder(View itemView) { 53 | super(itemView); 54 | tvHealthRemindInfo = itemView.findViewById(R.id.tvHealthInfo); 55 | tvHealthTime = itemView.findViewById(R.id.tvTime); 56 | sv = itemView.findViewById(R.id.sv); 57 | } 58 | 59 | public void updateUI(final HealthRemind setting, final OnHealthRemindToggleChangeListener listener) { 60 | tvHealthRemindInfo.setText(setting.getRemindType().getDes() + "提醒 间隔(分钟):" + setting.getInterval()); 61 | tvHealthTime.setText("时间范围:" + setting.getStartTime().getColck() + "-" + setting.getEndTime().getColck()); 62 | sv.setOpened(setting.getStatus()); 63 | sv.setOnStateChangedListener(new SwitchView.OnStateChangedListener() { 64 | @Override 65 | public void toggleToOn(SwitchView view) { 66 | setting.setStatus(true); 67 | view.setOpened(true); 68 | if (listener != null) { 69 | listener.onToggleChanged(setting); 70 | } 71 | } 72 | 73 | @Override 74 | public void toggleToOff(SwitchView view) { 75 | setting.setStatus(false); 76 | view.setOpened(false); 77 | if (listener != null) { 78 | listener.onToggleChanged(setting); 79 | } 80 | } 81 | }); 82 | } 83 | } 84 | 85 | public interface OnHealthRemindToggleChangeListener { 86 | void onToggleChanged(HealthRemind setting); 87 | } 88 | 89 | private OnHealthRemindToggleChangeListener listener; 90 | 91 | } 92 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/ListViewAdatper.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.TextView; 9 | 10 | import com.inuker.bluetooth.library.search.SearchResult; 11 | import com.timaimee.vpdemo.R; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * Created by timaimee on 2016/12/21. 17 | */ 18 | public class ListViewAdatper extends BaseAdapter { 19 | private List mData; 20 | LayoutInflater mLayoutInflater; 21 | 22 | 23 | public ListViewAdatper(Context context, List itemData) { 24 | this.mData = itemData; 25 | mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 26 | } 27 | 28 | 29 | @Override 30 | public int getCount() { 31 | return mData.size(); 32 | } 33 | 34 | @Override 35 | public Object getItem(int i) { 36 | 37 | return mData.get(i); 38 | } 39 | 40 | @Override 41 | public long getItemId(int i) { 42 | return i; 43 | } 44 | 45 | @Override 46 | public View getView(int i, View convertView, ViewGroup viewGroup) { 47 | TextViewHold textViewHold; 48 | if (null == convertView) { 49 | convertView = mLayoutInflater.inflate(R.layout.item_main, null); 50 | textViewHold = new TextViewHold(); 51 | textViewHold.mTView = (TextView) convertView.findViewById(R.id.tv); 52 | convertView.setTag(textViewHold); 53 | } else { 54 | textViewHold = (TextViewHold) convertView.getTag(); 55 | } 56 | 57 | textViewHold.mTView.setText(mData.get(i).getName() + "-" + mData.get(i).getAddress() + "-" + mData.get(i).rssi); 58 | return convertView; 59 | } 60 | 61 | 62 | static class TextViewHold { 63 | TextView mTView; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/NewAlarmAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import android.view.LayoutInflater; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.TextView; 7 | 8 | import androidx.annotation.NonNull; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.timaimee.vpdemo.R; 12 | import com.timaimee.vpdemo.activity.SwitchView; 13 | import com.veepoo.protocol.model.settings.Alarm2Setting; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Author: YWX 19 | * Date: 2021/9/30 17:05 20 | * Description: 21 | */ 22 | public class NewAlarmAdapter extends RecyclerView.Adapter { 23 | 24 | private List settings; 25 | 26 | public NewAlarmAdapter(List data, OnNewAlarmToggleChangeListener listener) { 27 | settings = data; 28 | this.listener = listener; 29 | } 30 | 31 | @NonNull 32 | @Override 33 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 34 | return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_new_alarm, null)); 35 | } 36 | 37 | @Override 38 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 39 | holder.updateUI(settings.get(position), listener); 40 | } 41 | 42 | @Override 43 | public int getItemCount() { 44 | return settings.size(); 45 | } 46 | 47 | static class ViewHolder extends RecyclerView.ViewHolder { 48 | TextView tvAlarmID; 49 | TextView tvAlarmRepeat; 50 | TextView tvAlarmTime; 51 | SwitchView sv; 52 | 53 | public ViewHolder(View itemView) { 54 | super(itemView); 55 | tvAlarmID = itemView.findViewById(R.id.tvAlarmId); 56 | tvAlarmRepeat = itemView.findViewById(R.id.tvAlarmRepeat); 57 | tvAlarmTime = itemView.findViewById(R.id.tvAlarmTime); 58 | sv = itemView.findViewById(R.id.sv); 59 | } 60 | 61 | public void updateUI(final Alarm2Setting setting, final OnNewAlarmToggleChangeListener listener) { 62 | tvAlarmID.setText("" + setting.getAlarmId()); 63 | tvAlarmRepeat.setText(setting.getRepeatStatus()); 64 | tvAlarmTime.setText(setting.getAlarmHour() + ":" + setting.getAlarmMinute()); 65 | sv.setOpened(setting.isOpen); 66 | sv.setOnStateChangedListener(new SwitchView.OnStateChangedListener() { 67 | @Override 68 | public void toggleToOn(SwitchView view) { 69 | setting.setOpen(true); 70 | if (listener != null) { 71 | listener.onToggleChanged(setting); 72 | } 73 | } 74 | 75 | @Override 76 | public void toggleToOff(SwitchView view) { 77 | setting.setOpen(false); 78 | if (listener != null) { 79 | listener.onToggleChanged(setting); 80 | } 81 | } 82 | }); 83 | } 84 | } 85 | 86 | public interface OnNewAlarmToggleChangeListener { 87 | void onToggleChanged(Alarm2Setting setting); 88 | } 89 | 90 | private OnNewAlarmToggleChangeListener listener; 91 | 92 | } 93 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/OnRecycleViewClickCallback.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | /** 4 | * Created by timaimee on 2016/7/25. 5 | */ 6 | public interface OnRecycleViewClickCallback { 7 | void OnRecycleViewClick(int position); 8 | } 9 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/adapter/TextAlarmAdapter.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.adapter; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.recyclerview.widget.RecyclerView; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.TextView; 9 | 10 | import com.timaimee.vpdemo.R; 11 | import com.timaimee.vpdemo.activity.SwitchView; 12 | import com.veepoo.protocol.model.settings.TextAlarm2Setting; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * Author: YWX 18 | * Date: 2021/9/30 17:05 19 | * Description: 20 | */ 21 | public class TextAlarmAdapter extends RecyclerView.Adapter { 22 | 23 | private List settings; 24 | 25 | public TextAlarmAdapter(List data, OnTextAlarmToggleChangeListener listener) { 26 | settings = data; 27 | this.listener = listener; 28 | } 29 | 30 | @NonNull 31 | @Override 32 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 33 | return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_text_alarm, null)); 34 | } 35 | 36 | @Override 37 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 38 | holder.updateUI(settings.get(position), listener); 39 | } 40 | 41 | @Override 42 | public int getItemCount() { 43 | return settings.size(); 44 | } 45 | 46 | static class ViewHolder extends RecyclerView.ViewHolder { 47 | TextView tvAlarmID; 48 | TextView tvAlarmRepeat; 49 | TextView tvAlarmContent; 50 | TextView tvAlarmTime; 51 | SwitchView sv; 52 | 53 | public ViewHolder(View itemView) { 54 | super(itemView); 55 | tvAlarmID = itemView.findViewById(R.id.tvAlarmId); 56 | tvAlarmRepeat = itemView.findViewById(R.id.tvAlarmRepeat); 57 | tvAlarmContent = itemView.findViewById(R.id.tvAlarmContent); 58 | tvAlarmTime = itemView.findViewById(R.id.tvAlarmTime); 59 | sv = itemView.findViewById(R.id.sv); 60 | } 61 | public void updateUI(final TextAlarm2Setting setting, final OnTextAlarmToggleChangeListener listener) { 62 | tvAlarmID.setText("" + setting.getAlarmId()); 63 | tvAlarmContent.setText(setting.getContent()); 64 | tvAlarmRepeat.setText(setting.getRepeatStatus()); 65 | tvAlarmTime.setText(setting.getAlarmHour() + ":" + setting.getAlarmMinute()); 66 | sv.setOpened(setting.isOpen); 67 | sv.setOnStateChangedListener(new SwitchView.OnStateChangedListener() { 68 | @Override 69 | public void toggleToOn(SwitchView view) { 70 | setting.setOpen(true); 71 | if (listener != null) { 72 | listener.onToggleChanged(setting); 73 | } 74 | } 75 | 76 | @Override 77 | public void toggleToOff(SwitchView view) { 78 | setting.setOpen(false); 79 | if (listener != null) { 80 | listener.onToggleChanged(setting); 81 | } 82 | } 83 | }); 84 | } 85 | } 86 | 87 | public interface OnTextAlarmToggleChangeListener { 88 | void onToggleChanged(TextAlarm2Setting setting); 89 | } 90 | 91 | 92 | private OnTextAlarmToggleChangeListener listener; 93 | 94 | 95 | } 96 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/bean/TimeZoneBean.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author KYM 7 | * on 2024/4/10 8 | */ 9 | public class TimeZoneBean implements Serializable { 10 | private String abbreviation; 11 | private String cityName; 12 | private String originalTimeZoneName; 13 | private String shortGenericTimeZoneName; 14 | private int id; 15 | 16 | public TimeZoneBean() { 17 | } 18 | 19 | public TimeZoneBean(String abbreviation, String cityName, String originalTimeZoneName, String shortGenericTimeZoneName) { 20 | this.abbreviation = abbreviation; 21 | this.cityName = cityName; 22 | this.originalTimeZoneName = originalTimeZoneName; 23 | this.shortGenericTimeZoneName = shortGenericTimeZoneName; 24 | } 25 | 26 | public String getAbbreviation() { 27 | return abbreviation; 28 | } 29 | 30 | public void setAbbreviation(String abbreviation) { 31 | this.abbreviation = abbreviation; 32 | } 33 | 34 | public String getCityName() { 35 | return cityName; 36 | } 37 | 38 | public void setCityName(String cityName) { 39 | this.cityName = cityName; 40 | } 41 | 42 | public String getOriginalTimeZoneName() { 43 | return originalTimeZoneName; 44 | } 45 | 46 | public void setOriginalTimeZoneName(String originalTimeZoneName) { 47 | this.originalTimeZoneName = originalTimeZoneName; 48 | } 49 | 50 | public String getShortGenericTimeZoneName() { 51 | return shortGenericTimeZoneName; 52 | } 53 | 54 | public void setShortGenericTimeZoneName(String shortGenericTimeZoneName) { 55 | this.shortGenericTimeZoneName = shortGenericTimeZoneName; 56 | } 57 | 58 | public int getId() { 59 | return id; 60 | } 61 | 62 | public void setId(int id) { 63 | this.id = id; 64 | } 65 | 66 | public int getT15Min() { 67 | if (abbreviation.equals("GMT")) { 68 | return 0; 69 | } else { 70 | if (abbreviation.contains("+")) { 71 | String timeStr = abbreviation.replace("GMT", "").replace("+", "").trim().toString(); 72 | String[] dat = timeStr.split(":"); 73 | int hour = Integer.parseInt(dat[0].toString()); 74 | int minute = Integer.parseInt(dat[1].toString()); 75 | return (hour * 60 + minute) / 15; 76 | } else { 77 | String timeStr = abbreviation.replace("GMT", "").replace("-", "").trim().toString(); 78 | String[] dat = timeStr.split(":"); 79 | int hour = Integer.parseInt(dat[0].toString()); 80 | int minute = Integer.parseInt(dat[1].toString()); 81 | return -(hour * 60 + minute) / 15; 82 | } 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/oad/activity/NotificationActivity.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.oad.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | 7 | /** 8 | * Created by timaimee on 2016/9/6. 9 | */ 10 | public class NotificationActivity extends Activity { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | 16 | if (isTaskRoot()) { 17 | final Intent intent = new Intent(this, OadActivity.class); 18 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 19 | intent.putExtras(getIntent().getExtras()); // copy all extras 20 | startActivity(intent); 21 | } 22 | finish(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/java/com/timaimee/vpdemo/oad/service/DfuService.java: -------------------------------------------------------------------------------- 1 | package com.timaimee.vpdemo.oad.service; 2 | 3 | import android.app.Activity; 4 | 5 | import com.timaimee.vpdemo.oad.activity.NotificationActivity; 6 | 7 | import vpno.nordicsemi.android.dfu.DfuBaseService; 8 | 9 | 10 | /** 11 | * Created by timaimee on 2016/9/6. 12 | */ 13 | public class DfuService extends DfuBaseService { 14 | @Override 15 | protected Class getNotificationTarget() { 16 | return NotificationActivity.class; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/arm64-v8a/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/arm64-v8a/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/armeabi-v7a/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/armeabi-v7a/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/armeabi/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/armeabi/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/mips/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/mips/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/mips64/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/mips64/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/x86/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/x86/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/x86_64/libnative-lib.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/jniLibs/x86_64/libnative-lib.so -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/contacts_icon_nodata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/contacts_icon_nodata.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/fit_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/fit_move_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/fit_move_point.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/fit_start_point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/fit_start_point.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/hband_home_module_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/hband_home_module_delete.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/hband_home_module_drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/hband_home_module_drag.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/ic_action_notify_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/ic_action_notify_cancel.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_normal.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_press.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_press1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/login_button_press1.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HBandSDK/Android_Ble_SDK/2a3d0ef26e10723735c00ab2b125145889c40e80/android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/drawable/refresh.png -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/layout/activity_add_clock.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | -------------------------------------------------------------------------------- /android_sdk_source/Demo/VpBluetoothSDK/app/src/main/res/layout/activity_ecg.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 |