From 252da35566f0de43403bbc3d914e673e7241a265 Mon Sep 17 00:00:00 2001 From: Foxpace Date: Sat, 15 Aug 2026 23:02:33 +0200 Subject: [PATCH 1/2] docs: update refactor documentation and emulator tools --- README.md | 209 +++++++++++++--------- docs/images/sensorbox-intro-battery.png | Bin 0 -> 129519 bytes docs/images/sensorbox-intro-lifecycle.png | Bin 0 -> 127826 bytes docs/images/sensorbox-intro-policy.png | Bin 0 -> 132647 bytes docs/images/sensorbox-intro-privacy.png | Bin 0 -> 102089 bytes docs/images/sensorbox-intro-storage.png | Bin 0 -> 125994 bytes docs/images/sensorbox-intro-welcome.png | Bin 0 -> 119475 bytes docs/images/sensorbox-phone-record.png | Bin 0 -> 311412 bytes docs/images/sensorbox-phone-setup.png | Bin 0 -> 231606 bytes docs/images/sensorbox-wear-live.png | Bin 0 -> 46130 bytes docs/images/sensorbox-wear.png | Bin 0 -> 27791 bytes tools/emulator/run_phone_sensor_test.sh | 34 ++++ tools/emulator/run_wear_sync_test.sh | 67 +++++++ 13 files changed, 222 insertions(+), 88 deletions(-) create mode 100644 docs/images/sensorbox-intro-battery.png create mode 100644 docs/images/sensorbox-intro-lifecycle.png create mode 100644 docs/images/sensorbox-intro-policy.png create mode 100644 docs/images/sensorbox-intro-privacy.png create mode 100644 docs/images/sensorbox-intro-storage.png create mode 100644 docs/images/sensorbox-intro-welcome.png create mode 100644 docs/images/sensorbox-phone-record.png create mode 100644 docs/images/sensorbox-phone-setup.png create mode 100644 docs/images/sensorbox-wear-live.png create mode 100644 docs/images/sensorbox-wear.png create mode 100755 tools/emulator/run_phone_sensor_test.sh create mode 100755 tools/emulator/run_wear_sync_test.sh diff --git a/README.md b/README.md index dc5a2de..a03293b 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,121 @@ -# SensorBox - record all your sensors to csv files - -This repository is now archived and will no longer be actively maintained. - -

- -

- -

- -

- -The SensorBox provides easy way to access sensors in Android phone and Wear Os. You can customize measurements in many ways, which is suitable for development of other apps. The outputs of the app are raw outputs of the system. - -[![API](https://img.shields.io/badge/API-24%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=24) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) - -## Features: - -Whole functionality is hidden under SensorServices library, where one foreground service operates with sensors, GPS and other APIs. - -* stores **sensor outputs** into the csv: *timestamp, values, accuracy* -* values from the sensors are in raw format - **no resampling** -* pick native sensor speed limits -* compatible with **GPS** -* can use **Activity recognition API from Android** and **Significant motion sensor** -* write custom annotation during measurement -* all extra information are stored in **JSON** -* check sensor attributes and preview of the outputs -* measurement can be customized : - * write own key words to measurement - * set up timed alarms - * set up countdown to start measurement - * stop on low battery measurement - * lock CPU, add app to whitelist -* compatible with **Wear Os** with similar features - -## Organization of code and the libraries: - -### Code -* whole code is in **Kotlin** (Flipper - third party - code is in Java) -* the phone app follows **MVI architecture** - activity/fragment -> ViewModel -> repository - * There are 2 activities created with this architecture : - * **MainActivity** - created with other fragments like HomeFragment, AdvancedFragment, SettingsFragment, ... - these **fragments share one ViewModel** defined by MainActivity. Meanwhile for the navigation is used androidx fragment navigation library. - * **MeasurementActivity** - alone activity to create annotations / stop the measurement if it is proceeding - **has its own ViewModel** -* In the phone application is used **Hilt - dependency injection library** -* **The phone app and the Wear Os app use the same SensorService Library** which covers all the requirements from the apps. The library provides intents builders for both of them. -* **WearOsLib** provides easy and comprehensive code of how to find other device and send messages, send file between them. - - -### Libraries: - -* **app / wear** - implementation for the phone / wearable respectively -* **CountDownDialog** - library for creation of the countdowns, with interaface to interact and custom Dialog -* **Flipper** - [Storage access framework](https://github.com/baldapps/Flipper) created by [baldapps](https://github.com/baldapps) -* **Sensorservices** - main background service, which registers all the sensors and other providers of the data -* **WearOsLib** - general library for communication of the phone and wearable and vice versa - -## How to build the project: - -* clone / download the project to your machine -* to activate google services follow steps at **[Firebase](https://console.firebase.google.com/u/0/).** Create project and get the `google-services.json` - * make sure, that the package id in app/wear build gradle is the same as in firebase console -* `google-services.json` copy to the app folder and wear folder too -* to activate Google maps, follow the steps here to create API key **[Google documentation](https://developers.google.com/maps/documentation/android-sdk/get-api-key#console)** -* adding line to `local.properties`: **MAPS_API_KEY=YOUR_API_KEY** is enough - - -## Third parties: - -Thanks goes to: - -* [GraphView](https://github.com/jjoe64/GraphView) - chart library -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -* [Flipper](https://github.com/baldapps/Flipper) - storage access framework -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -* [AppIntro](https://github.com/AppIntro/AppIntro) - introduction to the app for the first launch -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -* [Material dialogs](https://github.com/afollestad/material-dialogs) - dialogs with material design style -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -* [Number picker](https://github.com/ShawnLin013/NumberPicker) - create custom number pickers -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -* [Android about page](https://github.com/medyo/android-about-page) - easy way to create about page -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -* [Licenses dialog](https://github.com/PSDev/LicensesDialog) - dialog to aggreate all licences - check out for the full licenses -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -* [Toasty](https://github.com/GrenderG/Toasty) - The usual Toast, but with steroids 💪 -[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +# SensorBox + +SensorBox records raw Android and Wear OS sensor samples to local CSV files. The phone app uses Android's system folder picker; recordings never require cloud storage or an account. + +This is the hard-cut Android 17 generation of the project. It does not retain the former Fragment/XML UI, `SharedPreferences`, Firebase, Maps, or compatibility migrations for old settings. + +## Screenshots + +| Sensor selection | Measurement setup | +|:---:|:---:| +| SensorBox sensor selection with original icons | SensorBox measurement setup | + +| Wear dashboard | Wear live-sensor picker | +|:---:|:---:| +| SensorBox Wear OS dashboard | SensorBox Wear OS live-sensor picker | + +### First-run introduction + +| Welcome | Local data | Privacy and terms | +|:---:|:---:|:---:| +| SensorBox welcome introduction | SensorBox local-data introduction | SensorBox privacy and terms introduction | + +| Android lifecycle | Battery optimization | Recording folder | +|:---:|:---:|:---:| +| SensorBox Android lifecycle introduction | SensorBox battery optimization introduction | SensorBox recording-folder introduction | + +The introduction uses the original repository artwork. Privacy Policy, Terms of Use, battery optimization, and folder selection are live native actions. Folder selection remains mandatory before setup can finish. + +## Current feature set + +- Record available phone or watch sensors at Android sampling periods. +- Record foreground GPS samples alongside sensor data. +- Run measurement work in an explicit foreground service with health/location service types. +- Stop safely from the app, watch, notification, low-battery policy, or a paired-device command. +- Preview a live watch sensor with a Compose-native chart. +- Stream watch recordings to the phone with the Wear OS Channel API. +- Store phone recordings in a user-selected Storage Access Framework folder. +- Follow system/dynamic color with light, dark, and custom fallback palettes. + +## Architecture + +The UI modules use unidirectional MVI: + +`Composable → Intent → ViewModel → use case → repository/service → State + Effect` + +UI launchers execute one-shot effects, while decisions and state transitions remain in ViewModels, reducers, and focused use cases. Hilt provides production dependencies and interfaces keep platform boundaries replaceable in tests. + +Modules: + +- `app`: phone Compose UI, MVI, permissions, native document storage, and received watch files. +- `wear`: Wear Compose Material 3 UI, MVI, live charts, recording, and phone launch flow. +- `core`: DataStore preferences, storage contracts, reducers, and reusable test fixtures. +- `sensorservices`: foreground measurement service and linear sensor/GPS writers. +- `WearOsLib`: coroutine-based connectivity, versioned command protocol, and Channel file transport. + +## Platform and toolchain + +- Android Gradle Plugin 9.3.1 and Gradle 9.7 +- Android compile/target SDK 37 (Android 17) +- Java 17 and Kotlin 2.4.10 +- Jetpack Compose Material 3 and Wear Compose Material 3 +- Hilt 2.60.1 +- DataStore Preferences 1.2.1 +- Detekt 2 with formatting rules and no baselines + +Every Kotlin function is checked at a maximum of 40 lines. Compose functions therefore also stay below the requested 60-line ceiling. + +## Build and quality checks + +Install JDK 17 and Android SDK 37, then run: + +```shell +./gradlew :app:assembleDebug :wear:assembleDebug +./gradlew testDebugUnitTest detekt +./gradlew :app:lintDebug :wear:lintDebug +``` + +Instrumentation test sources can be compiled without a device: + +```shell +./gradlew :app:compileDebugAndroidTestKotlin :wear:compileDebugAndroidTestKotlin +``` + +Tests use Given/When/Then naming, reusable state/repository fixtures, coroutine test contexts, and Compose robots for end-to-end UI interactions. + +## Emulator integration tests + +The phone sensor test starts the real foreground measurement service, injects three accelerometer values through the emulator console, and verifies the generated CSV: + +```shell +ANDROID_HOME="$HOME/Library/Android/sdk" \ +PHONE_SERIAL=emulator-5554 \ +tools/emulator/run_phone_sensor_test.sh +``` + +The Wear sync test sends a fixture CSV through the real Wear OS Channel API and verifies its exact bytes on the phone. Use an Android 17 Google Play phone AVD and a Wear OS 7 AVD. Pair them once with Android Studio's Pairing Assistant and complete the Wear companion flow before running: + +```shell +ANDROID_HOME="$HOME/Library/Android/sdk" \ +PHONE_SERIAL=emulator-5554 \ +WEAR_SERIAL=emulator-5556 \ +tools/emulator/run_wear_sync_test.sh +``` + +The runner creates Android Studio's ADB forward/reverse bridge and fails immediately with pairing guidance when the watch reports no peer. Received files use app-internal storage only in debuggable builds; release builds continue to require the user-selected Storage Access Framework directory. + +No Firebase project, Maps key, secrets file, or external storage permission is required. + +## Dependencies + +The former Flipper, AppIntro, Material Dialogs, NumberPicker, Android About Page, LicensesDialog, Toasty, GraphView, and custom countdown modules have been removed. Their replacements are native APIs or small project-owned Compose components. + +[Vico](https://github.com/patrykandpatrick/vico) is retained as the sole feature-level third-party UI library because it provides a maintained, Compose-native chart model and renderer suitable for the live Wear OS plot. AndroidX, Google Play services for Wear/location, Kotlin coroutines, Hilt, and Detekt remain infrastructure dependencies. + +## Privacy + +Measurements are initiated by the user, represented by an ongoing foreground-service notification, and written locally. SensorBox does not upload measurement data or include analytics/crash-reporting SDKs. + +## License + +SensorBox is licensed under the Apache License 2.0. See [LICENSE](LICENSE). diff --git a/docs/images/sensorbox-intro-battery.png b/docs/images/sensorbox-intro-battery.png new file mode 100644 index 0000000000000000000000000000000000000000..f47d59ee90580c50e1b9ada312ec7b68d548bcbe GIT binary patch literal 129519 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 WLchgprM)-j+)!4(mUq?U;r{~^o>nga literal 0 HcmV?d00001 diff --git a/docs/images/sensorbox-intro-lifecycle.png b/docs/images/sensorbox-intro-lifecycle.png new file mode 100644 index 0000000000000000000000000000000000000000..0e13ac584b8a6d7f5a2fb7774ff70aebfb44bf2e GIT binary patch literal 127826 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 z z9ax19-B-tK<^*=Y^Dri~5P1s=X0NFljFbIUiRYS^{iIuHI2bQ`3LW1cH-n-9ELN?doZU>tPF~g_0i6eEdau@=J2Na}U#A>WLnkE{ zN$7pcMi(OND*dNvE+6L+T0kh}8{w*TRkX^A1Ebxn7tgb#C#OypjK8=-+Re<&R_lch zx_cU@S7Wcj`3StQtD^lG=_A|1BfJR6yn8gEZ7TBhr>BQUShRc(64dVBxf#e|dCUUu zYV$${dAq1t_+(LD}vqU09Z&kU8d2M>Fn8nkG_M7mz4y71(b zl9VLRp14a808^@C&>q2~2dWRQ2FO09gOx-LOO9{gsK}Mo&`iC2Wl~mHTv|%_3iB$> zACBhT#HhIDEHpgq$}v+7FXPPMw!qxA$nM1E1T5-h?dxFy&5$yq7gl{=m^Zt>)@Kpq zYAEh0Jb5uJAhSxjIm5hihd8+E+^Gk75|JD^xR>-;KCFCEEr2sCKVQta;r^?0D?)u& zBTSy^Vqz$9iihHPJc+O1-R{IGC_tE5(MDifS*>n0`-q9uqU{nJK)ed5EU7tosH~&W zp-CLv1fcb6sS`UJhqsC2hYWjmC%i;|cN+cm6BTogXdP(FQ17?*Hun@mo_%89&m(x{ zKLbv6Q!sloAndRv-Sf1$onLPQ( zIODRlzqL2~++cgQ5bb+Z>ZOqVyAFRpQBkDK@7WId6?icR|2$*9xpkt;`8P0ib8UX2 zIhFR2R=u(!3?J&kF^@DV%GrGWAulhA`}a7zL`tOcD{dJ_XCvK_Vps{Pm_Hjv^d6_{ z3kImyXP${-K2DqJ@CL;=>%a`2obS}knCd1 z^oeH86MI5;G~@iZb~k3!Rh=_4|Ef<#n>PDkRKsCaMqN|U>0Zmn=CJN~H^z;-R8(iA zdXZ?qM+cc-uF=su#ImIg(EUB7mAbJ#Zu)+H_B|i6k*6l;Vp67slZ~4F&Wh?+5d4hv zc*>k~q(UsLo&z(bO#x!FitNclh zh_q(K?;l=pSDiOCh4psuy){k0o5fhygpG?I=2KPWuMCCUi{G(>`C-xqQDrgI;*A5F zjvE%KU@MEk-6k`7Of&s*itu` zNBu?O{&{TGA%FmUN@jG9UJnW(jY7;aWdy??E^Rl-f7d}u8wc@Al!Mf$k+v!tlCp3& zWm`;WW{^K)_G^Op7kpm;(kzrZwrQ(gO5eH_!{STM)*uOWF_XYX#R2-HXez;38qT9P zRoxNyef+Wy2Bpr^>lEuXG0YVy%~=Hbs|*`HyQ_+X*1W@jc7UWtzL>5!Lqn6v453`n zS4=EU|Dy$HGBb1W*s?1<;I^7k725ytEZ`!^YVv0b*S&3g97ivW<&Zi}qk0-6CTmgm z^+u)w3*=$-!NaYVh%=-qJY1dLCK1{vv1NudxpTFQ)EBd#z9|!yOu9^#v@tMltWA*f zU&%h8`qNT$uPh?1#lqv2Y?J%J zmj&t8Xh$m*k{;NElN|5wtZH}nbcxB~b1!A+$*&*R0jOyv%#nO_Fko_|z_;fo#39H{ zd2+CB>=W2zEL8f6=yqZP-Yw=-d{uNt8dEL;ND54u0*^zF~yQ)~j+E~ycWW8rg^_jdKWvD>_pp&;_u z)p`SU6V!)GjR=%C$+=2eEN5q03;|5yyD)q4;@9l{2dj-g*N%pM^)qM|r-zb0Bt|qV z{IP{W8-lqm>vugR71*=zhN?&r$5xh>kEic8U3*fgv3~!3fzn*eB_c_&FC^QUJRMf0|cI5IpGIJuhVu!@(tbbvaqE{4k-`a!h;1h5(tkU1i z)vH5)T;E5h!JkhI@Egkj4xfcgBzXl7K5^H2=i&_Yk^1iEdB(0Dev<|bQ z*;9KA{DuPwIWK7kT*ClLPT6!zxDQ$wD*}R5GrvgmO}oMe+uBFTfh71blit(N`9o)W z({;lF8a7VHD_lJGAMZF?b;Y0EYU-#mvxqc@n%Na!*v~gOx^TbjD4t!DeIg@+H;LDB z`)a$pdl~#$CLJLdrjSW58n_WQ`bpbc^-tN~iO%ytM->-*$iOs2Pn7H54NwO`^8V^* zH;y-4q|T&+fQFK}73u)qVe8j1Wnr~xSt=0q^^gw%@zR~ci;+#25%JD%Sz{;BHE%T*WRcKhxkT0VFA0y+3SaF#)eNB*OQAMO*=scktXDcne$n2Fm>KW)=kzd-tQEg z0m(ex*Dk&rHV;GRKaE^hPvLxG5*l6x!gOBQpW_4AI)Yb)gpO%B`0(EGUpW=E|HHTV z>S-eAIbXw3!d@O4{MoJeHY#W6)7R@#N4mDd_cg!^^%tjbc{vNniUY z4!4WLN-nm9`P`2$pPpi96~|u>3zCGsEOuY}K*RP9G;FbfU7+~#1ArPkEMO+U{_3~0 z!^AtGrYtzP+nVe~a?zq;1avJaAfH@VSST!wWR%C1hR$xLJ=Lw)xHv$Sg^5VJ{XzBd ze8d#>*w`9hsps(~F1Alp)E3^?JXX}D(S@pQ%E_v6{K(lrUXqpoEGuu9MqEB;B(#9C zL|H`z(;Z71mCHiaquwEb#^<$r2jGFP4GPNEg4Ux8gdYy}t*V^Qke|XiqLreOu-Xyl756@h?MG;kRyAlCoMPn+SGUFbtW0XzMrNY#ySnUAL`K5;^5nuiL%ycFqia|27A962_Iia!=Sp zp4tQafuW(STkMve7hQ|bt*u*p+B&yzpfe=rE0>Z6^-B{`QPGAdaJy^vnkx&!W?{g# zGvQ%a?`M5L&o={F^NCa1`yTgIa0i4?hXhP_7SXM((gRhixLnjBD+e2$v6&Np|M$t{ z@Q?GFx=Z0k-S5JJ<*(?yu}ZF7raiVnQMM1Wx4gc_VXm8!5h$p0@PO)3Q){} zmiNkRFaAG8!#5E5qHv}_M0Yh{_;+yJmyRWuqq_!nSOIYj6Llde$U7rB-a9Zk?NX$z z4~RhAvSMCa`d(_$#N?<%g2VJ~kF7bjwnNtX_fXd}b&=%!nGw(Li8PLL%xLM9lrl;+ zpPW48h4EKEL`4L>JMn5no-8={qTYv^8Q1E)(U+5xTY+9rNet<1AH2Qb5F$vj2+Np?*2gmtH)k!Jk?d* zCf#XV9*|Ft);W`iTx>|G$5bQ%QHo00E*sqFiX*w&xbEjxDBB_#+skp`M8869{23J4;rKdv0qlau3y zWwHHzpjXbqdnM>+=v{|Q#q&4OL&QR-OOd(iFVXJYynoRRSVsUpPj1VP`~94INhiM- zCjIS&;h4bh=CfVpP&^ZEG(PxMFHe?yP@C~S@@9C_$G6Me)ZgJ{{rzVl-v%|}3$=NZ zQ{RfOv~O6tb)Zh?k_5c5jsO78nWQ7uPkkYRJ>xS|1HC&~i~J*7u7mRx)Vo)}BZ=G- zZ}iJ?ke4kRmlvM;l3y8eZ6mkob2c}s;`6O5fJM)~zgV;r!lw{OIN(4^$9USXS`&zgW11}!(4pl}L@@fsX9955rbcWCHs(6*g!d&jbEZu&Y@ zfOyn(Xh2mrjE`S(bbJV(TdF=?S9KzPV3wVO3U#)(Avgg=^ZSoeX7E!T9f~i2KfHuV znFYE$E~h^213mHi+kuJ@ofU_Mc(CzsB%X_d~Na(-yrAANplvIX(A6Yp5YL8)qRw9|v zlTZ(}P>r;)#lJSjiu)fG(R@jL^62k(($sv6EXGwYa3$F5HOA>Q(1c`-? zFEgKZ!nn&&S{m}ST?Gfr>D0T(Cs(=qo`rw3n|#el`vsVre?BCz@}|H@km&2{II|jw>?DBk$W?mZVX#=)Se^x%=3+gYkcd|9@d~Tqk7eZZk z(T@6=ssH_%gT0fX3mNyMfVI2bK$jX0?-;V=7ChyjAO(a(ZF6Z1ABwQ)SqikGSpL*! zAV%i#-oZ@nWstZpJ0&sv#Y)3?EvIKTFjJ$Ug&mFhl_rQf8mN>*m)R=V_&%df>|QEZa(4Jla2|LZ9s~q+vgGAn7%j>CyF~#hC8ghH zV2uikihPH|Q*xt~gzp2^8+N`y30cMGOwyaF{P33;02P0Y5;GML@PBuV#@pV03xY~=2`ZntSej9Aj51;JeqvU`8YSafeR?WKfpM!?_ znh+q?e@`rGM`Jnu*S9NU-udUG{r%59Boo@z|9;JB^gkyN^*;lyLgD!LT>P`f@}z2L zH~;&!al`*Vesyd`3f&`YPT}b2Xl!geBcF*%M?ydb1hkTG7?Z!UT)RQUeM!U%9o2F^ zD(a!Oj?PnPiC;a=0nsLTB^1ko|^AwxsN7)=2VsTOI}4*DUus5N!y z?(HSZG0^Y82FtHAio;YKV(=kFAyQh!i-=LAR^ivL3%V^`HTeH*0VflpMX9-j?0~yL z-~Gj12-u{IQlAO+D9%3ZywpW)3mr5M4{Pf;Yk&m4;jIt=T!at~;mXkXFq*!2;Y*^g zg$s0f`pQF|2b;I(U{@2fJYHx+8YN+9LwbBb{kpP}d~V)^PLzG@XD_Xr!~uu09~>4= zF{r^ccaGgaJcADXGaFH38?5V22flOC`P`VNa<_XC7Uhlhb3g)h4jUMl3_d0?#0cS1 z8(iei?`y5OO#f;ElKr7!Zb0o%VR<((_-CXk0a+vY$QouAu4V{oJ~sw^{G<)%mbP*? z->(cqeVtbBwZ;V9Dh(Nmq~+`*(T(Bq)sRH7E67cGC6WG_ZNcW|!prP4!SXX#4qt2%T($kzB^YBXZrEsb{f4Vz1p!GR}3QXsZw1n ztv90AH+T(^*aXCt(!0U!F&U=gKKE|~O5|=HDkHKl{gmkapFjDBeJ1B@EkEq~29BVe zO)@${0-HuSa^qOXz`);{$5S@S+na*d2xt7n#R0}s5Ivi}LNoDGIMqP4_5mf_{~|gm z+w(5_?|1O_wi@Rf4mD~_o1R-u-P}MlD`nt3B7_}Vz6z(s_%kTHY*$;+ z#iifDQJh&?`hioW<nFZBjlI3wWapiS_*7!Vsoo`^Lrb!;}8h z@q{Oc%|OiEy{bF3zo3o*%*~eqYcOC^W^doP4^Vfv3@VU+zKjV7Dl%|$a~~dF`QFrZ zE%dq~KB?ZyNo+!|rmO6x$t(AvQiPCA;G4Ja30hde#j< zi3J3sD?7WoI0sr#HiYmI!AJKZQ!^@Y)YQss=k4Ao_J~_Atj+|{Oo~9m=y$+Qk811K zoH*Tu>;&rJ3jMIP$rcQlzx*aL7#DsHm>B%w)Y_DmV}szNphewRhQ1*@rPjuN1%rXX z9PN>w-nAe$lHX=p*|H}#@OHd;SN(f#4v*P_0!qv@C>PoE+9lm};=5;Fww_2X4flp0 z*0PCp_xqXzl;I!mANZuDafAIlJU%iIv@A^4J;U7E8e4-t_cQO-c7%^|3~-OeCV7iB zX^8Z?Ch6%;0BWzSqUQ@$db!hHPpT!+xv++MUQY8xR;I2zy?Fxxr6goCZ|vP&YwlUKJe-3vhA1 zM~wE#T2x7h!x>$yfflHgmQi)4C|Xf=ik9otkJ^1DLcBB>YP;#sz{oxe^)CStB^Dfl zMS;H1>)>;o9*Mw^QIvh^TDS4)(1*YYj`-^7ymZtz5H^ug5e07%X4VgjqJaV}VFloG z8U|(z6stH8yr?!>Rx5!QR{uV#hr0oXeSZ4gHS3(xWNB(|a=I3zxzE|*nFc@^K0~%2 zPzVrcOPaEZ2!Hb%hBxfB%gTk@EGR)MHj=zNR;CSaAQxkK5bDErmI@D1{KxCM{-Xgh z(j#Yq#lEKoVf~q*MpNsFZtiU!Q0;Si^$q0D!@dDexQI6Xq~$<(^NydSMEx6t2Ok*ex04F;L&9cdQcs+=UKPuNlEQ(M>ZoB zYUGor`!(FrE9&SpKAE)Rep}$-aqtC4!<=_aY3Vf!QG9k?e&r zCx$P?RS;?IbvcB8<4m)sz0F20KfKoJmH7Y>13JHnk1ge;&r^H6N~o&NpH68wXq(;;zeO3iuykJMjh?| zU7T793k@e#5)GbVU88!N87=G&VdsODHA95q=&n`(GPIF_;=&i=ma0I$0L%RPNjFL2 z3-0xnv*N|ZcI~6HY3PCpG!WqmSmebnd zRgk=XQ9nH@H#n>fjaFCBJr$qmuE;(0M|g-HO{M>-eJ$vkz~!-sIBxB)$bXl5$Q@G= z)-&w5cFwzhOzdJaZ7d(_5%y8KRy?`qx#tfJ!ech-&BW`K{f=bMh7UmEAe0ueb(E=i z)Yty3R7jr)Dnh1>;DWE!k&)cQ?C#e=NcACq5#GrD4No+>nU>!x3Kwdw7sp&c-!MzxZ97^zoQ?mco9bPl?A7cSQpQKg zt)!5*-;o$-4bQ&I7cA2JXJrTFtiO-zmby(cBx%2K#U_aP=oDs@x3+ z5y|^*PNswIB%^&7TSt3y1=7^3we4(vwLBk1c=4h(vf6(xMs50Qqv7bvk24C@oVu#- zi~(W>3dS(d6v0Shzu;izQw;InvnxHCydVZvV%6~lZ2Zx(ZN}6I+Db41+BgfdBuExi z)zv@cm12e}vTfqyp=3L=e4s=Ys+iLnXRHXV%O}d&9i!jB9xJpqnLj@?1X!0@8lW7Y z4*;+i4~5+tYys_dPYZhZCwKMK=1hYWfBq% zVEgM^*k2bVy-Oq1cQIw1bUVWw7##Ytd!jlGpbSw@o{`!&9v+@M+-tNrINMM&T(hvC zC_h*Zo>u0}%~(DY#`@isnOyHJ>ZWAA^-Q{9Ig(V^iI$E9(lkKRGW+%;IO#Nvo-8V^ z&|4+mQ>r4t7e1zE&O?O+I$_M=0zFAf%WJD^l<;ibXrQCj(j(b$|NR)`)!Bo()aCZn zwWp(Q&B2lYVu4N&mGG#mt3x49{iZ%87f}f(Wq;hiNKI*CLO@Gf+ZdoYy$(=}wzjo@ zUmGKOZuJsIuVVP&?aifU9v@{T(Z(oKNVh(z1!LO!^XkR4`kfOE`_*S zprrBnF!zH>Cxm?4i_>oxQ{>QL+)SHbJG9Dum9s*5bM( zp7YBuNZ1Rtg<8YLF2ACP=4N2w@qB4Q6cQfr)^2%eNP0>h z@WQ~`tB?gPjcs&SLe8+chp$@c?HLqG(RTdZ@wf+poL}v9P*sm^9Nb%fNGfba3lPXl z$5$flY+~g+ABA}F;x@9xuu;dA2@SI|&03U2yE-943sfGfQzy($8^^x(LNVcm*tstI zcbhdnj1Z*REc75+kE@Q#grEy<=SS{jf_s2lE9unM7lHSn4CDiieMCLnIHXW{x;&qb zbh(&te0in_aHgoz?WS&nZ=X_CEblT{TJ?vBkyARGuDJQOI(7or2oG;{26#{{M*c zU8hPB%=hGLu^@}U?x;5}s z4Li&*DeSO!ws0qgy0#GS=z2HavJ-ntv)U1Gg5L~1yZ3>Om{Bak199glh_|DAp#v+`~ ztM>$>m^ZK4>g~p5Zk#((Sm+qkJt{w_h_53eA)3kQ5jDzVa8L*dLH&F-eVHEs*Mb${ zHCQZISbpW59eGHt(AIvu`SR$I&M}MlpJOV525#~j`#VaMV`XQr!CCUuy~=&Ph8i_h zgf2IulH9=hnNT-<^3e|{L_r}+eD97$rrq%|NM`ZHgL4ie6 z!ZmJ4K1hkQj2cr7%^7;#gr0lG==nHUs(M;s-#_QAuxslCvfgz0_ufN|Y z<$jwNU)PL3<u$M~5vG?6%!}4;JgC-N)g$^)?R?|3CZ>p?S*x z@jnbRfd9c<&oec3R&)67zg~fco$F}-V;1Nj;W(rhy-}&jBK2x~iK@(gW44}2-u$zk zs)bN&5{v#ZOXoZj1By$y@Z1(z#Goqgzx2DKN2Fn+%9*197{4UlZ9EI_FCd%z#~`8k z=zk0nT1FNYSippqhGho!oEH;-10vhTuNHWLk;4sd#@rE0Ai<fV7enYp^`{eKJ& zjdZCWniUuif;n}iMYcTkd=fHowLrPExNBX5f!~Hp&%I;DN$r;))l(Hk4V9A-kr$Qfyjd zA-+`a4COG^+G$PK?sW|gQlh`1L2^jWHYbX-y&{6wE-*rXX>28DmG-kmTDQG8<54KB zm_UIKHOLp90?m^vFT}shqDUp$H~a0#^%o!Txpc2k28B33fW*0?O}XM^S-BuU|Ni+# z7|8+k-0$#0s2GhL@;;Csd0m6_7~ZO;y$**N`>ycaB3@9Z2S z+EWdk4yG(fn*TZ^)CfQ>N3`FeG?i1bmV)7~8F%s2pfP06Mk=2f!zPo$Mky5`{k6g2 z*BLJ@mtPdIy**daT8p*XsMm04a(I&48v-b8={BXQkDdNi@2pEtKbdtVG-{&wf)k~9wMnn3q{Q5U zw?SM^M@6&(qhmy&b@c2g0n6AJ*#(TwQwv?R7W97RIsw(vZBe%XqWsl2O^dD{sN?ei zC->jqnAVMv1N3BtImqBqc>5T$3Mdz$v|c)PHk`6%3LER29BK}VIh7#yV5(7W2LKex#gEl2(Vc& z^@Mlrog9^a!}7XNn0K7l@o*Bz6083l>A|anvPs~^3DJzRH``DiH6J(<*d?*4R(YRk zy|9pX^$0H& zI%_@{rlzHpzg?^|EQK^V&j8$1RbxWEy!KRj6QVk~LjGW)NC%r(1@zq^tusXsz}>gx4MLWEV?=XdEu!bFUMc7PpTWUZBL4T5%a?a zd22-cwyTBeV;#;N;mP_*)=w6@Il3cJ(dqO#001%eo`FB8#63?*jb7YeByyrqj)^LL zcsj4&yuI^PE$K$4%28f?Yo`n}(va8C^zK1l8Y>V5tTwA8>;aKBu>*8vf2+!5>cRP~ zsP_Wz>mMX1RKvmU)Gw<`rt(ejv8~NBU5GXRv($@@1a7d@K};;=n|edjsfr#CP5-=T z3pbTfySfY{;bL+vv|EXPxS-=WXo+$v$TEu`b~3E4(&y&yfjZ8nI9GKZf&OTwqMuaM z_KWt|b7n?9q*_tDOSEu334;Q)HN+)2RuFIU}35ero)Zlo^&9T=Wayrj+z? z_KH7XH>b z#udB#jz!m9e8VuUh`5wW*7u*7woDwq2bSWg)6{! zv9Cd*XJca{0rLS3EzGejC@3^zxv^p>sfaq<6Fy`^$1y9XD`E}n#M%N?=+FYDXo#9e z=wp$to+CwtY;(Nw@KXa(bQv1?}wJs4yaXJdDF*NGz%>>}Kb#MgWlIC&|@O@gkc49?rB>V z+J_OrJ4`%OPXtb7@{wOmNf6aM&EXrQv#xhXfw)44PL#&JHRnThy}4#n1+Er zlGM;!7hOwYD8_XlH#3V{ue-7mgn~WNW?}xyO$Y(gOFu+3#A0G?J}RR#5(g82xb|UI zIrKP#5cN(vlb+$vgR@aVKGYjbmfz83mGK2YKxqA9;*k96NH%36QO za=a}bKrI|PXvg-revWz@QpCc|t-Huwp_iSPCz;UHOp(LQq}!ATp#lkaNEjYLv$=%n zN>b;pZp8+EDj9fKcxub2K!}CUdmxfq2Q#)ou6`TR&vNf>aqxyqx@qHp*Y7rD{Ms#Y zlnM%~%dHj7+|xTkPS&;80a9VTvJsuuT7Ff9!(!iqkH3mkfJys_qCl`Tm3I)Qe(NTv zt}qQp3T4#mmq6C(NKO*y6E_63PRYx)pCbd`U0UVvIP~!=8dcXxRMIw9jOAS`i?}4T zT5h%n?43n zSM9|Zxb{#;!J*X&HqQ0gRV`DQW*18&%@k+zj%dtpK4~2$K4=t>% zhsTN@np#GPKj_)0tzB~xd{=HI3DxPGu zil;WDtf6DUyuUG#KExAp%~@1+Ke~i|j*DJ6?Pw9ygjfqAKd>Vq<>=3(F1i=0?APP* z*5b4x+RUhgUj1|3BAQEwf}J_SBG`T1^U=I#t42mpld*h)2R=B>(-dd2aR1j5(a)0V zs%pH$b-pf}x4HpY;2TeOC)x)rmm1;hliqp@V(eR1+#?+n>@~;4(1w}Fe zHs;|MzYC3!mTdGEJZJ@6taed-|C&MIULh*tsG6&}n@*Z;Z93{9X_R=K{8(19(*8Ag zZ0*mMU88@jNi?*OapsWx+ zrWu(t2NQyWlO)MU5*RH-uhv#C>yXjj47@?eE6aWYV@iSZWwa}HPs)PkI!=~ov#rj^ zt?HX=f!8R}8`KS2*4;N2nyFNLm7wdFj69!j7ueI8*>k`9IS-{Cwwn&Q^=I@nyngd; zkDTN{geteNQozail1NY5X%YBZ>I<}-0iZNwDSN;>`|jFGNG%u0rKTH>B&0^3QrG3@ zOGotDBJ1=nR+wZT+DBs;0gb@uYs$mHTa-?IeKoa?UcW?2UkO zk~125zVTyyncopQcg%|=;;|`=(GN{$6AZj8Qj3l(ocmn-(lO;mpijISs<{I~3!E8j zUJuajs9J3<<1P~J-t?yp#lePR5Iz;ysBo&DsebCM4LFuR^Fl|1+y{p+(3jG@wjels z$3YUgR!J_dB~5auDAyc*{g6$(kNYDvkO}49`^+!UU+zNlB=799xjS;kQ}b#37|CY_#z1^Vkaa8W zIx-z~^Uoq>R*M|wUpANi)vbd=EaafWSxX<9(9qumYp0K-je6*PMEX0jAom$StHU|W zhHzX*?PAXQQ_-0$(&pngfk-%KbTSP2}LSaPn zWtyzYe$q`1&&70>H`!w{Z@*}#&|JZnD z&YjdqgN@`<^=XEF=+wx_>kiB#WZ|c9o6`P|fHwo7$k_n8<$k#`(}q0WarSF=i1+A* zs?i4$Ubo3bHvfS!n2lczNA;MO&}=0}AIf9-v59{PO6ol>gY_Ef>>+z`|7Fi7*03HA zu(!O~GrE6=QDPZ6q1Pn^2|L8GLY~HPDj7fXyfAFu)Y(ku}=@p?%-=U!kSqD6pv7p_+v?%^1$ae>j1Oj!<@JxLPe(1XL zwV~SoIJ^1`8n~2(zN<}y^1OHL2~dUb87L^DK zjev;OW91DNnGwjCMs}C|1>z~= zdOT)!lUsU6M!t`#pO4yut*-F&SBz?CWJa~;spf1-W~ToCY45$Gn(Ugr;R~@VA~s4W zdMjd~h)4|yHbh0>Mx+P=3MxoPN~j5Tq*_5~QBXhvM0zJGO{9b#S_lvzK!6ZRLJ8#E zk^4F4eb)D_bN)Nu`+m!;#Ui=NzVAK{Rd_z_2&a%v)z5=bwoyNe3q22y)?w zBhNEqQg;N%d`FV&XqJsUNY62lzh1kU{zY3dy4|s_va*(aqFQQHA0(%YD?17uR{i)0 z)Uk`esvak+0*^cdwsD@OM`VPZ(A7O&%Bk)N4tZ|sBaT7|@}l@3>zqINBS)$A<@WFw)*tIS@FZ z+`c5SNp~%o<(3!r9fEO7v)o4=ARV;=5GPYn`b@F{Bqf&jo_z_3vihZk}f+f(=`aZ7`Zzt{V(v$vQJqMMryto`*L72zDbEwIjyZk%-#qK#4v$G=; zBlT!rZHHeEI(~Kf}YXf$d&FL~o66+`n>R zOt1adxiDd~Pk(2^grR=DvoPy#*4A|+)^B?8DlT}&LX}tNOh?DgM?f?LtkZqXwjrMN zV$E%NyHzA0UI$VGi48pATYMH|I()s~F81aI;VG!RkeYr($JXc|DDow=Qv{@!xJ6KV zn;iCA`~EB2fCR4=(ZXdRG1&MmM*n7jrjF%Z2FqwIJ@5QtE^7L31&e&^ zX%(l`nX(G*g`h$PVY2sW(JW)1?0=W7bhkM#?&{X`5weAp1^K*w_Ip!-3HQh_Qw1_({y^H6|GE>*yg8|cIJah z64RDX+eUc8(FL(ObYBggW8q&NArcN&yOg`_94_zro&Q8r!Y)v!(dTO-Zr7I{`!Dik zd~xd)3%;JdUBCH)8K~rcvQ=UHHh0q5`J$dWQADKz&`iV7cV!B4PCV}z}~FFw7q-&FcsP}lV^BgbTJ|e7*V3*>tx*kuCyrU z?$QcaesW>&+5b$1$?z-#YUk!kxAM;hL(FA&;GW)%5&uywKyP<>#Tl!CftagL=7O1E zt!{uC&PXgPvmAB?3-I6Kx28m@l!t0LZlC1>hXA{7`PT0$2;T(uO``BN zzEJ^oohcUc5Uk7OB25 zV&RHzKr%nF?nQB-&Zww!9Pq%3jnkPJE?PIkKlNj|Bq)%@*O*}9dgPE-n0Q6z?U&fw z7cBtjO@AMK?#I)tV+#V>sib6?vqV(beCe)v!)>Pzy3cgpI+TET0;0?h9=m(q6sIl^ z);NL7tp)`74`lbMo%q$8nf`5=k$LX+HSxpx?{|P~gU`0#K~anY(&|Dwf|C`%iIImk zkol6!&r2}Uk6+-=8L5AUxBl=WYa{R--2~xRc`+jik+Yk7j}EymGvRUSUh8eIEQt7s5mfqohZFqcS2Z)irU#6STyZZ|Ni@ceYJMTk*M-yb>H{q=@otMOK0{0PcKb~qM zeFO&e4LSL%xZ%EY+pxF2n1Pd@-!5QSQ=0YoV&vR{-O1OrCtp92eZ2F~&TRZ+Sy{gI zd#W}IYnvRu{PJq9SCMIY#x^-;=WW8Sxc1^}=M6t@HUHedF8i(^{J@qi2iE`G*u}mQ zwMf=_@zNUoy7tORn3Odh)KXNV#Cf18>aQRB_Qf&Oai$sRJyR`tj$z`;Dt`0h669ib z@Y#<$VJhj7(xKSUVSK6QPwUolbE?LL(sIpP(@jF|LqSQ276ns=R#rlAZ>P|9oJn=! zlUZAOhg`#qx?XdUN3@9I{VQ`?_fLCfq=m%9#B}D~v(+TnpQ(l6`i@16Vs3M0^(d)5 znO#Ln$i=M4%1q0WZZ{J=%&o22ed5FS<`N=Z7w66BlYptFM@C1xnG$uEzV4R&?#x0vQDa$-{1^U!} z>M-=h&*{Fqr~ppn z%Bsx}pS^P@Tntd|bQMQc61X8O7nAT76tULdT1<)%0 zyw`3$ui04XZ{I8~AK1FQk|zPruTd@c1A|an^slpU(B-JJD|~M4zxFb*6i$JU``9a! zgq`5lT-SB`GwwE~k7YRwha_f&!&GvcoqTXHN{)Wws<+KN8GQ#G9K5SzNLJx8QdpQ$ zGD5_^Y+e}LdHId87rlr(?+Ly`-z;M6AW)bQI&HIVKkvYy!~YllG->YG4YD;-K5*#d|eD}uOI9aBg z9gios?l5z0%#@A5;Z9gpG0J93&jUV~l@8yg$fTr$#+93LMy?wUtevf?%V?^>DE%Z)@I`VtciOp zBHSCW;NVZb=A@ciS$AfWc`c_~7vvk(uz<+m@p0-@2SUSZTwEEBsx0<$wCxI2s008Z zHZW7q-3;INTSnke*wpliJte62%B6X_4Y=e@sne&Tc|@tTc;H-CbB-xKH8nLj!y>;j zWLTj_7wm@hu}RaQ;2x1A34Qpo{xtMK+iSd6-GxJP)xLA*4!QHkhS@qXk(_!J#t z0@HxYrZ<1AklJ^m9?W8wMWUU(&6P@LV5yb56-er2p z;1lUkm~zUjLgArCU&f-gEyjI**suiU8mBotr^W~r*5QI$p({&)gfbbIlKGNlgdL@P zWzdqLu5dVBP1^HOdsjHSNu;*5!j|#j-*Wf#yk|ZoEfPakY_)!>W|rr zS{>5aq{$K(9v*gQl@P;?C}@-IYU86TQw4tQA@9^z1{NmqQz4cm4q}0;fp{8EaCvZP zR3YXvW1xfrGeUC_>BRgD3)}94>>4tmP$}QJr+btbcuv>S9}3Fnv7KDnU0S2hz@oMy z`o~almZGgeaHb{BW|`$2jwBB4PB~A?G}g8?KqA>eH3CwK8pwcQW$6Ph)|SQI;k7b) z&!4|Gh|rN-vg}>0h!qq;X?UlHHO7}rD0L{xmvfTbJGvO^{k<&Z`O4t@I>O-i%f?ZrVS(^BUPt2Td`MbDbp-qXa$x|MND*2QEMy3+ zY^vNK9C)Hpjc&TAKIAO=ho^H&p8=}jNc#kqHs3>uNp2aX+!S>;})upj8cA~4I>6PHp<12yG~ z=VtgfrUuSWwW?;W^iryy%V4`dQDX+<8EDsl@ot4v$9Q|W_5}{c5I9##xj*W5jC;V1 zy}_=S&#J8h2N;4P+`e>I3Yz)FQA-L?*12tUauM|Q)Fu>fh^A_5Xq6oq7Kz2h7Ua&y zmt<-x1p7#-R9qU)cJ%8@ZQDpK4cvEHnI2F%3ptU2#kY$X$>A_+t;|R@4ri*Z*U&iH zjzevSDQavK6gA0Z{4}(sra2<_QkIrX#guDQkoCUi`Yah5w)12>R*NoXE zSe{%RA2(KHjLF!Li}SMlP4(tRyN*8%7ZE-8G~!5%Q0iMJ#o78EwfZ0)hErm{q1h z&A`g4n~oKbAve4i-?~$y@s2Y$*mnJjj|K;IwQlU;F>R_5v1EUO#kA9F{4k8k$TKyq5_DbEFRL*%MTO!r7q5lEv_9H%-n2Fb!!a{S zsb9LTGm3g<^EN^D`aHp%VY8IGDK!7MhIiQW@EaQgemou=Ch#cxS)eqP8iGSw?U~v7 zd0n5@rmfUDuUQx75J^cUZ6nw=q?*E1?TxlUl*jM1{1_ zxSj&nP(7IHzDfUIU+muWmU)vDraE1NLW0eTZ@c$S57TXClLtL`0wZFSvM}7ZX{K3= zd;XfI?2ah*%E;70wW({m>Z*3>sxq3UwW_>I6GrU`kNyYe)GmtI*3O0w78AMHmFkKN zi-JlLchdTD!XgO}9M#;b1$f==Un(9J)5CfnP!ZFkGW2YjPypr&?J=tRhi z#lroo(QK)cPUp8v8J2RBJnmMW6YTZ>Ml_%6<-A+{$**k-Bz#*x%$02nj1bk8I?7wH z#fQ3g(~HDOfRK4z<(Di#le-rh@aXHOKv4C*qzjSGb2nfofw+7{o07Y6LcxXG%og+F z@JKi$8vYCb>=Z1s@o+=Z-$yFBB}_)rT{{q*Qg(}&fMAwT`ixE@eSUsjk!-d4&Aht- z^P0?##tpiu+6;~Im#5zP@#%FUHFiqu_@1rOFQ*#%{QEYA3?YVoM6~Qj{ffXO2Irxf9-)(EZ7mGsgm}9jt20$dqy4qgQ~)VwGV0 z%UBT9(4fTYsM6%X@^9RWFv?7{t$F7;_{QhcgXjlW-g#baW^L2mR|9Ze28uE>Gb4h` z_Nk@)*g&iX`dtiB|y2qIK&&8Dxz`gdALw5(Rwi z)TW-`XXBEj<=R>;USdL&*7}1oE_sg=H*C|ifMPEe(l@(q_fCFr@6D7Ak~+SumT!4 ziifK*92)BfgGfy$`>6)+ZtQVmP4r19*=d$iJOo9}mr4tSqmh&$^-RlU^JZ@#USQiV zJ+tWuduChl)C;g{goef{^C`ZH*Mkd@>g9*3^Kz+Ax66rIWG@sw(l8BtIa&DqGtE_g zS>8~d{&zkW(L>`&ge|`%g2Tw%v%$nVr1;*wc&^CR<}6#Vh1F%vnI^_%78$k3;MieZ zrWgHyfha4w%%QA$)LP!!bk)#m>EKmkFR!+?Q=Gp-9vS9%*afg-twRkgmlqRNTfnTS z20|!|2bh4d82MQ@A(AGn5WIni+^w5n-S)|jscc*@g$T(98b+2v6DSGK15>IqE70F? zh|K0VfBxTz1LR;1FK2?_ZF~@}A^_%pXdB z15&03CCUI9beI1k7czH;CN}3gTTq!gcB(#o@|I~auCJDlxDI^&KvXanv0lI#R044z z2S70i?C?S^uHn|4_wWR!E>f)J$}IgOt^XoJIzB@W&aEsGA`9ec2Zx{sT>M%ofG z|ASM(gV3SFokujM;;I;%?6eb`9 zLkAAlRD!)dZQ9D5R<1A%UF1-$o<|0+>Op+QGyK%V7)lUVad^hJfVG}GCoH#4dNQ;>( zl{+LfDgn+4{7JJ0db75(|3C#0AzDi8g1kxXp4~Fo zT>wxhx^O-vGRGn{n^I>R{71gL%5s;vqPego|0{5u)Lcr5vzjviLzxsIw`Z$6U5+B} z3uh?SY}Xj_m5b9-Z~$d^!SvD?`_QNifReQBwh`kcolKt7M2MBNGOMvO@vFbU=s$+42T0Yjz z-T;=q@=&Q3W%!^177VzW8gHUi7dxxXtqeB9l)M8F{!^6l=6kwI2x|t4-Di|*X=o_K zV+1{o8trH+$#@NvyqJGKihykUq8!Q!0Q8871rC(lFW@12ou$0Z7{wSoP@|%)l1?p) zQ_GWNY1j7>z+MlSo{3ah5;xL^E6Ec8ikpq6Ra#@1QlV29o%ACc;*GQ0yn)lG5-4N_ zE!c)PkmM5f5iyItpYYBdL(S?+w(Y+Lqf>a=G|qqZNw~&p7^)Pmk61}h%xZ{Ltvbi1 z^vKS_uQ|Ir*Qqt6Nwsy2>U|#C=)9n(H!d9G*hZ{a-b!1rX zj%+-N-eChIf56xh%w{MxOF$A1M2Y)wJI3&o$&o!aO9%C~B`+Ht*)ureijiYY&6XAQ zCkj^UAeXX$<$jIf&NE$`??^?|;R}n00t)́ks@m?V#a8d!-O$!CwLg{j!6#-^D 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

EfC#YBi$s!hFim9E49uwo{ER%r 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


d}<7-WLxLx3?*vw|d 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≦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
)~WyygeHW~90 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 b^7sNl!;zo*hs4nA literal 0 HcmV?d00001 diff --git a/docs/images/sensorbox-intro-welcome.png b/docs/images/sensorbox-intro-welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2b0f76a94d0f446016ad6e72f07c4f85556712 GIT binary patch literal 119475 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 aS;;#ptz&2Nuib|`XmHB-WbtoKH~tNwrE4ny literal 0 HcmV?d00001 diff --git a/docs/images/sensorbox-phone-record.png b/docs/images/sensorbox-phone-record.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb22be70ed717f22946c4ef51f1cb2144db3375 GIT binary patch literal 311412 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

G)4+g|a1b29*4a|!6PEy4~AmaJPA(_F6C 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

8FIs`5v-H!`OWsXCUw!aL*b-7> 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

R7A`G^aFRPIK+X*EzyM+5lHj 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 literal 0 HcmV?d00001 diff --git a/docs/images/sensorbox-phone-setup.png b/docs/images/sensorbox-phone-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4c522cb655c1490fd64ed400e2181de07d8afd GIT binary patch literal 231606 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

WlQ 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

|1ICio5c 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'v8$MJD@nX%e)qE+-6Eou)-)b!{L`I&I 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

G7d{Vm!B` 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 literal 0 HcmV?d00001 diff --git a/docs/images/sensorbox-wear-live.png b/docs/images/sensorbox-wear-live.png new file mode 100644 index 0000000000000000000000000000000000000000..a452929ac2428253a72530390dcb760b3ad26b54 GIT binary patch literal 46130 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�<#cIgd3lVx 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

K-fon0;h()LCloM@AV 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 KQmkwi_"$result_file" & +test_pid=$! + +sleep 3 +for value in "1.25:2.5:9.5" "-3.0:4.25:8.75" "6.5:-1.5:7.25"; do + "$adb_bin" -s "$phone_serial" emu sensor set acceleration "$value" + sleep 1 +done + +wait "$test_pid" +cat "$result_file" +grep -q "OK (1 test)" "$result_file" diff --git a/tools/emulator/run_wear_sync_test.sh b/tools/emulator/run_wear_sync_test.sh new file mode 100755 index 0000000..fc1f57b --- /dev/null +++ b/tools/emulator/run_wear_sync_test.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "$0")/../.." && pwd)" +phone_serial="${PHONE_SERIAL:-emulator-5554}" +wear_serial="${WEAR_SERIAL:-emulator-5556}" +adb_bin="${ANDROID_HOME:?ANDROID_HOME must point to the Android SDK}/platform-tools/adb" +phone_test="com.motionapps.sensorbox.emulator.WearToPhoneSyncReceiverEmulatorTest" +wear_test="com.motionapps.sensorbox.emulator.WearToPhoneSyncSenderEmulatorTest" +runner="motionapps.sensorbox.test/androidx.test.runner.AndroidJUnitRunner" +result_directory="$(mktemp -d -t sensorbox-wear-sync.XXXXXX)" +phone_result="$result_directory/phone.txt" +wear_result="$result_directory/wear.txt" + +cleanup() { + rm -rf "$result_directory" +} +trap cleanup EXIT + +install_apks() { + "$adb_bin" -s "$phone_serial" install -r app/build/outputs/apk/debug/app-debug.apk + "$adb_bin" -s "$phone_serial" install -r app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk + "$adb_bin" -s "$wear_serial" install -r wear/build/outputs/apk/debug/wear-debug.apk + "$adb_bin" -s "$wear_serial" install -r wear/build/outputs/apk/androidTest/debug/wear-debug-androidTest.apk +} + +connect_emulators() { + "$adb_bin" -s "$phone_serial" forward tcp:5602 tcp:5601 + "$adb_bin" -s "$wear_serial" reverse tcp:5601 tcp:5602 + "$adb_bin" -s "$wear_serial" shell am broadcast \ + -a com.google.android.gms.wearable.EMULATOR \ + --es operation refresh-emulator-connection >/dev/null +} + +require_paired_emulators() { + pairing_status="$("$adb_bin" -s "$wear_serial" shell am broadcast \ + -a com.google.android.gms.wearable.EMULATOR \ + --es operation get-pairing-status)" + if [[ "$pairing_status" == *"Peer:[null"* ]]; then + echo "Wear emulator has no paired phone. Pair both devices with Android Studio's Pairing Assistant first." >&2 + exit 2 + fi +} + +run_receiver() { + "$adb_bin" -s "$phone_serial" shell am instrument -w -r \ + -e class "$phone_test" "$runner" >"$phone_result" & + phone_test_pid=$! +} + +cd "$repo_root" +connect_emulators +require_paired_emulators +./gradlew :app:assembleDebug :app:assembleDebugAndroidTest \ + :wear:assembleDebug :wear:assembleDebugAndroidTest +install_apks +run_receiver +sleep 2 + +"$adb_bin" -s "$wear_serial" shell am instrument -w -r \ + -e class "$wear_test" "$runner" >"$wear_result" +wait "$phone_test_pid" + +cat "$wear_result" +cat "$phone_result" +grep -q "OK (1 test)" "$wear_result" +grep -q "OK (1 test)" "$phone_result" From 8587693d867e071822fae6bda75b2e4e1fed01c5 Mon Sep 17 00:00:00 2001 From: Foxpace Date: Wed, 19 Aug 2026 23:34:13 +0200 Subject: [PATCH 2/2] refactor: implement architecture plan --- README.md | 14 +- WearOsLib/build.gradle.kts | 3 +- .../motionapps/wearoslib/WearOsConstants.kt | 4 +- .../GooglePlayWearConnectionRepository.kt | 12 +- .../connectivity/WearConnectionRepository.kt | 3 +- .../connectivity/WearConnectionUseCases.kt | 5 +- .../files/GooglePlayWearFileTransferClient.kt | 25 +- .../wearoslib/files/WearFilePathCodec.kt | 69 ++++- .../wearoslib/files/WearFileTransferClient.kt | 5 +- .../protocol/SendWearCommandUseCase.kt | 13 + .../wearoslib/protocol/WearCommand.kt | 59 +++- .../wearoslib/protocol/WearCommandCodec.kt | 243 ++++++++++----- .../protocol/WearCommandCodecTest.kt | 77 +++-- .../FakeWearConnectionRepository.kt | 11 +- app/build.gradle.kts | 3 + .../main/MeasurementSetupScreenRobot.kt | 5 +- .../main/MeasurementSetupScreenTest.kt | 4 +- .../main/OnboardingScreenRobot.kt | 12 +- .../presentation/main/OnboardingScreenTest.kt | 10 +- .../presentation/main/RecordScreenRobot.kt | 5 +- .../presentation/main/RecordScreenTest.kt | 20 +- app/src/main/AndroidManifest.xml | 2 +- .../com/motionapps/sensorbox/MsgListener.kt | 29 +- .../com/motionapps/sensorbox/SensorBoxApp.kt | 13 +- .../sensorbox/activities/MainActivity.kt | 137 +++++++-- .../sensorbox/di/CoroutineModule.kt | 21 ++ .../sensorbox/di/DiagnosticsModule.kt | 47 +++ .../sensorbox/di/RecordingModule.kt | 34 +++ .../measurement/DocumentStorageUseCase.kt | 18 +- .../measurement/MeasurementControlUseCase.kt | 114 +------ .../measurement/PhoneRecordingController.kt | 132 ++++++++ .../measurement/RecordingWorkflowGateway.kt | 53 ++++ .../paired/PairedRecordingCoordinator.kt | 265 ++++++++++++++++ .../paired/PhoneRecordingSessionObserver.kt | 49 +++ .../domain/paired/PhoneWearCommandHandler.kt | 77 +++++ .../paired/PhoneWearMessageDispatcher.kt | 21 ++ .../domain/paired/WearAcknowledgementInbox.kt | 38 +++ .../domain/sensors}/WearSensorCatalogStore.kt | 3 +- .../domain/sync/ReceiveWearFileUseCase.kt | 10 +- .../domain/sync/WearFileDestination.kt | 44 +-- .../presentation/main/AboutScreen.kt | 4 +- .../main/ActiveMeasurementScreen.kt | 12 +- .../presentation/main/MainContract.kt | 157 +--------- .../presentation/main/MainViewModel.kt | 288 ++---------------- .../main/MeasurementSetupScreen.kt | 79 ++--- .../presentation/main/OnboardingContract.kt | 23 ++ .../presentation/main/OnboardingScreen.kt | 50 +-- .../presentation/main/OnboardingViewModel.kt | 86 ++++++ .../presentation/main/RecordScreen.kt | 57 ++-- .../presentation/main/RecordingContract.kt | 155 ++++++++++ .../presentation/main/RecordingViewModel.kt | 288 ++++++++++++++++++ .../presentation/main/SensorBoxApp.kt | 120 +++++--- .../presentation/main/SensorDetailsScreen.kt | 11 +- .../presentation/main/SensorPreviewScreen.kt | 4 +- .../presentation/main/SettingsContract.kt | 37 +++ .../presentation/main/SettingsScreen.kt | 120 ++++++-- .../presentation/main/SettingsViewModel.kt | 138 +++++++++ app/src/main/res/values/strings.xml | 7 + .../motionapps/sensorbox/PolicyLinksTest.kt | 4 +- .../paired/PairedRecordingCoordinatorTest.kt | 223 ++++++++++++++ .../paired/PhoneWearMessageDispatcherTest.kt | 51 ++++ .../presentation/main/FeatureViewModelTest.kt | 168 ++++++++++ .../presentation/main/MainReducerTest.kt | 118 ------- .../presentation/main/RecordingReducerTest.kt | 82 +++++ ...eFixtures.kt => RecordingStateFixtures.kt} | 9 +- .../sensorbox/testing/MainDispatcherRule.kt | 21 ++ build.gradle.kts | 1 + core-common/build.gradle.kts | 13 + .../sensorbox/core/error/AppError.kt | 45 +++ .../sensorbox/core/error/AppResult.kt | 123 ++++++++ .../sensorbox/core/error/Diagnostics.kt | 41 +++ core/build.gradle.kts | 2 + .../sensorbox/core/error/AppDiagnostics.kt | 112 ------- .../sensorbox/core/error/AppError.kt | 73 ----- .../sensorbox/core/error/FileDiagnostics.kt | 161 ++++++++++ .../preferences/AppPreferencesRepository.kt | 5 +- .../DataStoreAppPreferencesRepository.kt | 12 +- .../core/storage/NativeDocumentStorage.kt | 81 +++-- .../sensorbox/core/error/AppErrorTest.kt | 8 +- .../core/error/FileDiagnosticsTest.kt | 95 ++++++ .../testing/FakeAppPreferencesRepository.kt | 8 +- .../0001-use-explicit-application-outcomes.md | 5 + ...-recording-engine-from-android-adapters.md | 5 + ...nate-paired-recordings-with-protocol-v2.md | 5 + ...own-presentation-state-by-user-workflow.md | 5 + docs/architecture-refactor-plan.md | 117 +++++++ gradle/libs.versions.toml | 1 + recording-core/build.gradle.kts | 16 + .../sensorbox/recording/RecordingEngine.kt | 226 ++++++++++++++ .../sensorbox/recording/RecordingModel.kt | 92 ++++++ .../sensorbox/recording/RecordingSource.kt | 21 ++ .../recording/RecordingEngineTest.kt | 188 ++++++++++++ sensorservices/build.gradle.kts | 2 +- .../sensorservices/handlers/GPSHandler.kt | 18 +- .../sensorservices/handlers/StorageHandler.kt | 42 +-- .../ActivityRecognitionMeasurement.kt | 101 +++--- .../handlers/measurements/ExtraInfoHandler.kt | 15 +- .../handlers/measurements/GPSMeasurement.kt | 64 ++-- .../measurements/MeasurementInterface.kt | 25 -- .../measurements/SensorMeasurement.kt | 74 +++-- .../measurements/SignificantMotion.kt | 52 ++-- .../intent/MeasurementIntentFactory.kt | 2 +- .../intent/MeasurementLaunchRequest.kt | 2 +- .../AndroidRecordingSources.kt | 176 +++++++++++ .../serviceController/MeasurementConfig.kt | 4 +- .../serviceController/ServiceController.kt | 158 +++------- .../services/MeasurementService.kt | 263 +++++++++------- .../session/MeasurementSessionState.kt | 1 + .../session/MeasurementSessionStore.kt | 26 ++ .../sensorservices/types/SensorHolder.kt | 20 +- .../types/SensorHolderErrorTest.kt | 5 +- settings.gradle.kts | 2 + .../WearToPhoneSyncSenderEmulatorTest.kt | 12 +- wear/src/main/AndroidManifest.xml | 2 +- .../motionapps/sensorbox/WearSensorBoxApp.kt | 13 +- .../sensorbox/activities/MainActivity.kt | 10 +- .../sensorbox/communication/MsgListener.kt | 88 +----- .../communication/WearAcknowledgementInbox.kt | 38 +++ .../communication/WearCommandEnvironment.kt | 43 +++ .../communication/WearCommandHandler.kt | 206 +++++++++++++ .../communication/WearMessageDispatcher.kt | 21 ++ .../WearRecordingSessionObserver.kt | 51 ++++ .../sensorbox/di/DiagnosticsModule.kt | 47 +++ .../sensorbox/di/RecordingModule.kt | 20 ++ .../WearMeasurementControlUseCase.kt | 42 ++- .../sync/SyncWearMeasurementsUseCase.kt | 16 +- .../dashboard/WearDashboardViewModel.kt | 6 +- .../motionapps/sensorbox/PolicyLinksTest.kt | 4 +- .../communication/WearCommandHandlerTest.kt | 133 ++++++++ 129 files changed, 5413 insertions(+), 1873 deletions(-) create mode 100644 WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/SendWearCommandUseCase.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/di/CoroutineModule.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/measurement/PhoneRecordingController.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/measurement/RecordingWorkflowGateway.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinator.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneRecordingSessionObserver.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearCommandHandler.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcher.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/domain/paired/WearAcknowledgementInbox.kt rename {WearOsLib/src/main/java/com/motionapps/wearoslib/protocol => app/src/main/java/com/motionapps/sensorbox/domain/sensors}/WearSensorCatalogStore.kt (86%) create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingContract.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingViewModel.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingContract.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingViewModel.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsContract.kt create mode 100644 app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsViewModel.kt create mode 100644 app/src/test/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinatorTest.kt create mode 100644 app/src/test/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcherTest.kt create mode 100644 app/src/test/java/com/motionapps/sensorbox/presentation/main/FeatureViewModelTest.kt delete mode 100644 app/src/test/java/com/motionapps/sensorbox/presentation/main/MainReducerTest.kt create mode 100644 app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingReducerTest.kt rename app/src/test/java/com/motionapps/sensorbox/presentation/main/{MainStateFixtures.kt => RecordingStateFixtures.kt} (61%) create mode 100644 app/src/test/java/com/motionapps/sensorbox/testing/MainDispatcherRule.kt create mode 100644 core-common/build.gradle.kts create mode 100644 core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppError.kt create mode 100644 core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppResult.kt create mode 100644 core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/Diagnostics.kt delete mode 100644 core/src/main/java/com/motionapps/sensorbox/core/error/AppDiagnostics.kt delete mode 100644 core/src/main/java/com/motionapps/sensorbox/core/error/AppError.kt create mode 100644 core/src/main/java/com/motionapps/sensorbox/core/error/FileDiagnostics.kt create mode 100644 core/src/test/java/com/motionapps/sensorbox/core/error/FileDiagnosticsTest.kt create mode 100644 docs/adr/0001-use-explicit-application-outcomes.md create mode 100644 docs/adr/0002-separate-recording-engine-from-android-adapters.md create mode 100644 docs/adr/0003-coordinate-paired-recordings-with-protocol-v2.md create mode 100644 docs/adr/0004-own-presentation-state-by-user-workflow.md create mode 100644 docs/architecture-refactor-plan.md create mode 100644 recording-core/build.gradle.kts create mode 100644 recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingEngine.kt create mode 100644 recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingModel.kt create mode 100644 recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingSource.kt create mode 100644 recording-core/src/test/kotlin/com/motionapps/sensorbox/recording/RecordingEngineTest.kt delete mode 100644 sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/MeasurementInterface.kt create mode 100644 sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/AndroidRecordingSources.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/communication/WearAcknowledgementInbox.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandEnvironment.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandHandler.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/communication/WearMessageDispatcher.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/communication/WearRecordingSessionObserver.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt create mode 100644 wear/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt create mode 100644 wear/src/test/java/com/motionapps/sensorbox/communication/WearCommandHandlerTest.kt diff --git a/README.md b/README.md index a03293b..9629b45 100644 --- a/README.md +++ b/README.md @@ -43,15 +43,19 @@ The UI modules use unidirectional MVI: `Composable → Intent → ViewModel → use case → repository/service → State + Effect` -UI launchers execute one-shot effects, while decisions and state transitions remain in ViewModels, reducers, and focused use cases. Hilt provides production dependencies and interfaces keep platform boundaries replaceable in tests. +UI launchers execute one-shot effects, while decisions and state transitions remain in workflow-owned ViewModels, reducers, and focused use cases. The phone shell owns navigation only. Hilt provides production dependencies and interfaces keep platform boundaries replaceable in tests. Modules: -- `app`: phone Compose UI, MVI, permissions, native document storage, and received watch files. +- `app`: phone Compose UI, workflow-owned MVI, paired-recording policy, permissions, and received watch files. - `wear`: Wear Compose Material 3 UI, MVI, live charts, recording, and phone launch flow. -- `core`: DataStore preferences, storage contracts, reducers, and reusable test fixtures. -- `sensorservices`: foreground measurement service and linear sensor/GPS writers. -- `WearOsLib`: coroutine-based connectivity, versioned command protocol, and Channel file transport. +- `core-common`: platform-neutral `AppResult`, stable application errors, and diagnostics contracts. +- `recording-core`: pure Kotlin recording state machine, source roles, scheduling, and cleanup policy. +- `core`: Android DataStore preferences, document storage, local rotating diagnostics, and reusable test fixtures. +- `sensorservices`: Android recording adapters, foreground host, and linear sensor/GPS writers. It has no Wear dependency. +- `WearOsLib`: coroutine-based connectivity, strict protocol v2 command encoding, and Channel file transport. App policy stays in `app` and `wear`. + +Paired phone/watch recording is all-or-nothing: both sides prepare before either commits, commands are session-correlated and idempotent, timeouts use bounded retries, and rejection or timeout compensates both sides. ## Platform and toolchain diff --git a/WearOsLib/build.gradle.kts b/WearOsLib/build.gradle.kts index 4697001..4100136 100644 --- a/WearOsLib/build.gradle.kts +++ b/WearOsLib/build.gradle.kts @@ -40,7 +40,7 @@ android { } dependencies { - implementation(project(":core")) + implementation(project(":core-common")) implementation(libs.androidx.core.ktx) implementation(libs.play.services.wearable) @@ -49,6 +49,7 @@ dependencies { implementation(libs.hilt.android) ksp(libs.hilt.compiler) testImplementation(libs.junit) + testFixturesImplementation(project(":core-common")) testFixturesImplementation(libs.coroutines.core) } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/WearOsConstants.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/WearOsConstants.kt index 7db9cd1..283f93a 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/WearOsConstants.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/WearOsConstants.kt @@ -2,7 +2,7 @@ package com.motionapps.wearoslib object WearOsConstants { const val PHONE_APP_CAPABILITY = "phone_app" - const val PHONE_MESSAGE_PATH = "/sensorbox/v1/phone" + const val PHONE_MESSAGE_PATH = "/sensorbox/v2/phone" const val WEAR_APP_CAPABILITY = "wear_app" - const val WEAR_MESSAGE_PATH = "/sensorbox/v1/wear" + const val WEAR_MESSAGE_PATH = "/sensorbox/v2/wear" } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/GooglePlayWearConnectionRepository.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/GooglePlayWearConnectionRepository.kt index 5e123db..0804039 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/GooglePlayWearConnectionRepository.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/GooglePlayWearConnectionRepository.kt @@ -6,6 +6,8 @@ import com.google.android.gms.wearable.CapabilityInfo import com.google.android.gms.wearable.Node import com.google.android.gms.wearable.Wearable import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.suspendAppResult import com.motionapps.sensorbox.core.error.suspendFlatMap import dagger.hilt.android.qualifiers.ApplicationContext @@ -31,7 +33,7 @@ class GooglePlayWearConnectionRepository @Inject constructor(@ApplicationContext trySend(loadConnection(capability)) awaitClose { capabilityClient.removeListener(listener) } }.catch { error -> - AppError.from(AppError.Kind.CONNECTIVITY, "Observe Wear connection", error) + AppError.from(AppErrorCode.CONNECTIVITY, "Observe Wear connection", error) emit(WearConnection.Disconnected) } @@ -42,13 +44,13 @@ class GooglePlayWearConnectionRepository @Inject constructor(@ApplicationContext return WearNodeSelector.select(info.nodes.map { it.toWearNode() }) } - override suspend fun sendMessage(capability: String, path: String, payload: ByteArray): Result = - suspendAppResult(AppError.Kind.CONNECTIVITY, "Find Wear node") { findNode(capability) } + override suspend fun sendMessage(capability: String, path: String, payload: ByteArray): AppResult = + suspendAppResult(AppErrorCode.CONNECTIVITY, "Find Wear node") { findNode(capability) } .suspendFlatMap { node -> if (node == null) { - Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Find reachable Wear node for $capability")) + AppResult.failure(AppError(AppErrorCode.CONNECTIVITY, "Find reachable Wear node for $capability")) } else { - suspendAppResult(AppError.Kind.CONNECTIVITY, "Send Wear message") { + suspendAppResult(AppErrorCode.CONNECTIVITY, "Send Wear message") { messageClient.sendMessage(node.id, path, payload).await() Unit } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionRepository.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionRepository.kt index f04a0cf..518a4bb 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionRepository.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionRepository.kt @@ -1,5 +1,6 @@ package com.motionapps.wearoslib.connectivity +import com.motionapps.sensorbox.core.error.AppResult import kotlinx.coroutines.flow.Flow interface WearConnectionRepository { @@ -7,5 +8,5 @@ interface WearConnectionRepository { suspend fun findNode(capability: String): WearNode? - suspend fun sendMessage(capability: String, path: String, payload: ByteArray): Result + suspend fun sendMessage(capability: String, path: String, payload: ByteArray): AppResult } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionUseCases.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionUseCases.kt index d884c24..32cd61e 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionUseCases.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/connectivity/WearConnectionUseCases.kt @@ -1,5 +1,6 @@ package com.motionapps.wearoslib.connectivity +import com.motionapps.sensorbox.core.error.AppResult import kotlinx.coroutines.flow.Flow import javax.inject.Inject @@ -8,9 +9,9 @@ class ObserveWearCapabilityUseCase @Inject constructor(private val repository: W } class SendWearMessageUseCase @Inject constructor(private val repository: WearConnectionRepository) { - suspend operator fun invoke(capability: String, path: String, message: String): Result = + suspend operator fun invoke(capability: String, path: String, message: String): AppResult = invoke(capability, path, message.encodeToByteArray()) - suspend operator fun invoke(capability: String, path: String, payload: ByteArray): Result = + suspend operator fun invoke(capability: String, path: String, payload: ByteArray): AppResult = repository.sendMessage(capability, path, payload) } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/GooglePlayWearFileTransferClient.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/GooglePlayWearFileTransferClient.kt index b5fef8b..4a78063 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/GooglePlayWearFileTransferClient.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/GooglePlayWearFileTransferClient.kt @@ -3,7 +3,8 @@ package com.motionapps.wearoslib.files import android.content.Context import com.google.android.gms.wearable.ChannelClient import com.google.android.gms.wearable.Wearable -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.suspendAppResult import com.motionapps.sensorbox.core.error.suspendFlatMap @@ -22,36 +23,36 @@ class GooglePlayWearFileTransferClient @Inject constructor(@ApplicationContext c nodeId: String, metadata: WearFileMetadata, input: () -> java.io.InputStream, - ): Result = withContext(Dispatchers.IO) { + ): AppResult = withContext(Dispatchers.IO) { WearFilePathCodec.encode(metadata).suspendFlatMap { path -> - suspendAppResult(AppError.Kind.CONNECTIVITY, "Open Wear channel") { + suspendAppResult(AppErrorCode.CONNECTIVITY, "Open Wear channel") { channelClient.openChannel(nodeId, path).await() } }.suspendFlatMap { channel -> - val transfer = suspendAppResult(AppError.Kind.CONNECTIVITY, "Write Wear channel") { + val transfer = suspendAppResult(AppErrorCode.CONNECTIVITY, "Write Wear channel") { input().use { source -> channelClient.getOutputStream(channel).await().use(source::copyTo) } } - val close = suspendAppResult(AppError.Kind.CONNECTIVITY, "Close Wear channel") { + val close = suspendAppResult(AppErrorCode.CONNECTIVITY, "Close Wear channel") { channelClient.close(channel).await() } - listOf(transfer, close).combineAppResults(AppError.Kind.CONNECTIVITY, "Send Wear file") - }.withAppError(AppError.Kind.CONNECTIVITY, "Send Wear file") + listOf(transfer, close).combineAppResults(AppErrorCode.CONNECTIVITY, "Send Wear file") + }.withAppError(AppErrorCode.CONNECTIVITY, "Send Wear file") } override suspend fun receive( channel: ChannelClient.Channel, - consume: (java.io.InputStream) -> Result, - ): Result = withContext(Dispatchers.IO) { - val transfer = suspendAppResult(AppError.Kind.CONNECTIVITY, "Open Wear input stream") { + consume: (java.io.InputStream) -> AppResult, + ): AppResult = withContext(Dispatchers.IO) { + val transfer = suspendAppResult(AppErrorCode.CONNECTIVITY, "Open Wear input stream") { channelClient.getInputStream(channel).await() }.suspendFlatMap { input -> input.use(consume) } - val close = suspendAppResult(AppError.Kind.CONNECTIVITY, "Close Wear channel") { + val close = suspendAppResult(AppErrorCode.CONNECTIVITY, "Close Wear channel") { channelClient.close(channel).await() } - listOf(transfer, close).combineAppResults(AppError.Kind.CONNECTIVITY, "Receive Wear file") + listOf(transfer, close).combineAppResults(AppErrorCode.CONNECTIVITY, "Receive Wear file") } } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFilePathCodec.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFilePathCodec.kt index 4f63275..c9bc1fb 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFilePathCodec.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFilePathCodec.kt @@ -1,46 +1,89 @@ package com.motionapps.wearoslib.files import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap -import java.util.Base64 object WearFilePathCodec { - fun encode(metadata: WearFileMetadata): Result = if ( + fun encode(metadata: WearFileMetadata): AppResult = if ( metadata.measurementName.isSafePathPart() && metadata.fileName.isSafePathPart() ) { - appResult(AppError.Kind.CONNECTIVITY, "Encode Wear file path") { + appResult(AppErrorCode.CONNECTIVITY, "Encode Wear file path") { "$PREFIX/${metadata.measurementName.encodePart()}/${metadata.fileName.encodePart()}" } } else { - Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear file path")) + AppResult.failure(AppError(AppErrorCode.CONNECTIVITY, "Validate Wear file path")) } - fun decode(path: String): Result { + fun decode(path: String): AppResult { val parts = path.removePrefix("$PREFIX/").split('/') if (!path.startsWith("$PREFIX/") || parts.size != 2) { - return Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear file path")) + return AppResult.failure(AppError(AppErrorCode.CONNECTIVITY, "Validate Wear file path")) } - return appResult(AppError.Kind.CONNECTIVITY, "Decode Wear file path") { + return appResult(AppErrorCode.CONNECTIVITY, "Decode Wear file path") { WearFileMetadata(parts[0].decodePart(), parts[1].decodePart()) }.flatMap { metadata -> if (metadata.measurementName.isSafePathPart() && metadata.fileName.isSafePathPart()) { - Result.success(metadata) + AppResult.success(metadata) } else { - Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear file path")) + AppResult.failure(AppError(AppErrorCode.CONNECTIVITY, "Validate Wear file path")) } } } - private fun String.encodePart(): String = Base64.getUrlEncoder() - .withoutPadding() - .encodeToString(encodeToByteArray()) + private fun String.encodePart(): String = encodeToByteArray().toBase64Url() - private fun String.decodePart(): String = Base64.getUrlDecoder().decode(this).decodeToString() + private fun String.decodePart(): String = decodeBase64Url().decodeToString() + + private fun ByteArray.toBase64Url(): String = buildString((size * 4 + 2) / 3) { + var index = 0 + while (index < size) { + val first = this@toBase64Url[index++].toInt() and BYTE_MASK + append(BASE64_URL_ALPHABET[first ushr 2]) + if (index < size) { + val second = this@toBase64Url[index++].toInt() and BYTE_MASK + append(BASE64_URL_ALPHABET[(first and 0x03) shl 4 or (second ushr 4)]) + if (index < size) { + val third = this@toBase64Url[index++].toInt() and BYTE_MASK + append(BASE64_URL_ALPHABET[(second and 0x0F) shl 2 or (third ushr 6)]) + append(BASE64_URL_ALPHABET[third and 0x3F]) + } else { + append(BASE64_URL_ALPHABET[(second and 0x0F) shl 2]) + } + } else { + append(BASE64_URL_ALPHABET[(first and 0x03) shl 4]) + } + } + } + + private fun String.decodeBase64Url(): ByteArray { + require(length % 4 != 1) { "Invalid URL-safe Base64 length" } + val output = ByteArray(length * 3 / 4) + var outputIndex = 0 + var buffer = 0 + var bitCount = 0 + for (character in this) { + val value = BASE64_URL_ALPHABET.indexOf(character) + require(value >= 0) { "Invalid URL-safe Base64 character" } + buffer = buffer shl 6 or value + bitCount += 6 + if (bitCount >= 8) { + bitCount -= 8 + output[outputIndex++] = (buffer ushr bitCount).toByte() + buffer = buffer and ((1 shl bitCount) - 1) + } + } + require(buffer == 0) { "Invalid URL-safe Base64 trailing bits" } + return output.copyOf(outputIndex) + } private fun String.isSafePathPart(): Boolean = isNotBlank() && length <= MAX_PART_LENGTH && '/' !in this && '\\' !in this && this != "." && this != ".." const val PREFIX = "/sensorbox/v1/file" private const val MAX_PART_LENGTH = 120 + private const val BYTE_MASK = 0xFF + private const val BASE64_URL_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFileTransferClient.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFileTransferClient.kt index 5dd106b..1c22dc5 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFileTransferClient.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/files/WearFileTransferClient.kt @@ -1,10 +1,11 @@ package com.motionapps.wearoslib.files import com.google.android.gms.wearable.ChannelClient +import com.motionapps.sensorbox.core.error.AppResult import java.io.InputStream interface WearFileTransferClient { - suspend fun send(nodeId: String, metadata: WearFileMetadata, input: () -> InputStream): Result + suspend fun send(nodeId: String, metadata: WearFileMetadata, input: () -> InputStream): AppResult - suspend fun receive(channel: ChannelClient.Channel, consume: (InputStream) -> Result): Result + suspend fun receive(channel: ChannelClient.Channel, consume: (InputStream) -> AppResult): AppResult } diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/SendWearCommandUseCase.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/SendWearCommandUseCase.kt new file mode 100644 index 0000000..4b5ed19 --- /dev/null +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/SendWearCommandUseCase.kt @@ -0,0 +1,13 @@ +package com.motionapps.wearoslib.protocol + +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.suspendFlatMap +import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase +import javax.inject.Inject + +class SendWearCommandUseCase @Inject constructor(private val sendMessage: SendWearMessageUseCase) { + suspend operator fun invoke(capability: String, path: String, command: WearCommand): AppResult = + WearCommandCodec.encode(command).suspendFlatMap { payload -> + sendMessage(capability, path, payload) + } +} diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommand.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommand.kt index c2a18cc..4fc3633 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommand.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommand.kt @@ -1,24 +1,61 @@ package com.motionapps.wearoslib.protocol +import com.motionapps.sensorbox.core.error.AppErrorCode + sealed interface WearCommand { data object LaunchPhone : WearCommand - data class StartMeasurement( - val folderName: String, - val sensorIds: List, - val includesGps: Boolean, - val startAtEpochMillis: Long = System.currentTimeMillis(), - val durationMillis: Long = 0L, - val measurementType: String = "ENDLESS", - ) : WearCommand - - data object StopMeasurement : WearCommand - data object SyncMeasurements : WearCommand data object RequestSensorList : WearCommand data class SensorList(val sensors: List) : WearCommand + + data class PrepareRecording(val sessionId: String, val request: WearRecordingRequest) : WearCommand + + data class CommitRecording(val sessionId: String, val startAtEpochMillis: Long) : WearCommand + + data class AbortRecording(val sessionId: String) : WearCommand + + data class StopRecording(val sessionId: String, val reason: WearStopReason) : WearCommand + + data class Acknowledgement( + val sessionId: String, + val command: WearSessionCommand, + val outcome: WearAcknowledgementOutcome, + val errorCode: AppErrorCode? = null, + val failureCount: Int = 0, + ) : WearCommand +} + +data class WearRecordingRequest( + val folderName: String, + val sensorIds: List, + val includesGps: Boolean, + val durationMillis: Long = 0L, + val measurementType: String = "ENDLESS", +) + +enum class WearSessionCommand { + PREPARE, + COMMIT, + ABORT, + STOP, +} + +enum class WearAcknowledgementOutcome { + SUCCEEDED, + REJECTED, + FAILED, +} + +enum class WearStopReason { + USER_REQUEST, + DURATION_EXPIRED, + LOW_BATTERY, + SOURCE_FAILURE, + PAIRED_ABORT, + SERVICE_DESTROYED, } data class WearSensorInfo(val type: Int, val name: String, val vendor: String, val isHeartRate: Boolean) diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommandCodec.kt b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommandCodec.kt index e6311a9..0415be4 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommandCodec.kt +++ b/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearCommandCodec.kt @@ -1,6 +1,8 @@ package com.motionapps.wearoslib.protocol import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap import java.io.ByteArrayInputStream @@ -9,20 +11,14 @@ import java.io.DataInputStream import java.io.DataOutputStream object WearCommandCodec { - fun encode(command: WearCommand): Result { - val itemCount = when (command) { - is WearCommand.SensorList -> command.sensors.size - is WearCommand.StartMeasurement -> command.sensorIds.size - else -> 0 - } - if (itemCount > MAX_SENSORS) { - return Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear command")) - } - return appResult(AppError.Kind.CONNECTIVITY, "Encode Wear command") { + const val PROTOCOL_VERSION = 2 + + fun encode(command: WearCommand): AppResult = validate(command).flatMap { + appResult(AppErrorCode.CONNECTIVITY, "Encode Wear command") { ByteArrayOutputStream().use { bytes -> DataOutputStream(bytes).use { output -> output.writeInt(MAGIC) - output.writeByte(VERSION) + output.writeByte(PROTOCOL_VERSION) output.writeCommand(command) } bytes.toByteArray() @@ -30,107 +26,198 @@ object WearCommandCodec { } } - fun decode(payload: ByteArray): Result = appResult(AppError.Kind.CONNECTIVITY, "Read Wear command") { + fun decode(payload: ByteArray): AppResult = appResult( + AppErrorCode.CONNECTIVITY, + "Decode Wear protocol v2 command", + ) { DataInputStream(ByteArrayInputStream(payload)).use { input -> - val validHeader = input.readInt() == MAGIC && input.readUnsignedByte() == VERSION - if (validHeader) { - input.readCommand() - } else { - Result.failure( - AppError(AppError.Kind.CONNECTIVITY, "Validate Wear command header"), - ) - } + require(input.readInt() == MAGIC) { "Unsupported Wear protocol magic" } + require(input.readUnsignedByte() == PROTOCOL_VERSION) { "Unsupported Wear protocol version" } + input.readCommand().also { require(input.available() == 0) { "Trailing Wear command bytes" } } } - }.flatMap { it } + }.flatMap { command -> validate(command).map { command } } + + private fun validate(command: WearCommand): AppResult = if (command.isValid()) { + AppResult.success(Unit) + } else { + AppResult.failure(AppError(AppErrorCode.VALIDATION, "Validate Wear protocol v2 command")) + } private fun DataOutputStream.writeCommand(command: WearCommand) { when (command) { WearCommand.LaunchPhone -> writeByte(TYPE_LAUNCH_PHONE) - is WearCommand.StartMeasurement -> writeMeasurement(command) - WearCommand.StopMeasurement -> writeByte(TYPE_STOP_MEASUREMENT) + WearCommand.SyncMeasurements -> writeByte(TYPE_SYNC_MEASUREMENTS) + WearCommand.RequestSensorList -> writeByte(TYPE_REQUEST_SENSOR_LIST) + is WearCommand.SensorList -> writeSensorList(command) + + is WearCommand.PrepareRecording -> writePrepare(command) + + is WearCommand.CommitRecording -> { + writeByte(TYPE_COMMIT_RECORDING) + writeUTF(command.sessionId) + writeLong(command.startAtEpochMillis) + } + + is WearCommand.AbortRecording -> { + writeByte(TYPE_ABORT_RECORDING) + writeUTF(command.sessionId) + } + + is WearCommand.StopRecording -> { + writeByte(TYPE_STOP_RECORDING) + writeUTF(command.sessionId) + writeUTF(command.reason.name) + } + + is WearCommand.Acknowledgement -> writeAcknowledgement(command) } } + private fun DataOutputStream.writePrepare(command: WearCommand.PrepareRecording) { + writeByte(TYPE_PREPARE_RECORDING) + writeUTF(command.sessionId) + writeUTF(command.request.folderName) + writeBoolean(command.request.includesGps) + writeByte(command.request.sensorIds.size) + command.request.sensorIds.forEach(::writeInt) + writeLong(command.request.durationMillis) + writeUTF(command.request.measurementType) + } + + private fun DataOutputStream.writeAcknowledgement(command: WearCommand.Acknowledgement) { + writeByte(TYPE_ACKNOWLEDGEMENT) + writeUTF(command.sessionId) + writeUTF(command.command.name) + writeUTF(command.outcome.name) + writeBoolean(command.errorCode != null) + command.errorCode?.let { writeUTF(it.name) } + writeInt(command.failureCount) + } + private fun DataOutputStream.writeSensorList(command: WearCommand.SensorList) { writeByte(TYPE_SENSOR_LIST) writeByte(command.sensors.size) command.sensors.forEach { sensor -> writeInt(sensor.type) - writeUTF(sensor.name.take(MAX_SENSOR_TEXT_LENGTH)) - writeUTF(sensor.vendor.take(MAX_SENSOR_TEXT_LENGTH)) + writeUTF(sensor.name) + writeUTF(sensor.vendor) writeBoolean(sensor.isHeartRate) } } - private fun DataOutputStream.writeMeasurement(command: WearCommand.StartMeasurement) { - writeByte(TYPE_START_MEASUREMENT) - writeUTF(command.folderName.take(MAX_FOLDER_LENGTH)) - writeBoolean(command.includesGps) - writeByte(command.sensorIds.size) - command.sensorIds.forEach(::writeInt) - writeLong(command.startAtEpochMillis) - writeLong(command.durationMillis) - writeUTF(command.measurementType.take(MAX_TYPE_LENGTH)) - } - - private fun DataInputStream.readCommand(): Result = when (readUnsignedByte()) { - TYPE_LAUNCH_PHONE -> Result.success(WearCommand.LaunchPhone) - TYPE_START_MEASUREMENT -> readMeasurement() - TYPE_STOP_MEASUREMENT -> Result.success(WearCommand.StopMeasurement) - TYPE_SYNC_MEASUREMENTS -> Result.success(WearCommand.SyncMeasurements) - TYPE_REQUEST_SENSOR_LIST -> Result.success(WearCommand.RequestSensorList) + private fun DataInputStream.readCommand(): WearCommand = when (readUnsignedByte()) { + TYPE_LAUNCH_PHONE -> WearCommand.LaunchPhone + TYPE_SYNC_MEASUREMENTS -> WearCommand.SyncMeasurements + TYPE_REQUEST_SENSOR_LIST -> WearCommand.RequestSensorList TYPE_SENSOR_LIST -> readSensorList() - else -> Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear command type")) + TYPE_PREPARE_RECORDING -> readPrepare() + TYPE_COMMIT_RECORDING -> WearCommand.CommitRecording(readUTF(), readLong()) + TYPE_ABORT_RECORDING -> WearCommand.AbortRecording(readUTF()) + TYPE_STOP_RECORDING -> WearCommand.StopRecording(readUTF(), readNamedEnum(WearStopReason.entries)) + TYPE_ACKNOWLEDGEMENT -> readAcknowledgement() + else -> error("Unknown Wear command type") } - private fun DataInputStream.readSensorList(): Result { - val count = readUnsignedByte() - if (count > MAX_SENSORS) { - return Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear sensor count")) - } - return Result.success( - WearCommand.SensorList( - List(count) { WearSensorInfo(readInt(), readUTF(), readUTF(), readBoolean()) }, - ), - ) - } - - private fun DataInputStream.readMeasurement(): Result { + private fun DataInputStream.readPrepare(): WearCommand.PrepareRecording { + val sessionId = readUTF() val folderName = readUTF() val includesGps = readBoolean() val sensorCount = readUnsignedByte() - if (sensorCount > MAX_SENSORS) { - return Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Validate Wear sensor count")) - } + require(sensorCount <= MAX_SENSORS) { "Too many Wear sensors" } val sensorIds = List(sensorCount) { readInt() } - val startAt = if (available() >= Long.SIZE_BYTES) readLong() else System.currentTimeMillis() - val duration = if (available() >= Long.SIZE_BYTES) readLong() else 0L - val type = if (available() > 0) readUTF() else "ENDLESS" - return Result.success( - WearCommand.StartMeasurement( + return WearCommand.PrepareRecording( + sessionId = sessionId, + request = WearRecordingRequest( folderName = folderName, sensorIds = sensorIds, includesGps = includesGps, - startAtEpochMillis = startAt, - durationMillis = duration, - measurementType = type, + durationMillis = readLong(), + measurementType = readUTF(), ), ) } - private const val MAGIC = 0x53425831 - private const val VERSION = 1 + private fun DataInputStream.readAcknowledgement(): WearCommand.Acknowledgement { + val sessionId = readUTF() + val command = readNamedEnum(WearSessionCommand.entries) + val outcome = readNamedEnum(WearAcknowledgementOutcome.entries) + val errorCode = if (readBoolean()) readNamedEnum(AppErrorCode.entries) else null + return WearCommand.Acknowledgement(sessionId, command, outcome, errorCode, readInt()) + } + + private fun DataInputStream.readSensorList(): WearCommand.SensorList { + val count = readUnsignedByte() + require(count <= MAX_SENSORS) { "Too many Wear sensors" } + return WearCommand.SensorList( + List(count) { WearSensorInfo(readInt(), readUTF(), readUTF(), readBoolean()) }, + ) + } + + private const val MAGIC = 0x53425832 private const val TYPE_LAUNCH_PHONE = 1 - private const val TYPE_START_MEASUREMENT = 2 - private const val TYPE_STOP_MEASUREMENT = 3 - private const val TYPE_SYNC_MEASUREMENTS = 4 - private const val TYPE_REQUEST_SENSOR_LIST = 5 - private const val TYPE_SENSOR_LIST = 6 - private const val MAX_SENSORS = 64 - private const val MAX_FOLDER_LENGTH = 100 - private const val MAX_TYPE_LENGTH = 32 - private const val MAX_SENSOR_TEXT_LENGTH = 100 + private const val TYPE_SYNC_MEASUREMENTS = 2 + private const val TYPE_REQUEST_SENSOR_LIST = 3 + private const val TYPE_SENSOR_LIST = 4 + private const val TYPE_PREPARE_RECORDING = 10 + private const val TYPE_COMMIT_RECORDING = 11 + private const val TYPE_ABORT_RECORDING = 12 + private const val TYPE_STOP_RECORDING = 13 + private const val TYPE_ACKNOWLEDGEMENT = 14 +} + +private const val MAX_SENSORS = 64 +private const val MAX_FOLDER_LENGTH = 100 +private const val MAX_TYPE_LENGTH = 32 +private const val MAX_SENSOR_TEXT_LENGTH = 100 +private const val MAX_SESSION_ID_LENGTH = 128 + +private fun WearCommand.isValid(): Boolean = when (this) { + WearCommand.LaunchPhone, + WearCommand.RequestSensorList, + WearCommand.SyncMeasurements, + -> true + + is WearCommand.SensorList -> sensors.size <= MAX_SENSORS && sensors.all(WearSensorInfo::isValid) + + is WearCommand.PrepareRecording -> isValid() + + is WearCommand.CommitRecording -> validSessionId(sessionId) && startAtEpochMillis >= 0L + + is WearCommand.AbortRecording -> validSessionId(sessionId) + + is WearCommand.StopRecording -> validSessionId(sessionId) + + is WearCommand.Acknowledgement -> isValid() +} + +private fun WearSensorInfo.isValid(): Boolean = + name.length <= MAX_SENSOR_TEXT_LENGTH && vendor.length <= MAX_SENSOR_TEXT_LENGTH + +private fun WearCommand.PrepareRecording.isValid(): Boolean = validSessionId(sessionId) && + request.folderName.isNotBlank() && + request.folderName.length <= MAX_FOLDER_LENGTH && + request.sensorIds.size <= MAX_SENSORS && + request.durationMillis >= 0L && + request.measurementType.length <= MAX_TYPE_LENGTH + +private fun WearCommand.Acknowledgement.isValid(): Boolean = validSessionId(sessionId) && + failureCount >= 0 && + when (outcome) { + WearAcknowledgementOutcome.SUCCEEDED -> errorCode == null && failureCount == 0 + + WearAcknowledgementOutcome.REJECTED, + WearAcknowledgementOutcome.FAILED, + -> errorCode != null + } + +private fun validSessionId(sessionId: String): Boolean = sessionId.isNotBlank() && + sessionId.length <= MAX_SESSION_ID_LENGTH && + sessionId.all { it.isLetterOrDigit() || it == '-' || it == '_' } + +private inline fun > DataInputStream.readNamedEnum(values: List): T { + val name = readUTF() + return values.firstOrNull { it.name == name } ?: error("Unknown Wear protocol enum value") } diff --git a/WearOsLib/src/test/java/com/motionapps/wearoslib/protocol/WearCommandCodecTest.kt b/WearOsLib/src/test/java/com/motionapps/wearoslib/protocol/WearCommandCodecTest.kt index e465931..7c807d3 100644 --- a/WearOsLib/src/test/java/com/motionapps/wearoslib/protocol/WearCommandCodecTest.kt +++ b/WearOsLib/src/test/java/com/motionapps/wearoslib/protocol/WearCommandCodecTest.kt @@ -1,48 +1,79 @@ package com.motionapps.wearoslib.protocol +import com.motionapps.sensorbox.core.error.AppErrorCode import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test class WearCommandCodecTest { @Test - fun `Given a measurement command When encoded and decoded Then all fields survive`() { - val given = WearCommand.StartMeasurement("session", listOf(1, 4, 21), includesGps = true) - - val actual = WearCommandCodec.decode(WearCommandCodec.encode(given).getOrThrow()) + fun `Given protocol v2 commands When round tripped Then every field survives`() { + val request = WearRecordingRequest( + folderName = "shared_session", + sensorIds = listOf(1, 4, 21), + includesGps = true, + durationMillis = 45_000L, + measurementType = "TIMED", + ) + val commands = listOf( + WearCommand.LaunchPhone, + WearCommand.SyncMeasurements, + WearCommand.RequestSensorList, + WearCommand.SensorList(listOf(WearSensorInfo(21, "Heart rate", "Fixture", isHeartRate = true))), + WearCommand.PrepareRecording("session-123", request), + WearCommand.CommitRecording("session-123", 1_800_000_000_000L), + WearCommand.AbortRecording("session-123"), + WearCommand.StopRecording("session-123", WearStopReason.LOW_BATTERY), + WearCommand.Acknowledgement( + sessionId = "session-123", + command = WearSessionCommand.PREPARE, + outcome = WearAcknowledgementOutcome.SUCCEEDED, + ), + WearCommand.Acknowledgement( + sessionId = "session-123", + command = WearSessionCommand.STOP, + outcome = WearAcknowledgementOutcome.FAILED, + errorCode = AppErrorCode.MEASUREMENT, + failureCount = 2, + ), + ) - assertEquals(given, actual.getOrThrow()) + commands.forEach { command -> + val payload = WearCommandCodec.encode(command).getOrThrow() + assertEquals(command, WearCommandCodec.decode(payload).getOrThrow()) + } } @Test - fun `Given an unknown payload When decoded Then it is rejected`() { - val invalidPayload = byteArrayOf(1, 2, 3) + fun `Given a protocol v1 header When decoded Then it is rejected`() { + val v1Payload = byteArrayOf(0x53, 0x42, 0x58, 0x31, 0x01, 0x01) - val actual = WearCommandCodec.decode(invalidPayload) + assertTrue(WearCommandCodec.decode(v1Payload).isFailure) + } - assertTrue(actual.isFailure) + @Test + fun `Given trailing bytes When decoded Then payload is rejected`() { + val valid = WearCommandCodec.encode(WearCommand.LaunchPhone).getOrThrow() + + assertTrue(WearCommandCodec.decode(valid + byteArrayOf(99)).isFailure) } @Test - fun `Given a synchronized measurement When encoded Then schedule survives`() { - val given = WearCommand.StartMeasurement( - folderName = "shared_session", - sensorIds = listOf(1, 21), - includesGps = false, - startAtEpochMillis = 1_800_000_000_000L, - durationMillis = 45_000L, - measurementType = "TIMED", + fun `Given a successful acknowledgement with an error When encoded Then it is rejected`() { + val invalid = WearCommand.Acknowledgement( + sessionId = "session-123", + command = WearSessionCommand.COMMIT, + outcome = WearAcknowledgementOutcome.SUCCEEDED, + errorCode = AppErrorCode.MEASUREMENT, ) - assertEquals(given, WearCommandCodec.decode(WearCommandCodec.encode(given).getOrThrow()).getOrThrow()) + assertTrue(WearCommandCodec.encode(invalid).isFailure) } @Test - fun `Given a Wear sensor catalogue When encoded and decoded Then descriptors survive`() { - val given = WearCommand.SensorList( - listOf(WearSensorInfo(21, "Heart rate", "Fixture", isHeartRate = true)), - ) + fun `Given a malformed session identifier When encoded Then it is rejected`() { + val invalid = WearCommand.AbortRecording("session/with/private/path") - assertEquals(given, WearCommandCodec.decode(WearCommandCodec.encode(given).getOrThrow()).getOrThrow()) + assertTrue(WearCommandCodec.encode(invalid).isFailure) } } diff --git a/WearOsLib/src/testFixtures/java/com/motionapps/wearoslib/connectivity/FakeWearConnectionRepository.kt b/WearOsLib/src/testFixtures/java/com/motionapps/wearoslib/connectivity/FakeWearConnectionRepository.kt index 6a2025e..bfb62f3 100644 --- a/WearOsLib/src/testFixtures/java/com/motionapps/wearoslib/connectivity/FakeWearConnectionRepository.kt +++ b/WearOsLib/src/testFixtures/java/com/motionapps/wearoslib/connectivity/FakeWearConnectionRepository.kt @@ -1,5 +1,8 @@ package com.motionapps.wearoslib.connectivity +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.AppError + import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -7,7 +10,7 @@ class FakeWearConnectionRepository( initialConnection: WearConnection = WearConnection.Disconnected, ) : WearConnectionRepository { private val connection = MutableStateFlow(initialConnection) - private var sendResult: Result = Result.success(Unit) + private var sendResult: AppResult = AppResult.success(Unit) val sentMessages = mutableListOf() @@ -20,7 +23,7 @@ class FakeWearConnectionRepository( capability: String, path: String, payload: ByteArray, - ): Result { + ): AppResult { sentMessages += SentWearMessage(capability, path, payload.copyOf()) return sendResult } @@ -29,8 +32,8 @@ class FakeWearConnectionRepository( connection.value = newConnection } - fun failSending(error: Throwable) { - sendResult = Result.failure(error) + fun failSending(error: AppError) { + sendResult = AppResult.failure(error) } } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 24254d1..5e8b7de 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -85,6 +85,9 @@ dependencies { implementation(libs.androidx.navigation3.runtime) implementation(libs.androidx.navigation3.ui) testImplementation(libs.junit) + testImplementation(libs.coroutines.test) + testImplementation(testFixtures(project(":core"))) + testImplementation(testFixtures(project(":wearoslib"))) androidTestImplementation(libs.androidx.test.ext.junit) androidTestImplementation(libs.espresso.core) androidTestImplementation(testFixtures(project(":wearoslib"))) diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenRobot.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenRobot.kt index 683ca73..89cc619 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenRobot.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenRobot.kt @@ -8,12 +8,11 @@ import com.motionapps.sensorbox.domain.sensors.SensorDescriptor import com.motionapps.sensorbox.ui.theme.SensorBoxTheme class MeasurementSetupScreenRobot(private val rule: ComposeContentTestRule) { - fun givenMeasurementSetup(onIntent: (MainIntent) -> Unit = {}) = apply { + fun givenMeasurementSetup(onIntent: (RecordingIntent) -> Unit = {}) = apply { rule.setContent { SensorBoxTheme { MeasurementSetupScreen( - state = MainState( - route = MainRoute.SETUP, + state = RecordingState( sensors = listOf(SensorDescriptor(1, "Accelerometer", "Fixture", false)), selectedSensorIds = setOf(1), storagePath = "Fixture/SensorBox", diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenTest.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenTest.kt index 73cfb4c..d020340 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenTest.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreenTest.kt @@ -11,14 +11,14 @@ class MeasurementSetupScreenTest { @Test fun givenConfiguredSetupWhenStartIsTappedThenMeasurementIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null MeasurementSetupScreenRobot(composeRule) .givenMeasurementSetup { actualIntent = it } .thenFolderAndSettingsAreVisible() .whenStartMeasurementIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.StartMeasurement, actualIntent) + assertEquals(RecordingIntent.StartMeasurement, actualIntent) } } } diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenRobot.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenRobot.kt index bb51b6b..1154cba 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenRobot.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenRobot.kt @@ -14,20 +14,22 @@ import androidx.compose.ui.test.performClick import com.motionapps.sensorbox.ui.theme.SensorBoxTheme class OnboardingScreenRobot(private val rule: ComposeContentTestRule) { - var lastIntent: MainIntent? = null + var lastIntent: OnboardingIntent? = null private set fun givenInteractiveOnboarding(page: Int = 0, storagePath: String? = null) = apply { rule.setContent { var state by remember { - mutableStateOf( - MainState(route = MainRoute.ONBOARDING, onboardingPage = page, storagePath = storagePath), - ) + mutableStateOf(OnboardingState(page = page, storagePath = storagePath)) } SensorBoxTheme { OnboardingScreen(state) { intent -> lastIntent = intent - state = MainReducer.reduce(state, intent).state + state = when (intent) { + OnboardingIntent.AdvanceOnboarding -> state.copy(page = state.page + 1) + OnboardingIntent.RetreatOnboarding -> state.copy(page = (state.page - 1).coerceAtLeast(0)) + else -> state + } } } } diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenTest.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenTest.kt index e17878d..89a074a 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenTest.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/OnboardingScreenTest.kt @@ -16,15 +16,15 @@ class OnboardingScreenTest { robot.thenPageIsVisible("Welcome to SensorBox").whenNextIsTapped() robot.thenPageIsVisible("Nothing is going out").whenNextIsTapped() robot.thenPageIsVisible("Privacy and terms").whenPrivacyPolicyIsTapped() - assertEquals(MainIntent.OpenPrivacyPolicy, robot.lastIntent) + assertEquals(OnboardingIntent.OpenPrivacyPolicy, robot.lastIntent) robot.whenTermsOfUseIsTapped() - assertEquals(MainIntent.OpenTermsOfUse, robot.lastIntent) + assertEquals(OnboardingIntent.OpenTermsOfUse, robot.lastIntent) robot.whenNextIsTapped().thenPageIsVisible("Android may pause recordings").whenNextIsTapped() robot.thenPageIsVisible("Allow reliable background work").whenBatterySettingsIsTapped() - assertEquals(MainIntent.RequestBatteryOptimizationExemption, robot.lastIntent) + assertEquals(OnboardingIntent.RequestBatteryOptimizationExemption, robot.lastIntent) robot.whenNextIsTapped().thenPageIsVisible("Choose a recording folder") robot.thenFinishIsDisabled().whenChooseFolderIsTapped() - assertEquals(MainIntent.ChooseStorage, robot.lastIntent) + assertEquals(OnboardingIntent.ChooseStorage, robot.lastIntent) } @Test @@ -36,6 +36,6 @@ class OnboardingScreenTest { robot.thenFinishIsEnabled().whenFinishIsTapped() - assertEquals(MainIntent.CompleteOnboarding, robot.lastIntent) + assertEquals(OnboardingIntent.CompleteOnboarding, robot.lastIntent) } } diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenRobot.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenRobot.kt index dd93231..342f7ed 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenRobot.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenRobot.kt @@ -12,13 +12,12 @@ class RecordScreenRobot(private val rule: ComposeContentTestRule) { fun givenRecordScreen( selected: Boolean = false, gpsSelected: Boolean = false, - onIntent: (MainIntent) -> Unit = {}, + onIntent: (RecordingIntent) -> Unit = {}, ) = apply { rule.setContent { SensorBoxTheme { RecordScreen( - state = MainState( - route = MainRoute.RECORD, + state = RecordingState( sensors = listOf(SensorDescriptor(1, "Accelerometer", "Fixture", false)), selectedSensorIds = if (selected) setOf(1) else emptySet(), includesGps = gpsSelected, diff --git a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenTest.kt b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenTest.kt index 36755f2..f9bc39c 100644 --- a/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenTest.kt +++ b/app/src/androidTest/java/com/motionapps/sensorbox/presentation/main/RecordScreenTest.kt @@ -11,62 +11,62 @@ class RecordScreenTest { @Test fun givenRecordScreenWhenSensorIsTappedThenToggleIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null RecordScreenRobot(composeRule) .givenRecordScreen { actualIntent = it } .thenRecordingActionIsVisible() .whenAccelerometerIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.ToggleSensor(1), actualIntent) + assertEquals(RecordingIntent.ToggleSensor(1), actualIntent) } } @Test fun givenRecordScreenWhenSensorInfoIsTappedThenDetailsIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null RecordScreenRobot(composeRule) .givenRecordScreen { actualIntent = it } .whenAccelerometerInfoIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.OpenSensorDetails(1), actualIntent) + assertEquals(RecordingIntent.OpenSensorDetails(1), actualIntent) } } @Test fun givenSelectedSensorWhenContinueIsTappedThenSetupIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null RecordScreenRobot(composeRule) .givenRecordScreen(selected = true) { actualIntent = it } .whenContinueIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.OpenMeasurementSetup, actualIntent) + assertEquals(RecordingIntent.OpenMeasurementSetup, actualIntent) } } @Test fun givenRecordScreenWhenGpsIsTappedThenToggleGpsIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null RecordScreenRobot(composeRule) .givenRecordScreen { actualIntent = it } .whenGpsIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.ToggleGps, actualIntent) + assertEquals(RecordingIntent.ToggleGps, actualIntent) } } @Test fun givenOnlyGpsSelectedWhenContinueIsTappedThenSetupIntentIsSent() { - var actualIntent: MainIntent? = null + var actualIntent: RecordingIntent? = null RecordScreenRobot(composeRule) .givenRecordScreen(gpsSelected = true) { actualIntent = it } .whenContinueIsTapped() composeRule.runOnIdle { - assertEquals(MainIntent.OpenMeasurementSetup, actualIntent) + assertEquals(RecordingIntent.OpenMeasurementSetup, actualIntent) } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b3724c8..d3d085b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,7 +61,7 @@ diff --git a/app/src/main/java/com/motionapps/sensorbox/MsgListener.kt b/app/src/main/java/com/motionapps/sensorbox/MsgListener.kt index 92d9083..d9ed4df 100644 --- a/app/src/main/java/com/motionapps/sensorbox/MsgListener.kt +++ b/app/src/main/java/com/motionapps/sensorbox/MsgListener.kt @@ -1,17 +1,10 @@ package com.motionapps.sensorbox -import android.content.Intent import com.google.android.gms.wearable.ChannelClient import com.google.android.gms.wearable.MessageEvent import com.google.android.gms.wearable.WearableListenerService -import com.motionapps.sensorbox.activities.MainActivity -import com.motionapps.sensorbox.core.error.AppError -import com.motionapps.sensorbox.core.error.appResult +import com.motionapps.sensorbox.domain.paired.PhoneWearMessageDispatcher import com.motionapps.sensorbox.domain.sync.ReceiveWearFileUseCase -import com.motionapps.wearoslib.WearOsConstants.PHONE_MESSAGE_PATH -import com.motionapps.wearoslib.protocol.WearCommand -import com.motionapps.wearoslib.protocol.WearCommandCodec -import com.motionapps.wearoslib.protocol.WearSensorCatalogStore import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -23,29 +16,15 @@ import javax.inject.Inject @AndroidEntryPoint class MsgListener : WearableListenerService() { @Inject - lateinit var receiveWearFile: ReceiveWearFileUseCase + lateinit var messageDispatcher: PhoneWearMessageDispatcher @Inject - lateinit var wearSensorCatalog: WearSensorCatalogStore + lateinit var receiveWearFile: ReceiveWearFileUseCase private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) override fun onMessageReceived(messageEvent: MessageEvent) { - if (messageEvent.path != PHONE_MESSAGE_PATH) return - when (val command = WearCommandCodec.decode(messageEvent.data).getOrNull()) { - WearCommand.LaunchPhone -> { - val launchIntent = Intent(this, MainActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - } - appResult(AppError.Kind.EXTERNAL_ACTION, "Launch phone app from Wear") { - startActivity(launchIntent) - } - } - - is WearCommand.SensorList -> wearSensorCatalog.update(command.sensors) - - else -> Unit - } + serviceScope.launch { messageDispatcher.dispatch(messageEvent.path, messageEvent.data) } } override fun onChannelOpened(channel: ChannelClient.Channel) { diff --git a/app/src/main/java/com/motionapps/sensorbox/SensorBoxApp.kt b/app/src/main/java/com/motionapps/sensorbox/SensorBoxApp.kt index 7ff52e9..d36b407 100644 --- a/app/src/main/java/com/motionapps/sensorbox/SensorBoxApp.kt +++ b/app/src/main/java/com/motionapps/sensorbox/SensorBoxApp.kt @@ -1,8 +1,10 @@ package com.motionapps.sensorbox import android.app.Application -import com.motionapps.sensorbox.core.error.AppDiagnostics +import com.motionapps.sensorbox.core.error.FileDiagnostics +import com.motionapps.sensorbox.domain.paired.PhoneRecordingSessionObserver import dagger.hilt.android.HiltAndroidApp +import javax.inject.Inject /** * building block for the Hilt dependency injection framework @@ -10,8 +12,15 @@ import dagger.hilt.android.HiltAndroidApp */ @HiltAndroidApp class SensorBoxApp : Application() { + @Inject + lateinit var diagnostics: FileDiagnostics + + @Inject + lateinit var recordingSessionObserver: PhoneRecordingSessionObserver + override fun onCreate() { super.onCreate() - AppDiagnostics.install(this) + diagnostics.installUncaughtExceptionHandler() + recordingSessionObserver.start() } } diff --git a/app/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt b/app/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt index 3218fc8..13c8c47 100644 --- a/app/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt +++ b/app/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt @@ -2,6 +2,7 @@ package com.motionapps.sensorbox.activities import android.annotation.SuppressLint import android.content.ClipData +import android.content.ClipboardManager import android.content.Intent import android.net.Uri import android.os.Bundle @@ -16,60 +17,116 @@ import androidx.compose.runtime.getValue import androidx.core.content.FileProvider import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.motionapps.sensorbox.R -import com.motionapps.sensorbox.core.error.AppDiagnostics -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticsStore import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap -import com.motionapps.sensorbox.presentation.main.MainEffect import com.motionapps.sensorbox.presentation.main.MainViewModel +import com.motionapps.sensorbox.presentation.main.OnboardingEffect +import com.motionapps.sensorbox.presentation.main.OnboardingViewModel +import com.motionapps.sensorbox.presentation.main.RecordingEffect +import com.motionapps.sensorbox.presentation.main.RecordingViewModel import com.motionapps.sensorbox.presentation.main.SensorBoxApp +import com.motionapps.sensorbox.presentation.main.SettingsEffect +import com.motionapps.sensorbox.presentation.main.SettingsViewModel import com.motionapps.sensorbox.ui.theme.SensorBoxTheme import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class MainActivity : ComponentActivity() { - private val viewModel: MainViewModel by viewModels() + @Inject + lateinit var diagnosticsStore: DiagnosticsStore + + private val mainViewModel: MainViewModel by viewModels() + private val onboardingViewModel: OnboardingViewModel by viewModels() + private val recordingViewModel: RecordingViewModel by viewModels() + private val settingsViewModel: SettingsViewModel by viewModels() + private var storageRequestOwner = StorageRequestOwner.RECORDING private val directoryPicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { - viewModel.handleStorageResult(it.data) + when (storageRequestOwner) { + StorageRequestOwner.ONBOARDING -> onboardingViewModel.handleStorageResult(it.data) + StorageRequestOwner.RECORDING -> recordingViewModel.handleStorageResult(it.data) + } } private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { - viewModel.handlePermissionResult() + recordingViewModel.handlePermissionResult() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (intent.action == Intent.ACTION_VIEW_PERMISSION_USAGE) viewModel.showPrivacyRationale() + if (intent.action == Intent.ACTION_VIEW_PERMISSION_USAGE) mainViewModel.showPrivacyRationale() setContent { - val state by viewModel.state.collectAsStateWithLifecycle() - LaunchedEffect(viewModel) { viewModel.effects.collect(::handleEffect) } + val mainState by mainViewModel.state.collectAsStateWithLifecycle() + val onboardingState by onboardingViewModel.state.collectAsStateWithLifecycle() + val recordingState by recordingViewModel.state.collectAsStateWithLifecycle() + val settingsState by settingsViewModel.state.collectAsStateWithLifecycle() + LaunchedEffect(onboardingViewModel) { + onboardingViewModel.effects.collect(::handleOnboardingEffect) + } + LaunchedEffect(recordingViewModel) { + recordingViewModel.effects.collect(::handleRecordingEffect) + } + LaunchedEffect(settingsViewModel) { + settingsViewModel.effects.collect(::handleSettingsEffect) + } SensorBoxTheme { - SensorBoxApp(state = state, onIntent = viewModel::accept) + SensorBoxApp( + mainState = mainState, + onboardingState = onboardingState, + recordingState = recordingState, + settingsState = settingsState, + onNavigate = mainViewModel::navigate, + onOnboardingIntent = onboardingViewModel::accept, + onRecordingIntent = recordingViewModel::accept, + onSettingsIntent = settingsViewModel::accept, + ) } } } - private fun handleEffect(effect: MainEffect) { + private fun handleOnboardingEffect(effect: OnboardingEffect) { when (effect) { - MainEffect.PickStorageDirectory -> appResult(AppError.Kind.EXTERNAL_ACTION, "Open storage picker") { - directoryPicker.launch(storageIntent()) - } - - MainEffect.OpenPrivacyPolicy -> openWebPage(getString(R.string.link_privacy_policy)) - - MainEffect.OpenTermsOfUse -> openWebPage(getString(R.string.link_terms)) - - MainEffect.RequestBatteryOptimizationExemption -> requestBatteryOptimizationExemption() + OnboardingEffect.PickStorageDirectory -> openStoragePicker(StorageRequestOwner.ONBOARDING) + OnboardingEffect.OpenPrivacyPolicy -> openWebPage(getString(R.string.link_privacy_policy)) + OnboardingEffect.OpenTermsOfUse -> openWebPage(getString(R.string.link_terms)) + OnboardingEffect.RequestBatteryOptimizationExemption -> requestBatteryOptimizationExemption() + is OnboardingEffect.Navigate -> mainViewModel.navigate(effect.route) + } + } - MainEffect.ShareDiagnosticsText -> shareDiagnosticsText() + private fun handleRecordingEffect(effect: RecordingEffect) { + when (effect) { + RecordingEffect.PickStorageDirectory -> openStoragePicker(StorageRequestOwner.RECORDING) - MainEffect.ShareDiagnosticsFile -> shareDiagnosticsFile() + is RecordingEffect.Navigate -> mainViewModel.navigate(effect.route) - is MainEffect.RequestPermissions -> appResult(AppError.Kind.PERMISSION, "Request app permissions") { + is RecordingEffect.RequestPermissions -> appResult(AppErrorCode.PERMISSION, "Request app permissions") { permissionRequest.launch(effect.permissions.toTypedArray()) } } } + private fun handleSettingsEffect(effect: SettingsEffect) { + when (effect) { + SettingsEffect.RequestBatteryOptimizationExemption -> requestBatteryOptimizationExemption() + SettingsEffect.ShareDiagnosticsText -> shareDiagnosticsText() + SettingsEffect.ShareDiagnosticsFile -> shareDiagnosticsFile() + is SettingsEffect.CopyDiagnosticsText -> copyDiagnostics(effect.text) + SettingsEffect.DiagnosticsCleared -> showToast(R.string.diagnostics_cleared) + is SettingsEffect.DiagnosticsFailed -> showToast(R.string.diagnostics_action_failed) + is SettingsEffect.Navigate -> mainViewModel.navigate(effect.route) + } + } + + private fun openStoragePicker(owner: StorageRequestOwner) { + storageRequestOwner = owner + appResult(AppErrorCode.EXTERNAL_ACTION, "Open storage picker") { + directoryPicker.launch(storageIntent()) + } + } + private fun openWebPage(url: String) { launchExternalIntent(Intent(Intent.ACTION_VIEW, Uri.parse(url)), "Open web page") } @@ -89,7 +146,7 @@ class MainActivity : ComponentActivity() { } private fun shareDiagnosticsText() { - AppDiagnostics.readText().fold( + diagnosticsStore.readText().fold( onSuccess = { diagnostics -> val intent = Intent(Intent.ACTION_SEND) .setType("text/plain") @@ -102,9 +159,9 @@ class MainActivity : ComponentActivity() { } private fun shareDiagnosticsFile() { - AppDiagnostics.exportFile().fold( + diagnosticsStore.exportFile().fold( onSuccess = { file -> - appResult(AppError.Kind.EXTERNAL_ACTION, "Prepare diagnostics file") { + appResult(AppErrorCode.EXTERNAL_ACTION, "Prepare diagnostics file") { val uri = FileProvider.getUriForFile(this, "$packageName.fileprovider", file) val intent = Intent(Intent.ACTION_SEND) .setType("text/plain") @@ -119,18 +176,33 @@ class MainActivity : ComponentActivity() { ) } - private fun launchShareIntent(intent: Intent): Result = + private fun launchShareIntent(intent: Intent): AppResult = launchExternalIntent(Intent.createChooser(intent, getString(R.string.diagnostics_share)), "Share diagnostics") - private fun launchExternalIntent(intent: Intent, operation: String): Result = appResult( - AppError.Kind.EXTERNAL_ACTION, + private fun launchExternalIntent(intent: Intent, operation: String): AppResult = appResult( + AppErrorCode.EXTERNAL_ACTION, operation, ) { startActivity(intent) } private fun showDiagnosticsShareFailure() { - Toast.makeText(this, R.string.diagnostics_share_failed, Toast.LENGTH_LONG).show() + showToast(R.string.diagnostics_share_failed) + } + + private fun copyDiagnostics(text: String) { + appResult(AppErrorCode.EXTERNAL_ACTION, "Copy diagnostics") { + getSystemService(ClipboardManager::class.java).setPrimaryClip( + ClipData.newPlainText(getString(R.string.diagnostics_title), text), + ) + }.fold( + onSuccess = { showToast(R.string.diagnostics_copied) }, + onFailure = { showToast(R.string.diagnostics_action_failed) }, + ) + } + + private fun showToast(message: Int) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show() } private fun storageIntent() = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply { @@ -138,4 +210,9 @@ class MainActivity : ComponentActivity() { addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION) addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) } + + private enum class StorageRequestOwner { + ONBOARDING, + RECORDING, + } } diff --git a/app/src/main/java/com/motionapps/sensorbox/di/CoroutineModule.kt b/app/src/main/java/com/motionapps/sensorbox/di/CoroutineModule.kt new file mode 100644 index 0000000..f1a2cd0 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/di/CoroutineModule.kt @@ -0,0 +1,21 @@ +package com.motionapps.sensorbox.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import javax.inject.Qualifier + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class IoDispatcher + +@Module +@InstallIn(SingletonComponent::class) +object CoroutineModule { + @Provides + @IoDispatcher + fun provideIoDispatcher(): CoroutineDispatcher = Dispatchers.IO +} diff --git a/app/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt b/app/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt new file mode 100644 index 0000000..5021b69 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt @@ -0,0 +1,47 @@ +package com.motionapps.sensorbox.di + +import android.app.Application +import android.content.Context +import android.content.pm.ApplicationInfo +import android.os.Build +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.DiagnosticMetadata +import com.motionapps.sensorbox.core.error.DiagnosticsStore +import com.motionapps.sensorbox.core.error.FileDiagnostics +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DiagnosticsModule { + @Provides + @Singleton + fun provideFileDiagnostics(@ApplicationContext context: Context): FileDiagnostics = FileDiagnostics( + context = context, + metadata = DiagnosticMetadata( + appVersion = context.packageManager.getPackageInfo(context.packageName, 0).versionName.orEmpty(), + buildType = if (context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { + "debug" + } else { + "release" + }, + deviceModel = Build.MODEL, + androidVersion = Build.VERSION.RELEASE, + processName = if (Build.VERSION.SDK_INT >= 28) { + Application.getProcessName() + } else { + context.applicationInfo.processName + }, + ), + ) + + @Provides + fun provideDiagnosticLogger(diagnostics: FileDiagnostics): DiagnosticLogger = diagnostics + + @Provides + fun provideDiagnosticsStore(diagnostics: FileDiagnostics): DiagnosticsStore = diagnostics +} diff --git a/app/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt b/app/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt new file mode 100644 index 0000000..64ed633 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt @@ -0,0 +1,34 @@ +package com.motionapps.sensorbox.di + +import com.motionapps.sensorbox.domain.measurement.AndroidPhoneRecordingController +import com.motionapps.sensorbox.domain.measurement.AndroidRecordingWorkflowGateway +import com.motionapps.sensorbox.domain.measurement.DocumentStorageGateway +import com.motionapps.sensorbox.domain.measurement.DocumentStorageUseCase +import com.motionapps.sensorbox.domain.measurement.PhoneRecordingController +import com.motionapps.sensorbox.domain.measurement.RecordingWorkflowGateway +import com.motionapps.sensorbox.domain.paired.PhoneWearCommandHandler +import com.motionapps.sensorbox.domain.paired.PhoneWearCommandPolicy +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class RecordingModule { + @Binds + abstract fun bindPhoneRecordingController( + implementation: AndroidPhoneRecordingController, + ): PhoneRecordingController + + @Binds + abstract fun bindRecordingWorkflowGateway( + implementation: AndroidRecordingWorkflowGateway, + ): RecordingWorkflowGateway + + @Binds + abstract fun bindDocumentStorageGateway(implementation: DocumentStorageUseCase): DocumentStorageGateway + + @Binds + abstract fun bindPhoneWearCommandPolicy(implementation: PhoneWearCommandHandler): PhoneWearCommandPolicy +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/DocumentStorageUseCase.kt b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/DocumentStorageUseCase.kt index 43e0da3..dfb35f7 100644 --- a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/DocumentStorageUseCase.kt +++ b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/DocumentStorageUseCase.kt @@ -2,16 +2,26 @@ package com.motionapps.sensorbox.domain.measurement import android.content.Context import android.content.Intent +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.storage.NativeDocumentStorage import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject -class DocumentStorageUseCase @Inject constructor(@ApplicationContext private val context: Context) { - fun hasStorage(): Result = NativeDocumentStorage.hasAppDirectory(context, APP_DIRECTORY) +interface DocumentStorageGateway { + fun hasStorage(): AppResult - fun displayPath(): Result = NativeDocumentStorage.displayPath(context, APP_DIRECTORY) + fun displayPath(): AppResult - fun persist(resultIntent: Intent): Result = + fun persist(resultIntent: Intent): AppResult +} + +class DocumentStorageUseCase @Inject constructor(@ApplicationContext private val context: Context) : + DocumentStorageGateway { + override fun hasStorage(): AppResult = NativeDocumentStorage.hasAppDirectory(context, APP_DIRECTORY) + + override fun displayPath(): AppResult = NativeDocumentStorage.displayPath(context, APP_DIRECTORY) + + override fun persist(resultIntent: Intent): AppResult = NativeDocumentStorage.persistRootAccess(context, resultIntent, APP_DIRECTORY) private companion object { diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/MeasurementControlUseCase.kt b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/MeasurementControlUseCase.kt index 5b0f52a..c548fb9 100644 --- a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/MeasurementControlUseCase.kt +++ b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/MeasurementControlUseCase.kt @@ -1,114 +1,18 @@ package com.motionapps.sensorbox.domain.measurement -import android.content.Context -import android.content.Intent -import android.hardware.SensorManager -import androidx.core.content.ContextCompat -import com.motionapps.sensorbox.core.error.AppError -import com.motionapps.sensorbox.core.error.appResult -import com.motionapps.sensorbox.core.error.flatMap -import com.motionapps.sensorbox.core.error.suspendFlatMap -import com.motionapps.sensorbox.core.error.withAppError -import com.motionapps.sensorbox.core.storage.NativeDocumentStorage -import com.motionapps.sensorservices.intent.MeasurementIntentFactory -import com.motionapps.sensorservices.intent.MeasurementLaunchRequest -import com.motionapps.sensorservices.services.MeasurementService -import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY -import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH -import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase -import com.motionapps.wearoslib.protocol.WearCommand -import com.motionapps.wearoslib.protocol.WearCommandCodec -import dagger.hilt.android.qualifiers.ApplicationContext +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.domain.paired.PairedRecordingCoordinator +import com.motionapps.wearoslib.protocol.WearStopReason import javax.inject.Inject class MeasurementControlUseCase @Inject constructor( - @ApplicationContext private val context: Context, - private val intentFactory: MeasurementIntentFactory, - private val sendWearMessage: SendWearMessageUseCase, + private val pairedRecordingCoordinator: PairedRecordingCoordinator, + private val localController: PhoneRecordingController, ) { - suspend fun start(request: MeasurementRequest): Result = - NativeDocumentStorage.hasAppDirectory(context, APP_DIRECTORY).suspendFlatMap { storageReady -> - if (!storageReady) { - return@suspendFlatMap Result.failure( - AppError(AppError.Kind.STORAGE, "Storage directory is not configured"), - ) - } - val launchRequest = request.toLaunchRequest() - val remoteStart = if (request.wearSensorIds.isNotEmpty() || request.wearIncludesGps) { - WearCommandCodec.encode( - WearCommand.StartMeasurement( - folderName = launchRequest.folderName, - sensorIds = request.wearSensorIds.toList(), - includesGps = request.wearIncludesGps, - startAtEpochMillis = launchRequest.startAtEpochMillis, - durationMillis = launchRequest.durationMillis, - measurementType = launchRequest.measurementType, - ), - ).suspendFlatMap { payload -> - sendWearMessage(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, payload) - } - } else { - Result.success(Unit) - } - remoteStart.flatMap { - appResult(AppError.Kind.MEASUREMENT, "Launch measurement service") { - ContextCompat.startForegroundService(context, intentFactory.create(launchRequest)) - Unit - } - } - }.withAppError(AppError.Kind.MEASUREMENT, "Request measurement start") + suspend fun start(request: MeasurementRequest): AppResult = pairedRecordingCoordinator.start(request) - fun stop(): Result = appResult(AppError.Kind.MEASUREMENT, "Request measurement stop") { - val stopIntent = Intent(context, MeasurementService::class.java) - .setAction(MeasurementService.ACTION_STOP) - context.startService(stopIntent) - } + suspend fun stop(): AppResult = pairedRecordingCoordinator.stop(WearStopReason.USER_REQUEST) - fun annotate(text: String, timestampMillis: Long = System.currentTimeMillis()): Result = appResult( - AppError.Kind.MEASUREMENT, - "Request measurement annotation", - ) { - val intent = Intent(context, MeasurementService::class.java) - .setAction(MeasurementService.ACTION_ANNOTATE) - .putExtra(MeasurementService.ANNOTATION_TIME, timestampMillis) - .putExtra(MeasurementService.ANNOTATION_TEXT, text) - context.startService(intent) - } - - private fun MeasurementRequest.toLaunchRequest(): MeasurementLaunchRequest = MeasurementLaunchRequest( - folderName = intentFactory.newFolderName(customName, measurementType), - useInternalStorage = false, - sensorIds = sensorIds, - sensorSamplingPeriod = samplingPeriod(samplingPeriodIndex), - includesGps = includesGps, - stopOnLowBattery = stopOnLowBattery, - useWakeLock = useWakeLock, - gpsIntervalSeconds = gpsIntervalSeconds, - gpsMinDistanceMeters = gpsMinDistanceMeters, - measurementType = measurementType, - startAtEpochMillis = System.currentTimeMillis() + delaySeconds.coerceAtLeast(0) * 1_000L + - if (wearSensorIds.isNotEmpty() || wearIncludesGps) WEAR_START_LEAD_MILLIS else 0L, - durationMillis = durationSeconds.coerceAtLeast(0) * 1_000L, - notes = notes, - alarmOffsetsSeconds = alarmOffsetsSeconds, - activityRecognition = activityRecognition, - activityRecognitionPeriodSeconds = activityRecognitionPeriodSeconds, - significantMotion = significantMotion, - controlsWearMeasurement = wearSensorIds.isNotEmpty() || wearIncludesGps, - ) - - private fun samplingPeriod(index: Int): Int = SENSOR_PERIODS.getOrElse(index) { - SensorManager.SENSOR_DELAY_FASTEST - } - - private companion object { - const val APP_DIRECTORY = "SensorBox" - val SENSOR_PERIODS = intArrayOf( - SensorManager.SENSOR_DELAY_FASTEST, - SensorManager.SENSOR_DELAY_GAME, - SensorManager.SENSOR_DELAY_UI, - SensorManager.SENSOR_DELAY_NORMAL, - ) - const val WEAR_START_LEAD_MILLIS = 1_000L - } + fun annotate(text: String, timestampMillis: Long = System.currentTimeMillis()): AppResult = + localController.annotate(text, timestampMillis) } diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/PhoneRecordingController.kt b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/PhoneRecordingController.kt new file mode 100644 index 0000000..74f3d51 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/PhoneRecordingController.kt @@ -0,0 +1,132 @@ +package com.motionapps.sensorbox.domain.measurement + +import android.content.Context +import android.content.Intent +import android.hardware.SensorManager +import androidx.core.content.ContextCompat +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.appResult +import com.motionapps.sensorbox.core.error.flatMap +import com.motionapps.sensorbox.core.storage.NativeDocumentStorage +import com.motionapps.sensorservices.intent.MeasurementIntentFactory +import com.motionapps.sensorservices.intent.MeasurementLaunchRequest +import com.motionapps.sensorservices.services.MeasurementService +import com.motionapps.wearoslib.protocol.WearStopReason +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject +import javax.inject.Singleton + +data class PreparedPhoneRecording(val sessionId: String, val launchRequest: MeasurementLaunchRequest) + +interface PhoneRecordingController { + suspend fun prepare(sessionId: String, request: MeasurementRequest): AppResult + + fun commit(prepared: PreparedPhoneRecording, startAtEpochMillis: Long): AppResult + + fun abort(sessionId: String): AppResult + + fun stop(sessionId: String, reason: WearStopReason): AppResult + + fun stopAny(reason: WearStopReason): AppResult + + fun annotate(text: String, timestampMillis: Long): AppResult +} + +@Singleton +class AndroidPhoneRecordingController @Inject constructor( + @ApplicationContext private val context: Context, + private val intentFactory: MeasurementIntentFactory, +) : PhoneRecordingController { + private val committedSessions = mutableSetOf() + + override suspend fun prepare(sessionId: String, request: MeasurementRequest): AppResult = + NativeDocumentStorage + .hasAppDirectory(context, APP_DIRECTORY) + .flatMap { storageReady -> + if (!storageReady) { + AppResult.failure(AppError(AppErrorCode.STORAGE, "Prepare phone recording storage")) + } else { + AppResult.success( + PreparedPhoneRecording( + sessionId = sessionId, + launchRequest = request.toLaunchRequest(sessionId), + ), + ) + } + } + + override fun commit(prepared: PreparedPhoneRecording, startAtEpochMillis: Long): AppResult = appResult( + AppErrorCode.MEASUREMENT, + "Commit phone recording", + ) { + val launchRequest = prepared.launchRequest.copy(startAtEpochMillis = startAtEpochMillis) + ContextCompat.startForegroundService(context, intentFactory.create(launchRequest)) + synchronized(committedSessions) { committedSessions += prepared.sessionId } + } + + override fun abort(sessionId: String): AppResult { + val wasCommitted = synchronized(committedSessions) { committedSessions.remove(sessionId) } + return if (wasCommitted) stopService("Abort phone recording") else AppResult.success(Unit) + } + + override fun stop(sessionId: String, reason: WearStopReason): AppResult { + synchronized(committedSessions) { committedSessions.remove(sessionId) } + return stopService("Stop phone recording") + } + + override fun stopAny(reason: WearStopReason): AppResult = stopService("Stop phone recording") + + override fun annotate(text: String, timestampMillis: Long): AppResult = appResult( + AppErrorCode.MEASUREMENT, + "Request measurement annotation", + ) { + val intent = Intent(context, MeasurementService::class.java) + .setAction(MeasurementService.ACTION_ANNOTATE) + .putExtra(MeasurementService.ANNOTATION_TIME, timestampMillis) + .putExtra(MeasurementService.ANNOTATION_TEXT, text) + context.startService(intent) + } + + private fun stopService(operation: String): AppResult = appResult(AppErrorCode.MEASUREMENT, operation) { + val stopIntent = Intent(context, MeasurementService::class.java) + .setAction(MeasurementService.ACTION_STOP) + context.startService(stopIntent) + } + + private fun MeasurementRequest.toLaunchRequest(sessionId: String): MeasurementLaunchRequest = + MeasurementLaunchRequest( + sessionId = sessionId, + folderName = intentFactory.newFolderName(customName, measurementType), + useInternalStorage = false, + sensorIds = sensorIds, + sensorSamplingPeriod = samplingPeriod(samplingPeriodIndex), + includesGps = includesGps, + stopOnLowBattery = stopOnLowBattery, + useWakeLock = useWakeLock, + gpsIntervalSeconds = gpsIntervalSeconds, + gpsMinDistanceMeters = gpsMinDistanceMeters, + measurementType = measurementType, + durationMillis = durationSeconds.coerceAtLeast(0) * 1_000L, + notes = notes, + alarmOffsetsSeconds = alarmOffsetsSeconds, + activityRecognition = activityRecognition, + activityRecognitionPeriodSeconds = activityRecognitionPeriodSeconds, + significantMotion = significantMotion, + ) + + private fun samplingPeriod(index: Int): Int = SENSOR_PERIODS.getOrElse(index) { + SensorManager.SENSOR_DELAY_FASTEST + } + + private companion object { + const val APP_DIRECTORY = "SensorBox" + val SENSOR_PERIODS = intArrayOf( + SensorManager.SENSOR_DELAY_FASTEST, + SensorManager.SENSOR_DELAY_GAME, + SensorManager.SENSOR_DELAY_UI, + SensorManager.SENSOR_DELAY_NORMAL, + ) + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/measurement/RecordingWorkflowGateway.kt b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/RecordingWorkflowGateway.kt new file mode 100644 index 0000000..bf29acf --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/measurement/RecordingWorkflowGateway.kt @@ -0,0 +1,53 @@ +package com.motionapps.sensorbox.domain.measurement + +import android.content.Intent +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.domain.sensors.GetAvailableSensorsUseCase +import com.motionapps.sensorbox.domain.sensors.SensorDescriptor +import javax.inject.Inject + +interface RecordingWorkflowGateway { + fun sensors(): List + + fun storagePath(): String? + + fun hasStorage(): Boolean + + fun persistStorage(resultIntent: Intent?): AppResult + + fun missingPermissions(request: MeasurementRequest, includesHeartRate: Boolean): Set + + suspend fun start(request: MeasurementRequest): AppResult + + suspend fun stop(): AppResult + + fun annotate(text: String): AppResult +} + +class AndroidRecordingWorkflowGateway @Inject constructor( + private val getAvailableSensors: GetAvailableSensorsUseCase, + private val documentStorage: DocumentStorageUseCase, + private val measurementPermissions: MeasurementPermissionUseCase, + private val measurementControl: MeasurementControlUseCase, +) : RecordingWorkflowGateway { + override fun sensors(): List = getAvailableSensors() + + override fun storagePath(): String? = documentStorage.displayPath().getOrNull() + + override fun hasStorage(): Boolean = documentStorage.hasStorage().getOrNull() == true + + override fun persistStorage(resultIntent: Intent?): AppResult = resultIntent + ?.let(documentStorage::persist) + ?: AppResult.failure(AppError(AppErrorCode.STORAGE, "Select recording storage directory")) + + override fun missingPermissions(request: MeasurementRequest, includesHeartRate: Boolean): Set = + measurementPermissions.missingPermissions(request, includesHeartRate) + + override suspend fun start(request: MeasurementRequest): AppResult = measurementControl.start(request) + + override suspend fun stop(): AppResult = measurementControl.stop() + + override fun annotate(text: String): AppResult = measurementControl.annotate(text) +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinator.kt b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinator.kt new file mode 100644 index 0000000..9f3b070 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinator.kt @@ -0,0 +1,265 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.combineAppResults +import com.motionapps.sensorbox.core.error.toDiagnosticEvent +import com.motionapps.sensorbox.domain.measurement.MeasurementRequest +import com.motionapps.sensorbox.domain.measurement.PhoneRecordingController +import com.motionapps.sensorbox.domain.measurement.PreparedPhoneRecording +import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY +import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.SendWearCommandUseCase +import com.motionapps.wearoslib.protocol.WearAcknowledgementOutcome +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearRecordingRequest +import com.motionapps.wearoslib.protocol.WearSessionCommand +import com.motionapps.wearoslib.protocol.WearStopReason +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withTimeoutOrNull +import java.util.UUID +import javax.inject.Inject +import javax.inject.Singleton + +data class PairedRecordingSession(val sessionId: String, val controlsWear: Boolean) + +class RecordingSessionIdFactory @Inject constructor() { + fun create(): String = UUID.randomUUID().toString() +} + +@Singleton +class PairedRecordingCoordinator @Inject constructor( + private val localController: PhoneRecordingController, + private val sendCommand: SendWearCommandUseCase, + private val acknowledgementInbox: WearAcknowledgementInbox, + private val sessionIdFactory: RecordingSessionIdFactory, + private val diagnosticLogger: DiagnosticLogger, +) { + private val mutex = Mutex() + private val mutableSession = MutableStateFlow(null) + + val session: StateFlow = mutableSession.asStateFlow() + + suspend fun start(request: MeasurementRequest): AppResult = mutex.withLock { + if (mutableSession.value != null) return@withLock conflict("Start recording") + val sessionId = sessionIdFactory.create() + when (val preparation = prepareBoth(sessionId, request)) { + is AppResult.Failure -> record(preparation) + + is AppResult.Success -> when (val commit = commitBoth(preparation.value, request)) { + is AppResult.Failure -> record(commit) + + is AppResult.Success -> { + mutableSession.value = PairedRecordingSession(sessionId, preparation.value.controlsWear) + AppResult.success(Unit) + } + } + } + } + + private suspend fun prepareBoth(sessionId: String, request: MeasurementRequest): AppResult = + when (val local = localController.prepare(sessionId, request)) { + is AppResult.Failure -> local + is AppResult.Success -> prepareWearIfNeeded(sessionId, request, local.value) + } + + private suspend fun prepareWearIfNeeded( + sessionId: String, + request: MeasurementRequest, + prepared: PreparedPhoneRecording, + ): AppResult { + val controlsWear = request.wearSensorIds.isNotEmpty() || request.wearIncludesGps + if (!controlsWear) return AppResult.success(PairedPreparation(prepared, controlsWear = false)) + val result = exchange( + command = WearCommand.PrepareRecording(sessionId, prepared.toWearRequest(request)), + expected = WearSessionCommand.PREPARE, + timeoutMillis = PREPARE_TIMEOUT_MILLIS, + ) + return when (result) { + is AppResult.Success -> AppResult.success(PairedPreparation(prepared, controlsWear = true)) + + is AppResult.Failure -> { + compensate(sessionId, prepared, localWasCommitted = false) + result + } + } + } + + private suspend fun commitBoth(preparation: PairedPreparation, request: MeasurementRequest): AppResult { + val sessionId = preparation.prepared.sessionId + val startAtEpochMillis = System.currentTimeMillis() + request.delaySeconds.coerceAtLeast(0) * 1_000L + + if (preparation.controlsWear) PAIRED_START_LEAD_MILLIS else 0L + val local = localController.commit(preparation.prepared, startAtEpochMillis) + if (local is AppResult.Failure) { + if (preparation.controlsWear) compensate(sessionId, preparation.prepared, localWasCommitted = false) + return local + } + if (!preparation.controlsWear) return AppResult.success(Unit) + val remote = exchange( + command = WearCommand.CommitRecording(sessionId, startAtEpochMillis), + expected = WearSessionCommand.COMMIT, + timeoutMillis = COMMIT_TIMEOUT_MILLIS, + ) + if (remote is AppResult.Failure) { + compensate(sessionId, preparation.prepared, localWasCommitted = true) + } + return remote + } + + suspend fun stop(reason: WearStopReason = WearStopReason.USER_REQUEST): AppResult = mutex.withLock { + val active = mutableSession.value + ?: return@withLock localController.stopAny(reason).onFailure { record(it) } + val localStop = localController.stop(active.sessionId, reason) + val remoteStop = if (active.controlsWear) { + exchange( + command = WearCommand.StopRecording(active.sessionId, reason), + expected = WearSessionCommand.STOP, + timeoutMillis = COMMIT_TIMEOUT_MILLIS, + ) + } else { + AppResult.success(Unit) + } + mutableSession.value = null + listOf(localStop, remoteStop) + .combineAppResults(AppErrorCode.MEASUREMENT, "Stop paired recording") + .onFailure { record(it) } + } + + suspend fun onAutomaticLocalStop(sessionId: String, reason: WearStopReason): AppResult = mutex.withLock { + val active = mutableSession.value + if (active?.sessionId != sessionId) return@withLock AppResult.success(Unit) + val remoteStop = if (active.controlsWear) { + exchange( + command = WearCommand.StopRecording(active.sessionId, reason), + expected = WearSessionCommand.STOP, + timeoutMillis = COMMIT_TIMEOUT_MILLIS, + ) + } else { + AppResult.success(Unit) + } + mutableSession.value = null + remoteStop.onFailure { record(it) } + } + + suspend fun stopFromPeer(sessionId: String, reason: WearStopReason): AppResult = mutex.withLock { + val result = localController.stop(sessionId, reason) + if (mutableSession.value?.sessionId == sessionId) mutableSession.value = null + result.onFailure { record(it) } + } + + private suspend fun exchange( + command: WearCommand, + expected: WearSessionCommand, + timeoutMillis: Long, + ): AppResult { + val sessionId = command.sessionId() + acknowledgementInbox.clear(sessionId, expected) + var lastSendError: AppError? = null + repeat(ATTEMPT_COUNT) { retryCount -> + when (val sent = sendCommand(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, command)) { + is AppResult.Failure -> lastSendError = sent.error + + is AppResult.Success -> { + lastSendError = null + val acknowledgement = withTimeoutOrNull(timeoutMillis / ATTEMPT_COUNT) { + acknowledgementInbox.await(sessionId, expected) + } + if (acknowledgement != null) return acknowledgement.toResult(retryCount) + } + } + } + return lastSendError?.let { error -> AppResult.failure(error) } ?: AppResult.failure( + AppError( + code = AppErrorCode.TIMEOUT, + operation = "Await Wear $expected acknowledgement", + diagnosticMessage = "Wear $expected acknowledgement timed out", + context = mapOf( + "sessionId" to sessionId, + "retryCount" to RETRY_COUNT.toString(), + "protocolVersion" to "2", + ), + isRetryable = true, + ), + ) + } + + private suspend fun compensate(sessionId: String, prepared: PreparedPhoneRecording, localWasCommitted: Boolean) { + if (localWasCommitted) localController.abort(prepared.sessionId) else localController.abort(sessionId) + exchange( + command = WearCommand.AbortRecording(sessionId), + expected = WearSessionCommand.ABORT, + timeoutMillis = COMMIT_TIMEOUT_MILLIS, + ) + } + + private fun PreparedPhoneRecording.toWearRequest(request: MeasurementRequest) = WearRecordingRequest( + folderName = launchRequest.folderName, + sensorIds = request.wearSensorIds.sorted(), + includesGps = request.wearIncludesGps, + durationMillis = launchRequest.durationMillis, + measurementType = launchRequest.measurementType, + ) + + private fun WearCommand.Acknowledgement.toResult(retryCount: Int): AppResult = + if (outcome == WearAcknowledgementOutcome.SUCCEEDED) { + AppResult.success(Unit) + } else { + AppResult.failure( + AppError( + code = errorCode ?: AppErrorCode.UNKNOWN, + operation = "Handle Wear $command acknowledgement", + diagnosticMessage = "Wear $command acknowledgement was $outcome", + context = mapOf( + "sessionId" to sessionId, + "retryCount" to retryCount.toString(), + "failureCount" to failureCount.toString(), + "protocolVersion" to "2", + ), + ), + ) + } + + private fun WearCommand.sessionId(): String = when (this) { + is WearCommand.PrepareRecording -> sessionId + + is WearCommand.CommitRecording -> sessionId + + is WearCommand.AbortRecording -> sessionId + + is WearCommand.StopRecording -> sessionId + + is WearCommand.Acknowledgement -> sessionId + + WearCommand.LaunchPhone, + WearCommand.SyncMeasurements, + WearCommand.RequestSensorList, + is WearCommand.SensorList, + -> error("Wear command has no recording session") + } + + private fun conflict(operation: String): AppResult = AppResult.failure( + AppError(AppErrorCode.CONFLICT, operation), + ) + + private fun record(result: AppResult): AppResult = result.onFailure { record(it) } + + private fun record(error: AppError) { + diagnosticLogger.record(error.toDiagnosticEvent()) + } + + private data class PairedPreparation(val prepared: PreparedPhoneRecording, val controlsWear: Boolean) + + private companion object { + const val PREPARE_TIMEOUT_MILLIS = 10_000L + const val COMMIT_TIMEOUT_MILLIS = 5_000L + const val PAIRED_START_LEAD_MILLIS = 6_000L + const val RETRY_COUNT = 2 + const val ATTEMPT_COUNT = RETRY_COUNT + 1 + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneRecordingSessionObserver.kt b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneRecordingSessionObserver.kt new file mode 100644 index 0000000..2b0a5ab --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneRecordingSessionObserver.kt @@ -0,0 +1,49 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.toDiagnosticEvent +import com.motionapps.sensorservices.session.MeasurementSessionEvent +import com.motionapps.sensorservices.session.MeasurementSessionStore +import com.motionapps.sensorservices.session.MeasurementStopReason +import com.motionapps.wearoslib.protocol.WearStopReason +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicBoolean +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class PhoneRecordingSessionObserver @Inject constructor( + private val sessionStore: MeasurementSessionStore, + private val pairedRecordingCoordinator: PairedRecordingCoordinator, + private val diagnosticLogger: DiagnosticLogger, +) { + private val started = AtomicBoolean(false) + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + + fun start() { + if (!started.compareAndSet(false, true)) return + scope.launch { + sessionStore.events.collect { event -> + if (event is MeasurementSessionEvent.Stopped) onStopped(event) + } + } + } + + private suspend fun onStopped(event: MeasurementSessionEvent.Stopped) { + event.result.errorOrNull()?.let { error -> diagnosticLogger.record(error.toDiagnosticEvent()) } + val reason = event.reason.toAutomaticWearReason() ?: return + pairedRecordingCoordinator.onAutomaticLocalStop(event.sessionId, reason) + } + + private fun MeasurementStopReason.toAutomaticWearReason(): WearStopReason? = when (this) { + MeasurementStopReason.USER_REQUEST -> null + MeasurementStopReason.DURATION_EXPIRED -> WearStopReason.DURATION_EXPIRED + MeasurementStopReason.LOW_BATTERY -> WearStopReason.LOW_BATTERY + MeasurementStopReason.SOURCE_FAILURE -> WearStopReason.SOURCE_FAILURE + MeasurementStopReason.SERVICE_DESTROYED -> WearStopReason.SERVICE_DESTROYED + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearCommandHandler.kt b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearCommandHandler.kt new file mode 100644 index 0000000..bc900e7 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearCommandHandler.kt @@ -0,0 +1,77 @@ +package com.motionapps.sensorbox.domain.paired + +import android.content.Context +import android.content.Intent +import com.motionapps.sensorbox.activities.MainActivity +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.appResult +import com.motionapps.sensorbox.domain.sensors.WearSensorCatalogStore +import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY +import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.SendWearCommandUseCase +import com.motionapps.wearoslib.protocol.WearAcknowledgementOutcome +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearSessionCommand +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject + +fun interface PhoneWearCommandPolicy { + suspend fun handle(command: WearCommand): AppResult +} + +class PhoneWearCommandHandler @Inject constructor( + @ApplicationContext private val context: Context, + private val wearSensorCatalog: WearSensorCatalogStore, + private val acknowledgementInbox: WearAcknowledgementInbox, + private val pairedRecordingCoordinator: PairedRecordingCoordinator, + private val sendCommand: SendWearCommandUseCase, +) : PhoneWearCommandPolicy { + override suspend fun handle(command: WearCommand): AppResult = when (command) { + WearCommand.LaunchPhone -> launchPhone() + + is WearCommand.SensorList -> { + wearSensorCatalog.update(command.sensors) + AppResult.success(Unit) + } + + is WearCommand.Acknowledgement -> { + acknowledgementInbox.publish(command) + AppResult.success(Unit) + } + + is WearCommand.StopRecording -> stopFromWear(command) + + WearCommand.RequestSensorList, + WearCommand.SyncMeasurements, + is WearCommand.PrepareRecording, + is WearCommand.CommitRecording, + is WearCommand.AbortRecording, + -> AppResult.failure(AppError(AppErrorCode.VALIDATION, "Handle unsupported phone Wear command")) + } + + private fun launchPhone(): AppResult = appResult(AppErrorCode.EXTERNAL_ACTION, "Launch phone app from Wear") { + context.startActivity( + Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + }, + ) + } + + private suspend fun stopFromWear(command: WearCommand.StopRecording): AppResult { + val stopResult = pairedRecordingCoordinator.stopFromPeer(command.sessionId, command.reason) + val acknowledgement = WearCommand.Acknowledgement( + sessionId = command.sessionId, + command = WearSessionCommand.STOP, + outcome = if (stopResult.isSuccess) { + WearAcknowledgementOutcome.SUCCEEDED + } else { + WearAcknowledgementOutcome.FAILED + }, + errorCode = stopResult.errorOrNull()?.code, + failureCount = if (stopResult.isFailure) 1 else 0, + ) + return sendCommand(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, acknowledgement) + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcher.kt b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcher.kt new file mode 100644 index 0000000..720553d --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcher.kt @@ -0,0 +1,21 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.suspendFlatMap +import com.motionapps.sensorbox.core.error.toDiagnosticEvent +import com.motionapps.wearoslib.WearOsConstants.PHONE_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.WearCommandCodec +import javax.inject.Inject + +class PhoneWearMessageDispatcher @Inject constructor( + private val commandHandler: PhoneWearCommandPolicy, + private val diagnosticLogger: DiagnosticLogger, +) { + suspend fun dispatch(path: String, payload: ByteArray): AppResult { + if (path != PHONE_MESSAGE_PATH) return AppResult.success(Unit) + return WearCommandCodec.decode(payload) + .suspendFlatMap(commandHandler::handle) + .onFailure { error -> diagnosticLogger.record(error.toDiagnosticEvent()) } + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/paired/WearAcknowledgementInbox.kt b/app/src/main/java/com/motionapps/sensorbox/domain/paired/WearAcknowledgementInbox.kt new file mode 100644 index 0000000..d8e0134 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/domain/paired/WearAcknowledgementInbox.kt @@ -0,0 +1,38 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearSessionCommand +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.first +import java.util.concurrent.ConcurrentHashMap +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class WearAcknowledgementInbox @Inject constructor() { + private val acknowledgements = ConcurrentHashMap() + private val updates = MutableSharedFlow(extraBufferCapacity = BUFFER_SIZE) + + fun publish(acknowledgement: WearCommand.Acknowledgement) { + acknowledgements[acknowledgement.key()] = acknowledgement + updates.tryEmit(acknowledgement) + } + + fun clear(sessionId: String, command: WearSessionCommand) { + acknowledgements.remove(Key(sessionId, command)) + } + + suspend fun await(sessionId: String, command: WearSessionCommand): WearCommand.Acknowledgement { + val key = Key(sessionId, command) + acknowledgements[key]?.let { return it } + return updates.first { acknowledgement -> acknowledgement.key() == key } + } + + private fun WearCommand.Acknowledgement.key() = Key(sessionId, command) + + private data class Key(val sessionId: String, val command: WearSessionCommand) + + private companion object { + const val BUFFER_SIZE = 32 + } +} diff --git a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearSensorCatalogStore.kt b/app/src/main/java/com/motionapps/sensorbox/domain/sensors/WearSensorCatalogStore.kt similarity index 86% rename from WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearSensorCatalogStore.kt rename to app/src/main/java/com/motionapps/sensorbox/domain/sensors/WearSensorCatalogStore.kt index 55c2e72..97ea697 100644 --- a/WearOsLib/src/main/java/com/motionapps/wearoslib/protocol/WearSensorCatalogStore.kt +++ b/app/src/main/java/com/motionapps/sensorbox/domain/sensors/WearSensorCatalogStore.kt @@ -1,5 +1,6 @@ -package com.motionapps.wearoslib.protocol +package com.motionapps.sensorbox.domain.sensors +import com.motionapps.wearoslib.protocol.WearSensorInfo import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/sync/ReceiveWearFileUseCase.kt b/app/src/main/java/com/motionapps/sensorbox/domain/sync/ReceiveWearFileUseCase.kt index fae65d8..b36512a 100644 --- a/app/src/main/java/com/motionapps/sensorbox/domain/sync/ReceiveWearFileUseCase.kt +++ b/app/src/main/java/com/motionapps/sensorbox/domain/sync/ReceiveWearFileUseCase.kt @@ -2,6 +2,8 @@ package com.motionapps.sensorbox.domain.sync import com.google.android.gms.wearable.ChannelClient import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.flatMap import com.motionapps.sensorbox.core.error.suspendFlatMap import com.motionapps.wearoslib.files.WearFilePathCodec @@ -12,14 +14,14 @@ class ReceiveWearFileUseCase @Inject constructor( private val transferClient: WearFileTransferClient, private val destination: WearFileDestination, ) { - suspend operator fun invoke(channel: ChannelClient.Channel): Result = + suspend operator fun invoke(channel: ChannelClient.Channel): AppResult = WearFilePathCodec.decode(channel.path).suspendFlatMap { metadata -> destination.isReady().flatMap { ready -> if (ready) { - Result.success(Unit) + AppResult.success(Unit) } else { - Result.failure( - AppError(AppError.Kind.STORAGE, "Receive Wear file"), + AppResult.failure( + AppError(AppErrorCode.STORAGE, "Receive Wear file"), ) } }.suspendFlatMap { diff --git a/app/src/main/java/com/motionapps/sensorbox/domain/sync/WearFileDestination.kt b/app/src/main/java/com/motionapps/sensorbox/domain/sync/WearFileDestination.kt index 88c584d..a375f56 100644 --- a/app/src/main/java/com/motionapps/sensorbox/domain/sync/WearFileDestination.kt +++ b/app/src/main/java/com/motionapps/sensorbox/domain/sync/WearFileDestination.kt @@ -3,6 +3,8 @@ package com.motionapps.sensorbox.domain.sync import android.content.Context import android.content.pm.ApplicationInfo import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap import com.motionapps.sensorbox.core.storage.NativeDocumentStorage @@ -15,11 +17,14 @@ import javax.inject.Singleton @Singleton class WearFileDestination @Inject constructor(@ApplicationContext private val context: Context) { - fun isReady(): Result = hasConfiguredDirectory().map { configured -> configured || isDebugBuild() } + fun isReady(): AppResult = hasConfiguredDirectory().map { configured -> configured || isDebugBuild() } - fun copy(metadata: WearFileMetadata, input: InputStream): Result { + fun copy(metadata: WearFileMetadata, input: InputStream): AppResult { val measurementName = "WEAR_${metadata.measurementName}" - val configured = hasConfiguredDirectory().getOrElse { return Result.failure(it) } + val configuredResult = hasConfiguredDirectory() + val configured = configuredResult.getOrNull() ?: return AppResult.failure( + checkNotNull(configuredResult.errorOrNull()), + ) return if (configured) { copyToConfiguredDirectory(measurementName, metadata.fileName, input) } else { @@ -27,26 +32,29 @@ class WearFileDestination @Inject constructor(@ApplicationContext private val co } } - private fun copyToConfiguredDirectory(measurementName: String, fileName: String, input: InputStream): Result = - NativeDocumentStorage.copyToMeasurement( - context = context, - input = input, - appDirectoryName = APP_DIRECTORY, - measurementName = measurementName, - fileName = fileName, - mimeType = mimeType(fileName), - ) + private fun copyToConfiguredDirectory( + measurementName: String, + fileName: String, + input: InputStream, + ): AppResult = NativeDocumentStorage.copyToMeasurement( + context = context, + input = input, + appDirectoryName = APP_DIRECTORY, + measurementName = measurementName, + fileName = fileName, + mimeType = mimeType(fileName), + ) - private fun copyToDebugDirectory(measurementName: String, fileName: String, input: InputStream): Result { - if (!isDebugBuild()) return Result.failure(AppError(AppError.Kind.STORAGE, "Copy debug Wear file")) - return appResult(AppError.Kind.STORAGE, "Prepare debug Wear directory") { + private fun copyToDebugDirectory(measurementName: String, fileName: String, input: InputStream): AppResult { + if (!isDebugBuild()) return AppResult.failure(AppError(AppErrorCode.STORAGE, "Copy debug Wear file")) + return appResult(AppErrorCode.STORAGE, "Prepare debug Wear directory") { val directory = File(context.filesDir, "$APP_DIRECTORY/$measurementName") directory to (directory.isDirectory || directory.mkdirs()) }.flatMap { (directory, ready) -> if (!ready) { - Result.failure(AppError(AppError.Kind.STORAGE, "Prepare debug Wear directory")) + AppResult.failure(AppError(AppErrorCode.STORAGE, "Prepare debug Wear directory")) } else { - appResult(AppError.Kind.STORAGE, "Copy debug Wear file") { + appResult(AppErrorCode.STORAGE, "Copy debug Wear file") { File(directory, fileName).outputStream().use(input::copyTo) Unit } @@ -54,7 +62,7 @@ class WearFileDestination @Inject constructor(@ApplicationContext private val co } } - private fun hasConfiguredDirectory(): Result = NativeDocumentStorage.hasAppDirectory( + private fun hasConfiguredDirectory(): AppResult = NativeDocumentStorage.hasAppDirectory( context, APP_DIRECTORY, ) diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/AboutScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/AboutScreen.kt index 72b3458..92c1d27 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/AboutScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/AboutScreen.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.motionapps.sensorbox.BuildConfig import com.motionapps.sensorbox.R -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode import com.motionapps.sensorbox.core.error.appResult @Composable @@ -83,7 +83,7 @@ private fun AboutDialogBody(onPrivacy: () -> Unit) { fun OpenSourceLicensesScreen(onBack: () -> Unit, modifier: Modifier = Modifier) { val resources = LocalContext.current.resources val licenses = remember(resources) { - appResult(AppError.Kind.STORAGE, "Load open source licenses") { + appResult(AppErrorCode.STORAGE, "Load open source licenses") { loadOpenSourceLicenses(resources) }.getOrDefault(emptyList()) } diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/ActiveMeasurementScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/ActiveMeasurementScreen.kt index 5b4518b..dee1240 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/ActiveMeasurementScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/ActiveMeasurementScreen.kt @@ -53,7 +53,7 @@ import com.motionapps.sensorbox.ui.theme.SensorBoxRecording import com.motionapps.sensorservices.session.MeasurementSessionState @Composable -fun ActiveMeasurementScreen(state: MainState, onIntent: (MainIntent) -> Unit, modifier: Modifier = Modifier) { +fun ActiveMeasurementScreen(state: RecordingState, onIntent: (RecordingIntent) -> Unit, modifier: Modifier = Modifier) { val session = state.session as? MeasurementSessionState.Running ?: return Column( modifier = modifier.fillMaxSize().padding(horizontal = 20.dp, vertical = 24.dp), @@ -74,14 +74,14 @@ fun ActiveMeasurementScreen(state: MainState, onIntent: (MainIntent) -> Unit, mo } SensorBoxDangerButton( label = stringResource(R.string.stop_and_save), - onClick = { onIntent(MainIntent.StopMeasurement) }, + onClick = { onIntent(RecordingIntent.StopMeasurement) }, modifier = Modifier.fillMaxWidth(), ) } } @Composable -private fun AnnotationEditor(onIntent: (MainIntent) -> Unit) { +private fun AnnotationEditor(onIntent: (RecordingIntent) -> Unit) { var annotation by remember { mutableStateOf("") } SensorBoxPanel { Column(Modifier.fillMaxWidth().padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp)) { @@ -97,7 +97,7 @@ private fun AnnotationEditor(onIntent: (MainIntent) -> Unit) { label = stringResource(R.string.add_annotation), onClick = { annotation.trim().takeIf(String::isNotEmpty)?.let { - onIntent(MainIntent.AddAnnotation(it)) + onIntent(RecordingIntent.AddAnnotation(it)) annotation = "" } }, @@ -168,7 +168,7 @@ private fun MeasurementTimer(elapsedSeconds: Long, folderName: String) { } @Composable -private fun MeasurementSummary(state: MainState, session: MeasurementSessionState.Running) { +private fun MeasurementSummary(state: RecordingState, session: MeasurementSessionState.Running) { var expanded by remember { mutableStateOf(false) } val sources = recordingSourceNames(state, session, LocalContext.current.resources) SensorBoxPanel { @@ -230,7 +230,7 @@ private fun RecordingSourceList(sources: List) { } private fun recordingSourceNames( - state: MainState, + state: RecordingState, session: MeasurementSessionState.Running, resources: Resources, ): List = buildList { diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainContract.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainContract.kt index 9b58a77..f8bfd2c 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainContract.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainContract.kt @@ -1,8 +1,6 @@ package com.motionapps.sensorbox.presentation.main import androidx.navigation3.runtime.NavKey -import com.motionapps.sensorbox.core.preferences.AppPreferences -import com.motionapps.sensorbox.domain.sensors.SensorDescriptor import com.motionapps.sensorservices.session.MeasurementSessionState import kotlinx.serialization.Serializable @@ -19,160 +17,9 @@ enum class MainRoute : NavKey { PRIVACY, } -enum class MainMessage { - NONE, - PICK_AT_LEAST_ONE_SOURCE, - STORAGE_REQUIRED, - PERMISSION_REQUIRED, - MEASUREMENT_FAILED, -} - data class MainState( val route: MainRoute = MainRoute.ONBOARDING, - val onboardingPage: Int = 0, - val sensors: List = emptyList(), - val wearSensors: List = emptyList(), - val detailsSensorType: Int? = null, - val selectedSensorIds: Set = emptySet(), - val includesGps: Boolean = false, - val selectedWearSensorIds: Set = emptySet(), - val wearIncludesGps: Boolean = false, - val customMeasurementName: String = "", - val measurementType: String = "ENDLESS", - val startDelaySeconds: Int = 0, - val durationSeconds: Int = 0, - val notes: String = "", - val alarmOffsets: String = "", - val activityRecognition: Boolean = false, - val activityRecognitionPeriodSeconds: Int = 30, - val significantMotion: Boolean = false, - val storagePath: String? = null, - val preferences: AppPreferences = AppPreferences(), - val hasLoadedPreferences: Boolean = false, val session: MeasurementSessionState = MeasurementSessionState.Idle, - val elapsedSeconds: Long = 0, - val isWearConnected: Boolean = false, - val message: MainMessage = MainMessage.NONE, + val keepScreenAwake: Boolean = false, + val hasLoadedPreferences: Boolean = false, ) - -sealed interface MainIntent { - data class Navigate(val route: MainRoute) : MainIntent - data class ToggleSensor(val sensorId: Int) : MainIntent - data class ToggleWearSensor(val sensorId: Int) : MainIntent - data class OpenSensorDetails(val sensorType: Int?) : MainIntent - data object ToggleGps : MainIntent - data object ToggleWearGps : MainIntent - data object AdvanceOnboarding : MainIntent - data object RetreatOnboarding : MainIntent - data object CompleteOnboarding : MainIntent - data object OpenPrivacyPolicy : MainIntent - data object OpenTermsOfUse : MainIntent - data object RequestBatteryOptimizationExemption : MainIntent - data object ShareDiagnosticsText : MainIntent - data object ShareDiagnosticsFile : MainIntent - data object ChooseStorage : MainIntent - data object OpenMeasurementSetup : MainIntent - data object ReturnToSensorSelection : MainIntent - data object StartMeasurement : MainIntent - data object StopMeasurement : MainIntent - data object ClearMessage : MainIntent - data class SetCustomMeasurementName(val value: String) : MainIntent - data class SetMeasurementType(val value: String) : MainIntent - data class SetStartDelay(val seconds: Int) : MainIntent - data class SetDuration(val seconds: Int) : MainIntent - data class SetNotes(val value: String) : MainIntent - data class SetAlarmOffsets(val value: String) : MainIntent - data class SetActivityRecognition(val enabled: Boolean) : MainIntent - data class SetActivityRecognitionPeriod(val seconds: Int) : MainIntent - data class SetSignificantMotion(val enabled: Boolean) : MainIntent - data class AddAnnotation(val text: String) : MainIntent - data class SetSamplingPeriod(val index: Int) : MainIntent - data class SetLowBatteryRestriction(val enabled: Boolean) : MainIntent - data class SetWakeLock(val enabled: Boolean) : MainIntent - data class SetKeepScreenAwake(val enabled: Boolean) : MainIntent - data class SetGpsInterval(val seconds: Int) : MainIntent - data class SetGpsDistance(val meters: Int) : MainIntent -} - -sealed interface MainEffect { - data object PickStorageDirectory : MainEffect - data object OpenPrivacyPolicy : MainEffect - data object OpenTermsOfUse : MainEffect - data object RequestBatteryOptimizationExemption : MainEffect - data object ShareDiagnosticsText : MainEffect - data object ShareDiagnosticsFile : MainEffect - data class RequestPermissions(val permissions: Set) : MainEffect -} - -data class MainNext(val state: MainState, val effect: MainEffect? = null) - -object MainReducer { - fun reduce(state: MainState, intent: MainIntent): MainNext = when (intent) { - MainIntent.AdvanceOnboarding -> MainNext(state.copy(onboardingPage = state.onboardingPage + 1)) - MainIntent.RetreatOnboarding -> MainNext(state.retreatOnboarding()) - is MainIntent.OpenSensorDetails -> MainNext(state.openSensorDetails(intent.sensorType)) - else -> reduceGeneralIntent(state, intent) - } - - private fun reduceGeneralIntent(state: MainState, intent: MainIntent): MainNext = when (intent) { - MainIntent.ChooseStorage -> MainNext(state, MainEffect.PickStorageDirectory) - MainIntent.ClearMessage -> MainNext(state.copy(message = MainMessage.NONE)) - MainIntent.OpenPrivacyPolicy -> MainNext(state, MainEffect.OpenPrivacyPolicy) - MainIntent.OpenTermsOfUse -> MainNext(state, MainEffect.OpenTermsOfUse) - MainIntent.RequestBatteryOptimizationExemption -> batteryOptimizationEffect(state) - MainIntent.ShareDiagnosticsText -> MainNext(state, MainEffect.ShareDiagnosticsText) - MainIntent.ShareDiagnosticsFile -> MainNext(state, MainEffect.ShareDiagnosticsFile) - MainIntent.OpenMeasurementSetup -> MainNext(state.openMeasurementSetup()) - MainIntent.ReturnToSensorSelection -> MainNext(state.returnToSensorSelection()) - else -> reduceSelectionIntent(state, intent) - } - - private fun reduceSelectionIntent(state: MainState, intent: MainIntent): MainNext = when (intent) { - MainIntent.ToggleGps -> MainNext(state.copy(includesGps = !state.includesGps)) - MainIntent.ToggleWearGps -> MainNext(state.copy(wearIncludesGps = !state.wearIncludesGps)) - is MainIntent.Navigate -> MainNext(state.copy(route = intent.route)) - is MainIntent.ToggleSensor -> MainNext(state.toggleSensor(intent.sensorId)) - is MainIntent.ToggleWearSensor -> MainNext(state.toggleWearSensor(intent.sensorId)) - else -> reduceConfigurationIntent(state, intent) - } - - private fun reduceConfigurationIntent(state: MainState, intent: MainIntent): MainNext = when (intent) { - is MainIntent.SetCustomMeasurementName -> MainNext(state.copy(customMeasurementName = intent.value)) - is MainIntent.SetMeasurementType -> MainNext(state.copy(measurementType = intent.value)) - is MainIntent.SetStartDelay -> MainNext(state.copy(startDelaySeconds = intent.seconds.coerceAtLeast(0))) - is MainIntent.SetDuration -> MainNext(state.copy(durationSeconds = intent.seconds.coerceAtLeast(0))) - is MainIntent.SetNotes -> MainNext(state.copy(notes = intent.value)) - is MainIntent.SetAlarmOffsets -> MainNext(state.copy(alarmOffsets = intent.value)) - is MainIntent.SetActivityRecognition -> MainNext(state.copy(activityRecognition = intent.enabled)) - is MainIntent.SetActivityRecognitionPeriod -> MainNext(state.withActivityPeriod(intent.seconds)) - is MainIntent.SetSignificantMotion -> MainNext(state.copy(significantMotion = intent.enabled)) - else -> MainNext(state) - } - - private fun batteryOptimizationEffect(state: MainState) = - MainNext(state, MainEffect.RequestBatteryOptimizationExemption) - - private fun MainState.retreatOnboarding() = copy(onboardingPage = (onboardingPage - 1).coerceAtLeast(0)) - - private fun MainState.openSensorDetails(sensorType: Int?) = - copy(route = MainRoute.SENSOR_DETAILS, detailsSensorType = sensorType) - - private fun MainState.openMeasurementSetup() = copy(route = MainRoute.SETUP, message = MainMessage.NONE) - - private fun MainState.returnToSensorSelection() = copy(route = MainRoute.RECORD, message = MainMessage.NONE) - - private fun MainState.toggleSensor(sensorId: Int): MainState { - val updated = selectedSensorIds.toMutableSet() - if (!updated.add(sensorId)) updated.remove(sensorId) - return copy(selectedSensorIds = updated, message = MainMessage.NONE) - } - - private fun MainState.toggleWearSensor(sensorId: Int): MainState { - val updated = selectedWearSensorIds.toMutableSet() - if (!updated.add(sensorId)) updated.remove(sensorId) - return copy(selectedWearSensorIds = updated, message = MainMessage.NONE) - } -} - -private fun MainState.withActivityPeriod(seconds: Int) = - copy(activityRecognitionPeriodSeconds = seconds.coerceAtLeast(1)) diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainViewModel.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainViewModel.kt index b92ce7c..6decf57 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainViewModel.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MainViewModel.kt @@ -1,322 +1,72 @@ package com.motionapps.sensorbox.presentation.main -import android.content.Intent -import android.os.SystemClock import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.motionapps.sensorbox.core.error.AppError -import com.motionapps.sensorbox.core.error.suspendFlatMap -import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository -import com.motionapps.sensorbox.domain.measurement.DocumentStorageUseCase -import com.motionapps.sensorbox.domain.measurement.MeasurementControlUseCase -import com.motionapps.sensorbox.domain.measurement.MeasurementPermissionUseCase -import com.motionapps.sensorbox.domain.measurement.MeasurementRequest -import com.motionapps.sensorbox.domain.sensors.GetAvailableSensorsUseCase -import com.motionapps.sensorbox.domain.sensors.SensorDescriptor -import com.motionapps.sensorservices.session.MeasurementSessionState import com.motionapps.sensorservices.session.MeasurementSessionStore -import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY -import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH -import com.motionapps.wearoslib.connectivity.ObserveWearCapabilityUseCase -import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase -import com.motionapps.wearoslib.connectivity.WearConnection -import com.motionapps.wearoslib.protocol.WearCommand -import com.motionapps.wearoslib.protocol.WearCommandCodec -import com.motionapps.wearoslib.protocol.WearSensorCatalogStore import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.Job -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.catch -import kotlinx.coroutines.flow.receiveAsFlow -import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -@Suppress("TooManyFunctions") class MainViewModel @Inject constructor( private val preferencesRepository: AppPreferencesRepository, - private val getAvailableSensors: GetAvailableSensorsUseCase, - private val documentStorage: DocumentStorageUseCase, - private val measurementPermissions: MeasurementPermissionUseCase, - private val measurementControl: MeasurementControlUseCase, private val sessionStore: MeasurementSessionStore, - private val observeWearCapability: ObserveWearCapabilityUseCase, - private val sendWearMessage: SendWearMessageUseCase, - private val wearSensorCatalog: WearSensorCatalogStore, ) : ViewModel() { - private val mutableState = MutableStateFlow(initialState()) - private val mutableEffects = Channel(Channel.BUFFERED) + private val mutableState = MutableStateFlow(MainState()) private var hasChosenInitialRoute = false - private var elapsedJob: Job? = null val state: StateFlow = mutableState.asStateFlow() - val effects = mutableEffects.receiveAsFlow() init { observePreferences() - observeMeasurementSession() - observeWearConnection() - observeWearSensors() + observeSession() } - fun accept(intent: MainIntent) { - when (intent) { - MainIntent.CompleteOnboarding -> completeOnboarding() - - MainIntent.StartMeasurement -> startMeasurement() - - MainIntent.StopMeasurement -> measurementControl.stop().showFailure() - - is MainIntent.AddAnnotation -> measurementControl.annotate(intent.text).showFailure() - - is MainIntent.SetSamplingPeriod -> updatePreference( - AppPreferencesIntent.SetSensorSamplingPeriod(intent.index), - ) - - is MainIntent.SetLowBatteryRestriction -> updatePreference( - AppPreferencesIntent.SetLowBatteryRestriction(intent.enabled), - ) - - is MainIntent.SetWakeLock -> updatePreference(AppPreferencesIntent.SetWakeLock(intent.enabled)) - - is MainIntent.SetKeepScreenAwake -> updatePreference( - AppPreferencesIntent.SetKeepPhoneDisplayOn(intent.enabled), - ) - - is MainIntent.SetGpsInterval -> updatePreference(AppPreferencesIntent.SetGpsInterval(intent.seconds)) - - is MainIntent.SetGpsDistance -> updatePreference(AppPreferencesIntent.SetGpsMinDistance(intent.meters)) - - else -> reduce(intent) - } - } - - fun handleStorageResult(resultIntent: Intent?) { - val persisted = resultIntent?.let(documentStorage::persist) ?: Result.failure( - com.motionapps.sensorbox.core.error.AppError( - com.motionapps.sensorbox.core.error.AppError.Kind.STORAGE, - "Select storage directory", - ), - ) - mutableState.value = state.value.copy( - storagePath = documentStorage.displayPath().getOrNull(), - message = if (persisted.isSuccess) MainMessage.NONE else MainMessage.STORAGE_REQUIRED, - ) - } - - fun handlePermissionResult() { - val request = state.value.toMeasurementRequest() - val missing = measurementPermissions.missingPermissions(request, state.value.includesHeartRate()) - if (missing.isEmpty()) startMeasurement() else showMessage(MainMessage.PERMISSION_REQUIRED) + fun navigate(route: MainRoute) { + hasChosenInitialRoute = true + mutableState.value = state.value.copy(route = route) } fun showPrivacyRationale() { - hasChosenInitialRoute = true - reduce(MainIntent.Navigate(MainRoute.PRIVACY)) + navigate(MainRoute.PRIVACY) } - private fun initialState() = MainState( - sensors = getAvailableSensors(), - storagePath = documentStorage.displayPath().getOrNull(), - ) - private fun observePreferences() { viewModelScope.launch { preferencesRepository.preferences.collect { result -> result.fold( onSuccess = { preferences -> - val route = initialRoute(preferences.hasCompletedIntro, preferences.hasAcceptedPolicy) + val route = if (hasChosenInitialRoute) { + state.value.route + } else if (preferences.hasCompletedIntro && preferences.hasAcceptedPolicy) { + MainRoute.RECORD + } else { + MainRoute.ONBOARDING + } + hasChosenInitialRoute = true mutableState.value = state.value.copy( - preferences = preferences, - hasLoadedPreferences = true, route = route, + keepScreenAwake = preferences.keepPhoneDisplayOn, + hasLoadedPreferences = true, ) }, onFailure = { - mutableState.value = state.value.copy( - hasLoadedPreferences = true, - message = MainMessage.MEASUREMENT_FAILED, - ) + mutableState.value = state.value.copy(hasLoadedPreferences = true) }, ) } } } - private fun initialRoute(completedIntro: Boolean, acceptedPolicy: Boolean): MainRoute { - if (hasChosenInitialRoute) return state.value.route - hasChosenInitialRoute = true - return if (completedIntro && acceptedPolicy) MainRoute.RECORD else MainRoute.ONBOARDING - } - - private fun observeMeasurementSession() { + private fun observeSession() { viewModelScope.launch { sessionStore.state.collect { session -> - onSessionChanged(session) - } - } - } - - private fun onSessionChanged(session: MeasurementSessionState) { - elapsedJob?.cancel() - mutableState.value = state.value.copy(session = session, elapsedSeconds = 0) - if (session is MeasurementSessionState.Running) startElapsedTicker(session.startedAtElapsedRealtime) - } - - private fun startElapsedTicker(startedAt: Long) { - elapsedJob = viewModelScope.launch { - while (isActive) { - val seconds = (SystemClock.elapsedRealtime() - startedAt).coerceAtLeast(0) / 1_000L - mutableState.value = state.value.copy(elapsedSeconds = seconds) - delay(1_000L) - } - } - } - - private fun observeWearConnection() { - viewModelScope.launch { - observeWearCapability(WEAR_APP_CAPABILITY) - .catch { error -> - AppError.from(AppError.Kind.CONNECTIVITY, "Observe Wear connection", error) - emit(WearConnection.Disconnected) - } - .collect { connection -> - mutableState.value = state.value.copy(isWearConnected = connection is WearConnection.Connected) - if (connection is WearConnection.Connected) { - WearCommandCodec.encode(WearCommand.RequestSensorList).suspendFlatMap { payload -> - sendWearMessage(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, payload) - } - } else { - wearSensorCatalog.clear() - } - } - } - } - - private fun observeWearSensors() { - viewModelScope.launch { - wearSensorCatalog.sensors.collect { sensors -> - mutableState.value = state.value.copy( - wearSensors = sensors.map { sensor -> - SensorDescriptor( - type = sensor.type, - name = sensor.name, - vendor = sensor.vendor, - isHeartRate = sensor.isHeartRate, - ) - }, - ) - } - } - } - - private fun reduce(intent: MainIntent) { - val next = MainReducer.reduce(state.value, intent) - mutableState.value = next.state - next.effect?.let(mutableEffects::trySend) - } - - private fun completeOnboarding() { - if (!documentStorage.hasStorage().getOrElse { - showMessage(MainMessage.STORAGE_REQUIRED) - return - } - ) { - showMessage(MainMessage.STORAGE_REQUIRED) - return - } - viewModelScope.launch { - preferencesRepository.dispatch(AppPreferencesIntent.AcceptPolicy).getOrElse { - showMessage(MainMessage.MEASUREMENT_FAILED) - return@launch - } - preferencesRepository.dispatch(AppPreferencesIntent.CompleteIntro).getOrElse { - showMessage(MainMessage.MEASUREMENT_FAILED) - return@launch + mutableState.value = state.value.copy(session = session) } - mutableState.value = state.value.copy(route = MainRoute.RECORD) } } - - @Suppress("ReturnCount") - private fun startMeasurement() { - val request = state.value.toMeasurementRequest() - if (!request.hasAnySource()) { - showMessage(MainMessage.PICK_AT_LEAST_ONE_SOURCE) - return - } - if (!documentStorage.hasStorage().getOrElse { - showMessage(MainMessage.STORAGE_REQUIRED) - return - } - ) { - reduce(MainIntent.ChooseStorage) - showMessage(MainMessage.STORAGE_REQUIRED) - return - } - requestMissingPermissions(request)?.let { - mutableEffects.trySend(MainEffect.RequestPermissions(it)) - return - } - startForegroundMeasurement(request) - } - - private fun requestMissingPermissions(request: MeasurementRequest): Set? { - val permissions = measurementPermissions.missingPermissions(request, state.value.includesHeartRate()) - return permissions.takeIf(Set::isNotEmpty) - } - - private fun startForegroundMeasurement(request: MeasurementRequest) { - viewModelScope.launch { - val result = measurementControl.start(request) - if (result.isFailure) showMessage(MainMessage.MEASUREMENT_FAILED) - } - } - - private fun updatePreference(intent: AppPreferencesIntent) { - viewModelScope.launch { preferencesRepository.dispatch(intent).showFailure() } - } - - private fun showMessage(message: MainMessage) { - mutableState.value = state.value.copy(message = message) - } - - private fun Result<*>.showFailure() { - if (isFailure) showMessage(MainMessage.MEASUREMENT_FAILED) - } - - private fun MainState.toMeasurementRequest() = MeasurementRequest( - sensorIds = selectedSensorIds, - includesGps = includesGps, - samplingPeriodIndex = preferences.sensorSamplingPeriod, - stopOnLowBattery = preferences.restrictMeasurementOnLowBattery, - useWakeLock = preferences.useWakeLock, - gpsIntervalSeconds = preferences.gpsIntervalSeconds, - gpsMinDistanceMeters = preferences.gpsMinDistanceMeters, - wearSensorIds = selectedWearSensorIds, - wearIncludesGps = wearIncludesGps, - customName = customMeasurementName, - measurementType = measurementType, - delaySeconds = startDelaySeconds, - durationSeconds = if (measurementType == "TIMED") durationSeconds.coerceAtLeast(1) else 0, - notes = notes.lines().map(String::trim).filter(String::isNotEmpty), - alarmOffsetsSeconds = alarmOffsets.split(',', ';', ' ') - .mapNotNull(String::toIntOrNull).filter { it >= 0 }, - activityRecognition = activityRecognition, - activityRecognitionPeriodSeconds = activityRecognitionPeriodSeconds, - significantMotion = significantMotion, - ) - - private fun MainState.includesHeartRate(): Boolean = sensors.any { - it.isHeartRate && it.type in selectedSensorIds - } - - private fun MeasurementRequest.hasAnySource(): Boolean = sensorIds.isNotEmpty() || includesGps || - wearSensorIds.isNotEmpty() || wearIncludesGps || activityRecognition || significantMotion } diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreen.kt index 5c0375d..eaa6cd3 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/MeasurementSetupScreen.kt @@ -29,10 +29,10 @@ import com.motionapps.sensorbox.R @Composable fun MeasurementSetupScreen( - state: MainState, - onIntent: (MainIntent) -> Unit, + state: RecordingState, + onIntent: (RecordingIntent) -> Unit, modifier: Modifier = Modifier, - onBack: () -> Unit = { onIntent(MainIntent.ReturnToSensorSelection) }, + onBack: () -> Unit = { onIntent(RecordingIntent.ReturnToSensorSelection) }, ) { Box(modifier.fillMaxSize()) { MeasurementSetupContent(state, onIntent, onBack) @@ -41,17 +41,21 @@ fun MeasurementSetupScreen( } @Composable -private fun MeasurementSetupContent(state: MainState, onIntent: (MainIntent) -> Unit, onBack: () -> Unit) { +private fun MeasurementSetupContent(state: RecordingState, onIntent: (RecordingIntent) -> Unit, onBack: () -> Unit) { LazyColumn( contentPadding = PaddingValues(start = 20.dp, top = 12.dp, end = 20.dp, bottom = 132.dp), verticalArrangement = Arrangement.spacedBy(10.dp), ) { item { SensorBoxTopAppBar(stringResource(R.string.measurement_setup), onBack) } - item { StorageSetupPanel(state.storagePath) { onIntent(MainIntent.ChooseStorage) } } + item { StorageSetupPanel(state.storagePath) { onIntent(RecordingIntent.ChooseStorage) } } item { MeasurementNameSetup(state, onIntent) } item { TimingSetup(state, onIntent) } item { NotesAndAlarmsSetup(state, onIntent) } - item { SamplingSetting(state.preferences.sensorSamplingPeriod, onIntent) } + item { + SamplingSetting(state.preferences.sensorSamplingPeriod) { index -> + onIntent(RecordingIntent.SetSamplingPeriod(index)) + } + } item { SpecializedSourcesSetup(state, onIntent) } item { BatterySetup(state, onIntent) } item { WakeLockSetup(state, onIntent) } @@ -60,16 +64,16 @@ private fun MeasurementSetupContent(state: MainState, onIntent: (MainIntent) -> item { GpsIntervalSetup(state, onIntent) } item { GpsDistanceSetup(state, onIntent) } } - item { MainMessageText(state.message) } + item { RecordingMessageText(state.message) } } } @Composable -private fun MeasurementNameSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun MeasurementNameSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { SensorBoxPanel { OutlinedTextField( value = state.customMeasurementName, - onValueChange = { onIntent(MainIntent.SetCustomMeasurementName(it)) }, + onValueChange = { onIntent(RecordingIntent.SetCustomMeasurementName(it)) }, modifier = Modifier.fillMaxWidth().padding(16.dp), label = { Text(stringResource(R.string.custom_measurement_name)) }, supportingText = { Text(stringResource(R.string.custom_measurement_name_description)) }, @@ -79,20 +83,20 @@ private fun MeasurementNameSetup(state: MainState, onIntent: (MainIntent) -> Uni } @Composable -private fun TimingSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun TimingSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { Column(verticalArrangement = Arrangement.spacedBy(10.dp)) { BooleanSetting( title = stringResource(R.string.timed_measurement), description = stringResource(R.string.timed_measurement_description), checked = state.measurementType == "TIMED", - ) { onIntent(MainIntent.SetMeasurementType(if (it) "TIMED" else "ENDLESS")) } + ) { onIntent(RecordingIntent.SetMeasurementType(if (it) "TIMED" else "ENDLESS")) } StepSetting( stringResource(R.string.start_delay), state.startDelaySeconds, pluralStringResource(R.plurals.seconds_count, state.startDelaySeconds, state.startDelaySeconds), 0, 86_400, - ) { onIntent(MainIntent.SetStartDelay(it)) } + ) { onIntent(RecordingIntent.SetStartDelay(it)) } if (state.measurementType == "TIMED") { StepSetting( stringResource(R.string.measurement_duration), @@ -104,18 +108,18 @@ private fun TimingSetup(state: MainState, onIntent: (MainIntent) -> Unit) { ), 1, 86_400, - ) { onIntent(MainIntent.SetDuration(it)) } + ) { onIntent(RecordingIntent.SetDuration(it)) } } } } @Composable -private fun NotesAndAlarmsSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun NotesAndAlarmsSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { SensorBoxPanel { Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(12.dp)) { OutlinedTextField( value = state.notes, - onValueChange = { onIntent(MainIntent.SetNotes(it)) }, + onValueChange = { onIntent(RecordingIntent.SetNotes(it)) }, modifier = Modifier.fillMaxWidth(), label = { Text(stringResource(R.string.measurement_notes)) }, supportingText = { Text(stringResource(R.string.measurement_notes_description)) }, @@ -123,7 +127,7 @@ private fun NotesAndAlarmsSetup(state: MainState, onIntent: (MainIntent) -> Unit ) OutlinedTextField( value = state.alarmOffsets, - onValueChange = { onIntent(MainIntent.SetAlarmOffsets(it)) }, + onValueChange = { onIntent(RecordingIntent.SetAlarmOffsets(it)) }, modifier = Modifier.fillMaxWidth(), label = { Text(stringResource(R.string.audible_alarm_offsets)) }, supportingText = { Text(stringResource(R.string.audible_alarm_offsets_description)) }, @@ -134,13 +138,13 @@ private fun NotesAndAlarmsSetup(state: MainState, onIntent: (MainIntent) -> Unit } @Composable -private fun SpecializedSourcesSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun SpecializedSourcesSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { Column(verticalArrangement = Arrangement.spacedBy(10.dp)) { BooleanSetting( title = stringResource(R.string.activity_recognition), description = stringResource(R.string.activity_recognition_description), checked = state.activityRecognition, - ) { onIntent(MainIntent.SetActivityRecognition(it)) } + ) { onIntent(RecordingIntent.SetActivityRecognition(it)) } if (state.activityRecognition) { StepSetting( stringResource(R.string.activity_recognition_period), @@ -152,13 +156,13 @@ private fun SpecializedSourcesSetup(state: MainState, onIntent: (MainIntent) -> ), 1, 3_600, - ) { onIntent(MainIntent.SetActivityRecognitionPeriod(it)) } + ) { onIntent(RecordingIntent.SetActivityRecognitionPeriod(it)) } } BooleanSetting( title = stringResource(R.string.significant_motion), description = stringResource(R.string.significant_motion_description), checked = state.significantMotion, - ) { onIntent(MainIntent.SetSignificantMotion(it)) } + ) { onIntent(RecordingIntent.SetSignificantMotion(it)) } } } @@ -191,34 +195,34 @@ private fun StorageSetupPanel(path: String?, onChoose: () -> Unit) { } @Composable -private fun BatterySetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun BatterySetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.battery_guard), description = stringResource(R.string.battery_guard_setup_description), checked = state.preferences.restrictMeasurementOnLowBattery, - ) { onIntent(MainIntent.SetLowBatteryRestriction(it)) } + ) { onIntent(RecordingIntent.SetLowBatteryRestriction(it)) } } @Composable -private fun WakeLockSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun WakeLockSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.keep_cpu_awake), description = stringResource(R.string.keep_cpu_awake_setup_description), checked = state.preferences.useWakeLock, - ) { onIntent(MainIntent.SetWakeLock(it)) } + ) { onIntent(RecordingIntent.SetWakeLock(it)) } } @Composable -private fun KeepScreenAwakeSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun KeepScreenAwakeSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.keep_screen_awake), description = stringResource(R.string.keep_screen_awake_setup_description), checked = state.preferences.keepPhoneDisplayOn, - ) { onIntent(MainIntent.SetKeepScreenAwake(it)) } + ) { onIntent(RecordingIntent.SetKeepScreenAwake(it)) } } @Composable -private fun GpsIntervalSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun GpsIntervalSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { StepSetting( stringResource(R.string.gps_interval), state.preferences.gpsIntervalSeconds, @@ -230,12 +234,12 @@ private fun GpsIntervalSetup(state: MainState, onIntent: (MainIntent) -> Unit) { 1, 3_600, ) { - onIntent(MainIntent.SetGpsInterval(it)) + onIntent(RecordingIntent.SetGpsInterval(it)) } } @Composable -private fun GpsDistanceSetup(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun GpsDistanceSetup(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { StepSetting( stringResource(R.string.gps_minimum_distance), state.preferences.gpsMinDistanceMeters, @@ -247,12 +251,16 @@ private fun GpsDistanceSetup(state: MainState, onIntent: (MainIntent) -> Unit) { 0, 10_000, ) { - onIntent(MainIntent.SetGpsDistance(it)) + onIntent(RecordingIntent.SetGpsDistance(it)) } } @Composable -private fun MeasurementSetupActionBar(state: MainState, onIntent: (MainIntent) -> Unit, modifier: Modifier = Modifier) { +private fun MeasurementSetupActionBar( + state: RecordingState, + onIntent: (RecordingIntent) -> Unit, + modifier: Modifier = Modifier, +) { val sourceCount = setupSourceCount(state) SensorBoxBottomAction( title = pluralStringResource(R.plurals.source_count, sourceCount, sourceCount), @@ -261,11 +269,12 @@ private fun MeasurementSetupActionBar(state: MainState, onIntent: (MainIntent) - ), buttonLabel = stringResource(R.string.start_measurement), enabled = state.storagePath != null && sourceCount > 0, - onClick = { onIntent(MainIntent.StartMeasurement) }, + onClick = { onIntent(RecordingIntent.StartMeasurement) }, modifier = modifier, ) } -private fun setupSourceCount(state: MainState): Int = state.selectedSensorIds.size + state.selectedWearSensorIds.size + - (if (state.includesGps) 1 else 0) + (if (state.wearIncludesGps) 1 else 0) + - (if (state.activityRecognition) 1 else 0) + (if (state.significantMotion) 1 else 0) +private fun setupSourceCount(state: RecordingState): Int = + state.selectedSensorIds.size + state.selectedWearSensorIds.size + + (if (state.includesGps) 1 else 0) + (if (state.wearIncludesGps) 1 else 0) + + (if (state.activityRecognition) 1 else 0) + (if (state.significantMotion) 1 else 0) diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingContract.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingContract.kt new file mode 100644 index 0000000..d0cd807 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingContract.kt @@ -0,0 +1,23 @@ +package com.motionapps.sensorbox.presentation.main + +import com.motionapps.sensorbox.core.error.AppErrorCode + +data class OnboardingState(val page: Int = 0, val storagePath: String? = null, val errorCode: AppErrorCode? = null) + +sealed interface OnboardingIntent { + data object AdvanceOnboarding : OnboardingIntent + data object RetreatOnboarding : OnboardingIntent + data object CompleteOnboarding : OnboardingIntent + data object OpenPrivacyPolicy : OnboardingIntent + data object OpenTermsOfUse : OnboardingIntent + data object RequestBatteryOptimizationExemption : OnboardingIntent + data object ChooseStorage : OnboardingIntent +} + +sealed interface OnboardingEffect { + data object PickStorageDirectory : OnboardingEffect + data object OpenPrivacyPolicy : OnboardingEffect + data object OpenTermsOfUse : OnboardingEffect + data object RequestBatteryOptimizationExemption : OnboardingEffect + data class Navigate(val route: MainRoute) : OnboardingEffect +} diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingScreen.kt index 12b6292..1901324 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingScreen.kt @@ -35,8 +35,8 @@ import androidx.compose.ui.unit.dp import com.motionapps.sensorbox.R @Composable -fun OnboardingScreen(state: MainState, onIntent: (MainIntent) -> Unit) { - val pageIndex = state.onboardingPage.coerceIn(ONBOARDING_PAGES.indices) +fun OnboardingScreen(state: OnboardingState, onIntent: (OnboardingIntent) -> Unit) { + val pageIndex = state.page.coerceIn(ONBOARDING_PAGES.indices) val page = ONBOARDING_PAGES[pageIndex] BoxWithConstraints( modifier = Modifier @@ -53,9 +53,9 @@ fun OnboardingScreen(state: MainState, onIntent: (MainIntent) -> Unit) { private fun OnboardingLayout( pageIndex: Int, page: OnboardingPage, - state: MainState, + state: OnboardingState, isLandscape: Boolean, - onIntent: (MainIntent) -> Unit, + onIntent: (OnboardingIntent) -> Unit, ) { Column( modifier = Modifier @@ -79,13 +79,13 @@ private fun OnboardingLayout( } @Composable -private fun OnboardingHeader(pageIndex: Int, onIntent: (MainIntent) -> Unit) { +private fun OnboardingHeader(pageIndex: Int, onIntent: (OnboardingIntent) -> Unit) { Column(Modifier.fillMaxWidth()) { Box(Modifier.fillMaxWidth().height(52.dp)) { if (pageIndex > 0) { SensorBoxBackButton( label = stringResource(R.string.intro_back), - onClick = { onIntent(MainIntent.RetreatOnboarding) }, + onClick = { onIntent(OnboardingIntent.RetreatOnboarding) }, modifier = Modifier.align(Alignment.CenterStart), ) } @@ -118,9 +118,9 @@ private fun OnboardingProgress(pageIndex: Int) { @Composable private fun OnboardingMessage( page: OnboardingPage, - state: MainState, + state: OnboardingState, isLandscape: Boolean, - onIntent: (MainIntent) -> Unit, + onIntent: (OnboardingIntent) -> Unit, ) { if (isLandscape) { LandscapeOnboardingMessage(page, state, onIntent) @@ -130,7 +130,11 @@ private fun OnboardingMessage( } @Composable -private fun PortraitOnboardingMessage(page: OnboardingPage, state: MainState, onIntent: (MainIntent) -> Unit) { +private fun PortraitOnboardingMessage( + page: OnboardingPage, + state: OnboardingState, + onIntent: (OnboardingIntent) -> Unit, +) { Column( modifier = Modifier .widthIn(max = ONBOARDING_MESSAGE_MAX_WIDTH) @@ -148,7 +152,11 @@ private fun PortraitOnboardingMessage(page: OnboardingPage, state: MainState, on } @Composable -private fun LandscapeOnboardingMessage(page: OnboardingPage, state: MainState, onIntent: (MainIntent) -> Unit) { +private fun LandscapeOnboardingMessage( + page: OnboardingPage, + state: OnboardingState, + onIntent: (OnboardingIntent) -> Unit, +) { Row( modifier = Modifier .fillMaxSize() @@ -208,7 +216,7 @@ private fun OnboardingText(page: OnboardingPage) { } @Composable -private fun OnboardingPageActions(action: OnboardingAction, path: String?, onIntent: (MainIntent) -> Unit) { +private fun OnboardingPageActions(action: OnboardingAction, path: String?, onIntent: (OnboardingIntent) -> Unit) { when (action) { OnboardingAction.NONE -> Unit OnboardingAction.POLICIES -> PolicyActions(onIntent) @@ -218,38 +226,38 @@ private fun OnboardingPageActions(action: OnboardingAction, path: String?, onInt } @Composable -private fun PolicyActions(onIntent: (MainIntent) -> Unit) { +private fun PolicyActions(onIntent: (OnboardingIntent) -> Unit) { Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(10.dp)) { SensorBoxSecondaryButton( label = stringResource(R.string.intro_policy_button), - onClick = { onIntent(MainIntent.OpenPrivacyPolicy) }, + onClick = { onIntent(OnboardingIntent.OpenPrivacyPolicy) }, modifier = Modifier.weight(1f), ) SensorBoxSecondaryButton( label = stringResource(R.string.intro_terms_button), - onClick = { onIntent(MainIntent.OpenTermsOfUse) }, + onClick = { onIntent(OnboardingIntent.OpenTermsOfUse) }, modifier = Modifier.weight(1f), ) } } @Composable -private fun BatteryAction(onIntent: (MainIntent) -> Unit) { +private fun BatteryAction(onIntent: (OnboardingIntent) -> Unit) { SensorBoxSecondaryButton( label = stringResource(R.string.intro_battery_action), - onClick = { onIntent(MainIntent.RequestBatteryOptimizationExemption) }, + onClick = { onIntent(OnboardingIntent.RequestBatteryOptimizationExemption) }, modifier = Modifier.fillMaxWidth(), ) } @Composable -private fun StorageAction(path: String?, onIntent: (MainIntent) -> Unit) { +private fun StorageAction(path: String?, onIntent: (OnboardingIntent) -> Unit) { Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { SensorBoxSecondaryButton( label = stringResource( if (path == null) R.string.intro_storage_action else R.string.intro_storage_change_action, ), - onClick = { onIntent(MainIntent.ChooseStorage) }, + onClick = { onIntent(OnboardingIntent.ChooseStorage) }, modifier = Modifier.fillMaxWidth(), ) if (path != null) { @@ -269,7 +277,7 @@ private fun OnboardingControls( pageIndex: Int, hasStorage: Boolean, isLandscape: Boolean, - onIntent: (MainIntent) -> Unit, + onIntent: (OnboardingIntent) -> Unit, modifier: Modifier = Modifier, ) { val isLastPage = pageIndex == ONBOARDING_PAGES.lastIndex @@ -285,8 +293,8 @@ private fun OnboardingControls( } } -private fun onboardingForwardIntent(isLastPage: Boolean): MainIntent = - if (isLastPage) MainIntent.CompleteOnboarding else MainIntent.AdvanceOnboarding +private fun onboardingForwardIntent(isLastPage: Boolean): OnboardingIntent = + if (isLastPage) OnboardingIntent.CompleteOnboarding else OnboardingIntent.AdvanceOnboarding private data class OnboardingPage( @StringRes val title: Int, diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingViewModel.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingViewModel.kt new file mode 100644 index 0000000..1dbf2f0 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/OnboardingViewModel.kt @@ -0,0 +1,86 @@ +package com.motionapps.sensorbox.presentation.main + +import android.content.Intent +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent +import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository +import com.motionapps.sensorbox.domain.measurement.DocumentStorageGateway +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class OnboardingViewModel @Inject constructor( + private val preferencesRepository: AppPreferencesRepository, + private val documentStorage: DocumentStorageGateway, +) : ViewModel() { + private val mutableState = MutableStateFlow( + OnboardingState(storagePath = documentStorage.displayPath().getOrNull()), + ) + private val mutableEffects = Channel(Channel.BUFFERED) + + val state: StateFlow = mutableState.asStateFlow() + val effects = mutableEffects.receiveAsFlow() + + fun accept(intent: OnboardingIntent) { + when (intent) { + OnboardingIntent.AdvanceOnboarding -> mutableState.value = state.value.copy( + page = state.value.page + 1, + errorCode = null, + ) + + OnboardingIntent.RetreatOnboarding -> mutableState.value = state.value.copy( + page = (state.value.page - 1).coerceAtLeast(0), + errorCode = null, + ) + + OnboardingIntent.CompleteOnboarding -> completeOnboarding() + + OnboardingIntent.ChooseStorage -> mutableEffects.trySend(OnboardingEffect.PickStorageDirectory) + + OnboardingIntent.OpenPrivacyPolicy -> mutableEffects.trySend(OnboardingEffect.OpenPrivacyPolicy) + + OnboardingIntent.OpenTermsOfUse -> mutableEffects.trySend(OnboardingEffect.OpenTermsOfUse) + + OnboardingIntent.RequestBatteryOptimizationExemption -> + mutableEffects.trySend(OnboardingEffect.RequestBatteryOptimizationExemption) + } + } + + fun handleStorageResult(resultIntent: Intent?) { + val result = resultIntent?.let(documentStorage::persist) ?: AppResult.failure( + AppError(AppErrorCode.STORAGE, "Select onboarding storage directory"), + ) + mutableState.value = state.value.copy( + storagePath = documentStorage.displayPath().getOrNull(), + errorCode = result.errorOrNull()?.code, + ) + } + + private fun completeOnboarding() { + if (documentStorage.hasStorage().getOrNull() != true) { + mutableState.value = state.value.copy(errorCode = AppErrorCode.STORAGE) + return + } + viewModelScope.launch { + val accepted = preferencesRepository.dispatch(AppPreferencesIntent.AcceptPolicy) + if (accepted is AppResult.Failure) { + mutableState.value = state.value.copy(errorCode = accepted.error.code) + return@launch + } + when (val completed = preferencesRepository.dispatch(AppPreferencesIntent.CompleteIntro)) { + is AppResult.Success -> mutableEffects.send(OnboardingEffect.Navigate(MainRoute.RECORD)) + is AppResult.Failure -> mutableState.value = state.value.copy(errorCode = completed.error.code) + } + } + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordScreen.kt index 56fe893..0f4bc74 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordScreen.kt @@ -36,7 +36,7 @@ import com.motionapps.sensorbox.R import com.motionapps.sensorbox.domain.sensors.SensorDescriptor @Composable -fun RecordScreen(state: MainState, onIntent: (MainIntent) -> Unit, modifier: Modifier = Modifier) { +fun RecordScreen(state: RecordingState, onIntent: (RecordingIntent) -> Unit, modifier: Modifier = Modifier) { Box(modifier.fillMaxSize()) { RecordContent(state, onIntent) SensorSelectionActionBar(state, onIntent, Modifier.align(Alignment.BottomCenter)) @@ -44,27 +44,27 @@ fun RecordScreen(state: MainState, onIntent: (MainIntent) -> Unit, modifier: Mod } @Composable -private fun RecordContent(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun RecordContent(state: RecordingState, onIntent: (RecordingIntent) -> Unit) { LazyColumn( contentPadding = PaddingValues(start = 20.dp, top = 24.dp, end = 20.dp, bottom = 132.dp), verticalArrangement = Arrangement.spacedBy(10.dp), ) { - item { RecordHeader(state) { onIntent(MainIntent.Navigate(MainRoute.SETTINGS)) } } + item { RecordHeader(state) { onIntent(RecordingIntent.Navigate(MainRoute.SETTINGS)) } } item { DeviceSectionHeader(stringResource(R.string.phone_sensors)) } item { SensorSectionHeader(phoneSourceCount(state), state.sensors.size + 1) } item { GpsRow( selected = state.includesGps, - onToggle = { onIntent(MainIntent.ToggleGps) }, - onInfo = { onIntent(MainIntent.OpenSensorDetails(null)) }, + onToggle = { onIntent(RecordingIntent.ToggleGps) }, + onInfo = { onIntent(RecordingIntent.OpenSensorDetails(null)) }, ) } items(state.sensors, key = SensorDescriptor::type) { sensor -> SensorRow( sensor = sensor, selected = sensor.type in state.selectedSensorIds, - onToggle = { onIntent(MainIntent.ToggleSensor(sensor.type)) }, - onInfo = { onIntent(MainIntent.OpenSensorDetails(sensor.type)) }, + onToggle = { onIntent(RecordingIntent.ToggleSensor(sensor.type)) }, + onInfo = { onIntent(RecordingIntent.OpenSensorDetails(sensor.type)) }, ) } if (state.isWearConnected) { @@ -73,20 +73,20 @@ private fun RecordContent(state: MainState, onIntent: (MainIntent) -> Unit) { item { GpsRow( selected = state.wearIncludesGps, - onToggle = { onIntent(MainIntent.ToggleWearGps) }, - onInfo = { onIntent(MainIntent.OpenSensorDetails(null)) }, + onToggle = { onIntent(RecordingIntent.ToggleWearGps) }, + onInfo = { onIntent(RecordingIntent.OpenSensorDetails(null)) }, ) } items(state.wearSensors, key = { "wear_${it.type}" }) { sensor -> SensorRow( sensor = sensor, selected = sensor.type in state.selectedWearSensorIds, - onToggle = { onIntent(MainIntent.ToggleWearSensor(sensor.type)) }, - onInfo = { onIntent(MainIntent.OpenSensorDetails(sensor.type)) }, + onToggle = { onIntent(RecordingIntent.ToggleWearSensor(sensor.type)) }, + onInfo = { onIntent(RecordingIntent.OpenSensorDetails(sensor.type)) }, ) } } - item { MainMessageText(state.message) } + item { RecordingMessageText(state.message) } } } @@ -123,7 +123,7 @@ private fun GpsRow(selected: Boolean, onToggle: () -> Unit, onInfo: () -> Unit) } @Composable -private fun RecordHeader(state: MainState, onOptions: () -> Unit) { +private fun RecordHeader(state: RecordingState, onOptions: () -> Unit) { val optionsDescription = stringResource(R.string.options) Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.Top) { SensorBoxScreenHeader( @@ -210,29 +210,34 @@ private fun sensorBorderColor(selected: Boolean) = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outlineVariant @Composable -private fun SensorSelectionActionBar(state: MainState, onIntent: (MainIntent) -> Unit, modifier: Modifier = Modifier) { +private fun SensorSelectionActionBar( + state: RecordingState, + onIntent: (RecordingIntent) -> Unit, + modifier: Modifier = Modifier, +) { val sensorCount = selectedSourceCount(state) SensorBoxBottomAction( title = pluralStringResource(R.plurals.sensor_count, sensorCount, sensorCount), description = stringResource(R.string.step_one_of_two), buttonLabel = stringResource(R.string.continue_action), enabled = sensorCount > 0, - onClick = { onIntent(MainIntent.OpenMeasurementSetup) }, + onClick = { onIntent(RecordingIntent.OpenMeasurementSetup) }, modifier = modifier, ) } -private fun phoneSourceCount(state: MainState): Int = state.selectedSensorIds.size + if (state.includesGps) 1 else 0 +private fun phoneSourceCount(state: RecordingState): Int = + state.selectedSensorIds.size + if (state.includesGps) 1 else 0 -private fun wearSourceCount(state: MainState): Int = +private fun wearSourceCount(state: RecordingState): Int = state.selectedWearSensorIds.size + if (state.wearIncludesGps) 1 else 0 -private fun selectedSourceCount(state: MainState): Int = phoneSourceCount(state) + wearSourceCount(state) + +private fun selectedSourceCount(state: RecordingState): Int = phoneSourceCount(state) + wearSourceCount(state) + (if (state.activityRecognition) 1 else 0) + (if (state.significantMotion) 1 else 0) @Composable -fun MainMessageText(message: MainMessage) { - if (message == MainMessage.NONE) return +fun RecordingMessageText(message: RecordingMessage) { + if (message == RecordingMessage.NONE) return Surface(color = MaterialTheme.colorScheme.errorContainer, shape = MaterialTheme.shapes.medium) { Text( stringResource(messageTextResource(message)), @@ -243,10 +248,10 @@ fun MainMessageText(message: MainMessage) { } @StringRes -private fun messageTextResource(message: MainMessage): Int = when (message) { - MainMessage.PICK_AT_LEAST_ONE_SOURCE -> R.string.message_pick_source - MainMessage.STORAGE_REQUIRED -> R.string.message_storage_required - MainMessage.PERMISSION_REQUIRED -> R.string.message_permission_required - MainMessage.MEASUREMENT_FAILED -> R.string.message_measurement_failed - MainMessage.NONE -> R.string.app_name +private fun messageTextResource(message: RecordingMessage): Int = when (message) { + RecordingMessage.PICK_AT_LEAST_ONE_SOURCE -> R.string.message_pick_source + RecordingMessage.STORAGE_REQUIRED -> R.string.message_storage_required + RecordingMessage.PERMISSION_REQUIRED -> R.string.message_permission_required + RecordingMessage.MEASUREMENT_FAILED -> R.string.message_measurement_failed + RecordingMessage.NONE -> R.string.app_name } diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingContract.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingContract.kt new file mode 100644 index 0000000..932411a --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingContract.kt @@ -0,0 +1,155 @@ +package com.motionapps.sensorbox.presentation.main + +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.preferences.AppPreferences +import com.motionapps.sensorbox.domain.sensors.SensorDescriptor +import com.motionapps.sensorservices.session.MeasurementSessionState + +enum class RecordingMessage { + NONE, + PICK_AT_LEAST_ONE_SOURCE, + STORAGE_REQUIRED, + PERMISSION_REQUIRED, + MEASUREMENT_FAILED, +} + +data class RecordingState( + val sensors: List = emptyList(), + val wearSensors: List = emptyList(), + val detailsSensorType: Int? = null, + val selectedSensorIds: Set = emptySet(), + val includesGps: Boolean = false, + val selectedWearSensorIds: Set = emptySet(), + val wearIncludesGps: Boolean = false, + val customMeasurementName: String = "", + val measurementType: String = "ENDLESS", + val startDelaySeconds: Int = 0, + val durationSeconds: Int = 0, + val notes: String = "", + val alarmOffsets: String = "", + val activityRecognition: Boolean = false, + val activityRecognitionPeriodSeconds: Int = 30, + val significantMotion: Boolean = false, + val storagePath: String? = null, + val preferences: AppPreferences = AppPreferences(), + val session: MeasurementSessionState = MeasurementSessionState.Idle, + val elapsedSeconds: Long = 0, + val isWearConnected: Boolean = false, + val message: RecordingMessage = RecordingMessage.NONE, + val errorCode: AppErrorCode? = null, +) + +sealed interface RecordingIntent { + data class Navigate(val route: MainRoute) : RecordingIntent + data class ToggleSensor(val sensorId: Int) : RecordingIntent + data class ToggleWearSensor(val sensorId: Int) : RecordingIntent + data class OpenSensorDetails(val sensorType: Int?) : RecordingIntent + data object ToggleGps : RecordingIntent + data object ToggleWearGps : RecordingIntent + data object ChooseStorage : RecordingIntent + data object OpenMeasurementSetup : RecordingIntent + data object ReturnToSensorSelection : RecordingIntent + data object StartMeasurement : RecordingIntent + data object StopMeasurement : RecordingIntent + data object ClearMessage : RecordingIntent + data class SetCustomMeasurementName(val value: String) : RecordingIntent + data class SetMeasurementType(val value: String) : RecordingIntent + data class SetStartDelay(val seconds: Int) : RecordingIntent + data class SetDuration(val seconds: Int) : RecordingIntent + data class SetNotes(val value: String) : RecordingIntent + data class SetAlarmOffsets(val value: String) : RecordingIntent + data class SetActivityRecognition(val enabled: Boolean) : RecordingIntent + data class SetActivityRecognitionPeriod(val seconds: Int) : RecordingIntent + data class SetSignificantMotion(val enabled: Boolean) : RecordingIntent + data class AddAnnotation(val text: String) : RecordingIntent + data class SetSamplingPeriod(val index: Int) : RecordingIntent + data class SetLowBatteryRestriction(val enabled: Boolean) : RecordingIntent + data class SetWakeLock(val enabled: Boolean) : RecordingIntent + data class SetKeepScreenAwake(val enabled: Boolean) : RecordingIntent + data class SetGpsInterval(val seconds: Int) : RecordingIntent + data class SetGpsDistance(val meters: Int) : RecordingIntent +} + +sealed interface RecordingEffect { + data object PickStorageDirectory : RecordingEffect + data class RequestPermissions(val permissions: Set) : RecordingEffect + data class Navigate(val route: MainRoute) : RecordingEffect +} + +data class RecordingNext(val state: RecordingState, val effect: RecordingEffect? = null) + +object RecordingReducer { + fun reduce(state: RecordingState, intent: RecordingIntent): RecordingNext = reduceNavigation(state, intent) + ?: reduceSelection(state, intent) + ?: reduceConfiguration(state, intent) + + private fun reduceNavigation(state: RecordingState, intent: RecordingIntent): RecordingNext? = when (intent) { + RecordingIntent.ChooseStorage -> RecordingNext(state, RecordingEffect.PickStorageDirectory) + + is RecordingIntent.Navigate -> RecordingNext(state, RecordingEffect.Navigate(intent.route)) + + is RecordingIntent.OpenSensorDetails -> RecordingNext( + state.copy(detailsSensorType = intent.sensorType), + RecordingEffect.Navigate(MainRoute.SENSOR_DETAILS), + ) + + RecordingIntent.OpenMeasurementSetup -> RecordingNext( + state.copy(message = RecordingMessage.NONE), + RecordingEffect.Navigate(MainRoute.SETUP), + ) + + RecordingIntent.ReturnToSensorSelection -> RecordingNext( + state.copy(message = RecordingMessage.NONE), + RecordingEffect.Navigate(MainRoute.RECORD), + ) + + else -> null + } + + private fun reduceSelection(state: RecordingState, intent: RecordingIntent): RecordingNext? = when (intent) { + RecordingIntent.ClearMessage -> RecordingNext(state.copy(message = RecordingMessage.NONE, errorCode = null)) + RecordingIntent.ToggleGps -> RecordingNext(state.copy(includesGps = !state.includesGps)) + RecordingIntent.ToggleWearGps -> RecordingNext(state.copy(wearIncludesGps = !state.wearIncludesGps)) + is RecordingIntent.ToggleSensor -> RecordingNext(state.toggleSensor(intent.sensorId)) + is RecordingIntent.ToggleWearSensor -> RecordingNext(state.toggleWearSensor(intent.sensorId)) + else -> null + } + + private fun reduceConfiguration(state: RecordingState, intent: RecordingIntent): RecordingNext = when (intent) { + is RecordingIntent.SetCustomMeasurementName -> RecordingNext(state.copy(customMeasurementName = intent.value)) + + is RecordingIntent.SetMeasurementType -> RecordingNext(state.copy(measurementType = intent.value)) + + is RecordingIntent.SetStartDelay -> RecordingNext( + state.copy(startDelaySeconds = intent.seconds.coerceAtLeast(0)), + ) + + is RecordingIntent.SetDuration -> RecordingNext(state.copy(durationSeconds = intent.seconds.coerceAtLeast(0))) + + is RecordingIntent.SetNotes -> RecordingNext(state.copy(notes = intent.value)) + + is RecordingIntent.SetAlarmOffsets -> RecordingNext(state.copy(alarmOffsets = intent.value)) + + is RecordingIntent.SetActivityRecognition -> RecordingNext(state.copy(activityRecognition = intent.enabled)) + + is RecordingIntent.SetActivityRecognitionPeriod -> RecordingNext( + state.copy(activityRecognitionPeriodSeconds = intent.seconds.coerceAtLeast(1)), + ) + + is RecordingIntent.SetSignificantMotion -> RecordingNext(state.copy(significantMotion = intent.enabled)) + + else -> RecordingNext(state) + } + + private fun RecordingState.toggleSensor(sensorId: Int): RecordingState { + val updated = selectedSensorIds.toMutableSet() + if (!updated.add(sensorId)) updated.remove(sensorId) + return copy(selectedSensorIds = updated, message = RecordingMessage.NONE, errorCode = null) + } + + private fun RecordingState.toggleWearSensor(sensorId: Int): RecordingState { + val updated = selectedWearSensorIds.toMutableSet() + if (!updated.add(sensorId)) updated.remove(sensorId) + return copy(selectedWearSensorIds = updated, message = RecordingMessage.NONE, errorCode = null) + } +} diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingViewModel.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingViewModel.kt new file mode 100644 index 0000000..c2ac16a --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/RecordingViewModel.kt @@ -0,0 +1,288 @@ +package com.motionapps.sensorbox.presentation.main + +import android.content.Intent +import android.os.SystemClock +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.suspendFlatMap +import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent +import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository +import com.motionapps.sensorbox.domain.measurement.MeasurementRequest +import com.motionapps.sensorbox.domain.measurement.RecordingWorkflowGateway +import com.motionapps.sensorbox.domain.sensors.SensorDescriptor +import com.motionapps.sensorbox.domain.sensors.WearSensorCatalogStore +import com.motionapps.sensorservices.session.MeasurementSessionState +import com.motionapps.sensorservices.session.MeasurementSessionStore +import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY +import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH +import com.motionapps.wearoslib.connectivity.ObserveWearCapabilityUseCase +import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase +import com.motionapps.wearoslib.connectivity.WearConnection +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearCommandCodec +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Job +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +@Suppress("TooManyFunctions") +class RecordingViewModel @Inject constructor( + private val preferencesRepository: AppPreferencesRepository, + private val workflow: RecordingWorkflowGateway, + private val sessionStore: MeasurementSessionStore, + private val observeWearCapability: ObserveWearCapabilityUseCase, + private val sendWearMessage: SendWearMessageUseCase, + private val wearSensorCatalog: WearSensorCatalogStore, +) : ViewModel() { + private val mutableState = MutableStateFlow(initialState()) + private val mutableEffects = Channel(Channel.BUFFERED) + private var elapsedJob: Job? = null + + val state: StateFlow = mutableState.asStateFlow() + val effects = mutableEffects.receiveAsFlow() + + init { + observePreferences() + observeMeasurementSession() + observeWearConnection() + observeWearSensors() + } + + fun accept(intent: RecordingIntent) { + when (intent) { + RecordingIntent.StartMeasurement -> startMeasurement() + + RecordingIntent.StopMeasurement -> stopMeasurement() + + is RecordingIntent.AddAnnotation -> workflow.annotate(intent.text).showFailure() + + is RecordingIntent.SetSamplingPeriod -> updatePreference( + AppPreferencesIntent.SetSensorSamplingPeriod(intent.index), + ) + + is RecordingIntent.SetLowBatteryRestriction -> updatePreference( + AppPreferencesIntent.SetLowBatteryRestriction(intent.enabled), + ) + + is RecordingIntent.SetWakeLock -> updatePreference(AppPreferencesIntent.SetWakeLock(intent.enabled)) + + is RecordingIntent.SetKeepScreenAwake -> updatePreference( + AppPreferencesIntent.SetKeepPhoneDisplayOn(intent.enabled), + ) + + is RecordingIntent.SetGpsInterval -> updatePreference(AppPreferencesIntent.SetGpsInterval(intent.seconds)) + + is RecordingIntent.SetGpsDistance -> updatePreference(AppPreferencesIntent.SetGpsMinDistance(intent.meters)) + + else -> reduce(intent) + } + } + + fun handleStorageResult(resultIntent: Intent?) { + val persisted = workflow.persistStorage(resultIntent) + mutableState.value = state.value.copy( + storagePath = workflow.storagePath(), + message = if (persisted.isSuccess) RecordingMessage.NONE else RecordingMessage.STORAGE_REQUIRED, + errorCode = persisted.errorOrNull()?.code, + ) + } + + fun handlePermissionResult() { + val request = state.value.toMeasurementRequest() + val missing = workflow.missingPermissions(request, state.value.includesHeartRate()) + if (missing.isEmpty()) { + startMeasurement() + } else { + showMessage(RecordingMessage.PERMISSION_REQUIRED, AppErrorCode.PERMISSION) + } + } + + private fun initialState() = RecordingState( + sensors = workflow.sensors(), + storagePath = workflow.storagePath(), + ) + + private fun observePreferences() { + viewModelScope.launch { + preferencesRepository.preferences.collect { result -> + result.fold( + onSuccess = { preferences -> + mutableState.value = state.value.copy( + preferences = preferences, + errorCode = null, + ) + }, + onFailure = { error -> + mutableState.value = state.value.copy( + message = RecordingMessage.MEASUREMENT_FAILED, + errorCode = error.code, + ) + }, + ) + } + } + } + + private fun observeMeasurementSession() { + viewModelScope.launch { + sessionStore.state.collect { session -> + onSessionChanged(session) + } + } + } + + private fun onSessionChanged(session: MeasurementSessionState) { + elapsedJob?.cancel() + mutableState.value = state.value.copy(session = session, elapsedSeconds = 0) + if (session is MeasurementSessionState.Running) startElapsedTicker(session.startedAtElapsedRealtime) + } + + private fun startElapsedTicker(startedAt: Long) { + elapsedJob = viewModelScope.launch { + while (isActive) { + val seconds = (SystemClock.elapsedRealtime() - startedAt).coerceAtLeast(0) / 1_000L + mutableState.value = state.value.copy(elapsedSeconds = seconds) + delay(1_000L) + } + } + } + + private fun observeWearConnection() { + viewModelScope.launch { + observeWearCapability(WEAR_APP_CAPABILITY) + .catch { error -> + AppError.from(AppErrorCode.CONNECTIVITY, "Observe Wear connection", error) + emit(WearConnection.Disconnected) + } + .collect { connection -> + mutableState.value = state.value.copy(isWearConnected = connection is WearConnection.Connected) + if (connection is WearConnection.Connected) { + WearCommandCodec.encode(WearCommand.RequestSensorList).suspendFlatMap { payload -> + sendWearMessage(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, payload) + } + } else { + wearSensorCatalog.clear() + } + } + } + } + + private fun observeWearSensors() { + viewModelScope.launch { + wearSensorCatalog.sensors.collect { sensors -> + mutableState.value = state.value.copy( + wearSensors = sensors.map { sensor -> + SensorDescriptor( + type = sensor.type, + name = sensor.name, + vendor = sensor.vendor, + isHeartRate = sensor.isHeartRate, + ) + }, + ) + } + } + } + + private fun reduce(intent: RecordingIntent) { + val next = RecordingReducer.reduce(state.value, intent) + mutableState.value = next.state + next.effect?.let(mutableEffects::trySend) + } + + @Suppress("ReturnCount") + private fun startMeasurement() { + val request = state.value.toMeasurementRequest() + if (!request.hasAnySource()) { + showMessage(RecordingMessage.PICK_AT_LEAST_ONE_SOURCE, AppErrorCode.VALIDATION) + return + } + if (!workflow.hasStorage()) { + reduce(RecordingIntent.ChooseStorage) + showMessage(RecordingMessage.STORAGE_REQUIRED, AppErrorCode.STORAGE) + return + } + requestMissingPermissions(request)?.let { + mutableEffects.trySend(RecordingEffect.RequestPermissions(it)) + mutableState.value = state.value.copy(errorCode = AppErrorCode.PERMISSION) + return + } + startForegroundMeasurement(request) + } + + private fun requestMissingPermissions(request: MeasurementRequest): Set? { + val permissions = workflow.missingPermissions(request, state.value.includesHeartRate()) + return permissions.takeIf(Set::isNotEmpty) + } + + private fun startForegroundMeasurement(request: MeasurementRequest) { + viewModelScope.launch { + val result = workflow.start(request) + if (result.isFailure) showFailure(result.errorOrNull()) + } + } + + private fun stopMeasurement() { + viewModelScope.launch { workflow.stop().showFailure() } + } + + private fun updatePreference(intent: AppPreferencesIntent) { + viewModelScope.launch { preferencesRepository.dispatch(intent).showFailure() } + } + + private fun showMessage(message: RecordingMessage, errorCode: AppErrorCode? = null) { + mutableState.value = state.value.copy(message = message, errorCode = errorCode) + } + + private fun AppResult<*>.showFailure() { + if (isFailure) showFailure(errorOrNull()) + } + + private fun showFailure(error: com.motionapps.sensorbox.core.error.AppError?) { + mutableState.value = state.value.copy( + message = RecordingMessage.MEASUREMENT_FAILED, + errorCode = error?.code ?: AppErrorCode.UNKNOWN, + ) + } + + private fun RecordingState.toMeasurementRequest() = MeasurementRequest( + sensorIds = selectedSensorIds, + includesGps = includesGps, + samplingPeriodIndex = preferences.sensorSamplingPeriod, + stopOnLowBattery = preferences.restrictMeasurementOnLowBattery, + useWakeLock = preferences.useWakeLock, + gpsIntervalSeconds = preferences.gpsIntervalSeconds, + gpsMinDistanceMeters = preferences.gpsMinDistanceMeters, + wearSensorIds = selectedWearSensorIds, + wearIncludesGps = wearIncludesGps, + customName = customMeasurementName, + measurementType = measurementType, + delaySeconds = startDelaySeconds, + durationSeconds = if (measurementType == "TIMED") durationSeconds.coerceAtLeast(1) else 0, + notes = notes.lines().map(String::trim).filter(String::isNotEmpty), + alarmOffsetsSeconds = alarmOffsets.split(',', ';', ' ') + .mapNotNull(String::toIntOrNull).filter { it >= 0 }, + activityRecognition = activityRecognition, + activityRecognitionPeriodSeconds = activityRecognitionPeriodSeconds, + significantMotion = significantMotion, + ) + + private fun RecordingState.includesHeartRate(): Boolean = sensors.any { + it.isHeartRate && it.type in selectedSensorIds + } + + private fun MeasurementRequest.hasAnySource(): Boolean = sensorIds.isNotEmpty() || includesGps || + wearSensorIds.isNotEmpty() || wearIncludesGps || activityRecognition || significantMotion +} diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorBoxApp.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorBoxApp.kt index 6a19ac6..2b96ee7 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorBoxApp.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorBoxApp.kt @@ -34,23 +34,48 @@ import androidx.navigation3.ui.NavDisplay import com.motionapps.sensorservices.session.MeasurementSessionState @Composable -fun SensorBoxApp(state: MainState, onIntent: (MainIntent) -> Unit) { - if (!state.hasLoadedPreferences) { +fun SensorBoxApp( + mainState: MainState, + onboardingState: OnboardingState, + recordingState: RecordingState, + settingsState: SettingsState, + onNavigate: (MainRoute) -> Unit, + onOnboardingIntent: (OnboardingIntent) -> Unit, + onRecordingIntent: (RecordingIntent) -> Unit, + onSettingsIntent: (SettingsIntent) -> Unit, +) { + if (!mainState.hasLoadedPreferences) { Box(Modifier.fillMaxSize().background(MaterialTheme.colorScheme.background)) return } - if (state.preferences.keepPhoneDisplayOn && state.session is MeasurementSessionState.Running) { - KeepScreenAwake() - } - SensorBoxNavHost(state, onIntent) + if (mainState.keepScreenAwake && mainState.session is MeasurementSessionState.Running) KeepScreenAwake() + SensorBoxNavHost( + mainState = mainState, + onboardingState = onboardingState, + recordingState = recordingState, + settingsState = settingsState, + onNavigate = onNavigate, + onOnboardingIntent = onOnboardingIntent, + onRecordingIntent = onRecordingIntent, + onSettingsIntent = onSettingsIntent, + ) } @Composable -private fun SensorBoxNavHost(state: MainState, onIntent: (MainIntent) -> Unit) { - val backStack = rememberNavBackStack(state.route) - val displayedRoute = state.displayedRoute() +private fun SensorBoxNavHost( + mainState: MainState, + onboardingState: OnboardingState, + recordingState: RecordingState, + settingsState: SettingsState, + onNavigate: (MainRoute) -> Unit, + onOnboardingIntent: (OnboardingIntent) -> Unit, + onRecordingIntent: (RecordingIntent) -> Unit, + onSettingsIntent: (SettingsIntent) -> Unit, +) { + val backStack = rememberNavBackStack(mainState.route) + val displayedRoute = mainState.displayedRoute() SynchronizeBackStack(backStack, displayedRoute) - val navigateBack = { navigateBack(state, backStack, onIntent) } + val navigateBack = { navigateBack(mainState, backStack, onNavigate) } NavDisplay( backStack = backStack, @@ -62,8 +87,12 @@ private fun SensorBoxNavHost(state: MainState, onIntent: (MainIntent) -> Unit) { entry { route -> RouteContent( route = route, - state = state, - onIntent = onIntent, + onboardingState = onboardingState, + recordingState = recordingState, + settingsState = settingsState, + onOnboardingIntent = onOnboardingIntent, + onRecordingIntent = onRecordingIntent, + onSettingsIntent = onSettingsIntent, onBack = navigateBack, ) } @@ -80,10 +109,7 @@ private fun MainState.displayedRoute() = if (session is MeasurementSessionState. @Composable private fun SynchronizeBackStack(backStack: NavBackStack, displayedRoute: MainRoute) { LaunchedEffect(displayedRoute) { - if ( - displayedRoute != MainRoute.ACTIVE_MEASUREMENT && - backStack.lastOrNull() == MainRoute.ACTIVE_MEASUREMENT - ) { + if (displayedRoute != MainRoute.ACTIVE_MEASUREMENT && backStack.lastOrNull() == MainRoute.ACTIVE_MEASUREMENT) { backStack.removeLastOrNull() } if (backStack.lastOrNull() != displayedRoute) { @@ -93,11 +119,11 @@ private fun SynchronizeBackStack(backStack: NavBackStack, displayedRoute } } -private fun navigateBack(state: MainState, backStack: NavBackStack, onIntent: (MainIntent) -> Unit) { +private fun navigateBack(state: MainState, backStack: NavBackStack, onNavigate: (MainRoute) -> Unit) { if (state.session is MeasurementSessionState.Running) return if (backStack.size > 1) backStack.removeLastOrNull() val destination = backStack.lastOrNull() as? MainRoute ?: MainRoute.RECORD - if (destination != MainRoute.ACTIVE_MEASUREMENT) onIntent(MainIntent.Navigate(destination)) + if (destination != MainRoute.ACTIVE_MEASUREMENT) onNavigate(destination) } private fun MainRoute.isRootDestination() = when (this) { @@ -116,31 +142,42 @@ private fun MainRoute.isRootDestination() = when (this) { } @Composable -private fun RouteContent(route: MainRoute, state: MainState, onIntent: (MainIntent) -> Unit, onBack: () -> Unit) { +private fun RouteContent( + route: MainRoute, + onboardingState: OnboardingState, + recordingState: RecordingState, + settingsState: SettingsState, + onOnboardingIntent: (OnboardingIntent) -> Unit, + onRecordingIntent: (RecordingIntent) -> Unit, + onSettingsIntent: (SettingsIntent) -> Unit, + onBack: () -> Unit, +) { when (route) { - MainRoute.ONBOARDING -> OnboardingScreen(state, onIntent) + MainRoute.ONBOARDING -> OnboardingScreen(onboardingState, onOnboardingIntent) MainRoute.ACTIVE_MEASUREMENT -> FullScreen { modifier -> - ActiveMeasurementScreen(state, onIntent, modifier) + ActiveMeasurementScreen(recordingState, onRecordingIntent, modifier) } MainRoute.SENSOR_DETAILS -> FullScreen { modifier -> - SensorDetailsScreen(state, onBack, { onIntent(MainIntent.Navigate(MainRoute.SENSOR_PREVIEW)) }, modifier) + SensorDetailsScreen( + recordingState, + onBack, + { onRecordingIntent(RecordingIntent.Navigate(MainRoute.SENSOR_PREVIEW)) }, + modifier, + ) } MainRoute.SENSOR_PREVIEW -> FullScreen { modifier -> - SensorPreviewScreen(state = state, onBack = onBack, modifier = modifier) + SensorPreviewScreen(state = recordingState, onBack = onBack, modifier = modifier) } MainRoute.SETUP -> FullScreen { modifier -> MeasurementSetupScreen( - state = state, - onIntent = onIntent, + state = recordingState, + onIntent = onRecordingIntent, modifier = modifier, - onBack = { - onIntent(MainIntent.ReturnToSensorSelection) - onBack() - }, + onBack = { onRecordingIntent(RecordingIntent.ReturnToSensorSelection) }, ) } @@ -148,10 +185,17 @@ private fun RouteContent(route: MainRoute, state: MainState, onIntent: (MainInte OpenSourceLicensesScreen(onBack = onBack, modifier = modifier) } - MainRoute.RECORD -> FullScreen { modifier -> RecordScreen(state, onIntent, modifier) } + MainRoute.RECORD -> FullScreen { modifier -> + RecordScreen(recordingState, onRecordingIntent, modifier) + } MainRoute.SETTINGS -> FullScreen { modifier -> - SettingsScreen(state = state, onIntent = onIntent, modifier = modifier, onBack = onBack) + SettingsScreen( + state = settingsState, + onIntent = onSettingsIntent, + modifier = modifier, + onBack = onBack, + ) } MainRoute.PRIVACY -> FullScreen { modifier -> PrivacyScreen(onBack, modifier) } @@ -179,11 +223,6 @@ private fun screenFadeInTween() = tween(SCREEN_FADE_IN_MILLIS, easing = F private fun screenFadeOutTween() = tween(SCREEN_FADE_OUT_MILLIS, easing = FastOutSlowInEasing) -private const val SCREEN_TRANSITION_MILLIS = 300 -private const val SCREEN_FADE_IN_MILLIS = 240 -private const val SCREEN_FADE_OUT_MILLIS = 180 -private const val SCREEN_SLIDE_DIVISOR = 5 - @Composable private fun KeepScreenAwake() { val view = LocalView.current @@ -202,13 +241,14 @@ private fun FullScreen(content: @Composable (Modifier) -> Unit) { contentAlignment = Alignment.TopCenter, ) { content( - Modifier - .widthIn(max = ADAPTIVE_CONTENT_MAX_WIDTH) - .fillMaxWidth() - .fillMaxHeight(), + Modifier.widthIn(max = ADAPTIVE_CONTENT_MAX_WIDTH).fillMaxWidth().fillMaxHeight(), ) } } } +private const val SCREEN_TRANSITION_MILLIS = 300 +private const val SCREEN_FADE_IN_MILLIS = 240 +private const val SCREEN_FADE_OUT_MILLIS = 180 +private const val SCREEN_SLIDE_DIVISOR = 5 private val ADAPTIVE_CONTENT_MAX_WIDTH = 840.dp diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorDetailsScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorDetailsScreen.kt index 1eeb41c..dcf9535 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorDetailsScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorDetailsScreen.kt @@ -36,7 +36,12 @@ import com.motionapps.sensorbox.domain.sensors.SensorDescriptor import com.motionapps.sensorservices.handlers.GPSHandler @Composable -fun SensorDetailsScreen(state: MainState, onBack: () -> Unit, onPreview: () -> Unit, modifier: Modifier = Modifier) { +fun SensorDetailsScreen( + state: RecordingState, + onBack: () -> Unit, + onPreview: () -> Unit, + modifier: Modifier = Modifier, +) { val sensor = state.detailsSensorType?.let { type -> state.sensors.firstOrNull { it.type == type } } val canPreview = state.detailsSensorType == null || sensor?.type != Sensor.TYPE_STEP_DETECTOR val title = when { @@ -105,7 +110,7 @@ private fun HardwareSensorDetails(sensor: SensorDescriptor) { } @Composable -private fun GpsDetails(state: MainState) { +private fun GpsDetails(state: RecordingState) { var permissionRevision by remember { mutableStateOf(0) } val permissionRequest = rememberLauncherForActivityResult( ActivityResultContracts.RequestMultiplePermissions(), @@ -134,7 +139,7 @@ private fun GpsDetails(state: MainState) { } @Composable -private fun GpsDetailRows(details: GpsDetailsState, state: MainState, unavailableValue: String) { +private fun GpsDetailRows(details: GpsDetailsState, state: RecordingState, unavailableValue: String) { DetailRow( stringResource(R.string.detail_latitude), details.location?.latitude?.toString() ?: unavailableValue, diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorPreviewScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorPreviewScreen.kt index b4682e8..177c4f9 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorPreviewScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SensorPreviewScreen.kt @@ -50,7 +50,7 @@ import com.motionapps.sensorbox.domain.sensors.SensorDescriptor import kotlin.math.max @Composable -fun SensorPreviewScreen(state: MainState, onBack: () -> Unit, modifier: Modifier = Modifier) { +fun SensorPreviewScreen(state: RecordingState, onBack: () -> Unit, modifier: Modifier = Modifier) { val sensor = state.detailsSensorType?.let { type -> state.sensors.firstOrNull { it.type == type } } val title = when { state.detailsSensorType == null -> stringResource(R.string.gps_preview) @@ -310,7 +310,7 @@ private fun ChartLegend(label: String, color: Color) { } @Composable -private fun GpsPreview(state: MainState) { +private fun GpsPreview(state: RecordingState) { var permissionRevision by remember { mutableIntStateOf(0) } val permissionRequest = rememberLauncherForActivityResult( ActivityResultContracts.RequestMultiplePermissions(), diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsContract.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsContract.kt new file mode 100644 index 0000000..ab6521a --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsContract.kt @@ -0,0 +1,37 @@ +package com.motionapps.sensorbox.presentation.main + +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.preferences.AppPreferences + +data class SettingsState( + val preferences: AppPreferences = AppPreferences(), + val diagnosticsText: String? = null, + val errorCode: AppErrorCode? = null, +) + +sealed interface SettingsIntent { + data class SetSamplingPeriod(val index: Int) : SettingsIntent + data class SetLowBatteryRestriction(val enabled: Boolean) : SettingsIntent + data class SetWakeLock(val enabled: Boolean) : SettingsIntent + data class SetKeepScreenAwake(val enabled: Boolean) : SettingsIntent + data class SetGpsInterval(val seconds: Int) : SettingsIntent + data class SetGpsDistance(val meters: Int) : SettingsIntent + data object RequestBatteryOptimizationExemption : SettingsIntent + data object ShareDiagnosticsText : SettingsIntent + data object ShareDiagnosticsFile : SettingsIntent + data object ViewDiagnostics : SettingsIntent + data object CopyDiagnostics : SettingsIntent + data object ClearDiagnostics : SettingsIntent + data object DismissDiagnostics : SettingsIntent + data class Navigate(val route: MainRoute) : SettingsIntent +} + +sealed interface SettingsEffect { + data object RequestBatteryOptimizationExemption : SettingsEffect + data object ShareDiagnosticsText : SettingsEffect + data object ShareDiagnosticsFile : SettingsEffect + data class CopyDiagnosticsText(val text: String) : SettingsEffect + data object DiagnosticsCleared : SettingsEffect + data class DiagnosticsFailed(val code: AppErrorCode) : SettingsEffect + data class Navigate(val route: MainRoute) : SettingsEffect +} diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsScreen.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsScreen.kt index be3723c..5656660 100644 --- a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsScreen.kt +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsScreen.kt @@ -10,10 +10,14 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.AlertDialog import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults @@ -45,10 +49,10 @@ import com.motionapps.sensorbox.R @Composable fun SettingsScreen( - state: MainState, - onIntent: (MainIntent) -> Unit, + state: SettingsState, + onIntent: (SettingsIntent) -> Unit, modifier: Modifier = Modifier, - onBack: () -> Unit = { onIntent(MainIntent.Navigate(MainRoute.RECORD)) }, + onBack: () -> Unit = { onIntent(SettingsIntent.Navigate(MainRoute.RECORD)) }, ) { val isBatteryOptimizationExempt = rememberBatteryOptimizationExemption() LazyColumn( @@ -59,19 +63,24 @@ fun SettingsScreen( item { SensorBoxTopAppBar(stringResource(R.string.measurement_settings), onBack) } - item { SamplingSetting(state.preferences.sensorSamplingPeriod, onIntent) } + item { + SamplingSetting(state.preferences.sensorSamplingPeriod) { index -> + onIntent(SettingsIntent.SetSamplingPeriod(index)) + } + } item { BatteryGuardSetting(state, onIntent) } item { BatteryOptimizationSetting(isBatteryOptimizationExempt, onIntent) } item { CpuWakeLockSetting(state, onIntent) } item { ScreenAwakeSetting(state, onIntent) } item { GpsSettings(state, onIntent) } - item { DiagnosticsSetting(onIntent) } + item { DiagnosticsSetting(state, onIntent) } item { AboutSetting(onIntent) } } } @Composable -private fun DiagnosticsSetting(onIntent: (MainIntent) -> Unit) { +private fun DiagnosticsSetting(state: SettingsState, onIntent: (SettingsIntent) -> Unit) { + var confirmClear by rememberSaveable { mutableStateOf(false) } SensorBoxPanel { Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp)) { Text(stringResource(R.string.diagnostics_title), style = MaterialTheme.typography.titleMedium) @@ -79,22 +88,85 @@ private fun DiagnosticsSetting(onIntent: (MainIntent) -> Unit) { stringResource(R.string.diagnostics_summary), color = MaterialTheme.colorScheme.onSurfaceVariant, ) + SensorBoxSecondaryButton( + label = stringResource(R.string.diagnostics_view), + onClick = { onIntent(SettingsIntent.ViewDiagnostics) }, + modifier = Modifier.fillMaxWidth(), + ) + SensorBoxSecondaryButton( + label = stringResource(R.string.diagnostics_copy), + onClick = { onIntent(SettingsIntent.CopyDiagnostics) }, + modifier = Modifier.fillMaxWidth(), + ) SensorBoxSecondaryButton( label = stringResource(R.string.diagnostics_share_text), - onClick = { onIntent(MainIntent.ShareDiagnosticsText) }, + onClick = { onIntent(SettingsIntent.ShareDiagnosticsText) }, modifier = Modifier.fillMaxWidth(), ) SensorBoxSecondaryButton( label = stringResource(R.string.diagnostics_share_file), - onClick = { onIntent(MainIntent.ShareDiagnosticsFile) }, + onClick = { onIntent(SettingsIntent.ShareDiagnosticsFile) }, + modifier = Modifier.fillMaxWidth(), + ) + SensorBoxSecondaryButton( + label = stringResource(R.string.diagnostics_clear), + onClick = { confirmClear = true }, modifier = Modifier.fillMaxWidth(), ) } } + + state.diagnosticsText?.let { diagnostics -> + AlertDialog( + onDismissRequest = { onIntent(SettingsIntent.DismissDiagnostics) }, + title = { Text(stringResource(R.string.diagnostics_title)) }, + text = { + SelectionContainer { + Text( + text = diagnostics, + modifier = Modifier.heightIn(max = 420.dp).verticalScroll(rememberScrollState()), + ) + } + }, + confirmButton = { + TextButton(onClick = { onIntent(SettingsIntent.CopyDiagnostics) }) { + Text(stringResource(R.string.diagnostics_copy)) + } + }, + dismissButton = { + TextButton(onClick = { onIntent(SettingsIntent.DismissDiagnostics) }) { + Text(stringResource(android.R.string.cancel)) + } + }, + ) + } + + if (confirmClear) { + AlertDialog( + onDismissRequest = { confirmClear = false }, + title = { Text(stringResource(R.string.diagnostics_clear)) }, + text = { Text(stringResource(R.string.diagnostics_clear_confirmation)) }, + confirmButton = { + TextButton( + onClick = { + confirmClear = false + onIntent(SettingsIntent.ClearDiagnostics) + }, + ) { + Text(stringResource(R.string.diagnostics_clear)) + } + }, + dismissButton = { + TextButton(onClick = { confirmClear = false }) { + Text(stringResource(android.R.string.cancel)) + } + }, + ) + } } @Composable -private fun GpsSettings(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun GpsSettings(state: SettingsState, onIntent: (SettingsIntent) -> Unit) { Column(verticalArrangement = Arrangement.spacedBy(10.dp)) { NumberPickerSetting( stringResource(R.string.gps_interval), @@ -106,7 +178,7 @@ private fun GpsSettings(state: MainState, onIntent: (MainIntent) -> Unit) { ), 1, 3_600, - ) { onIntent(MainIntent.SetGpsInterval(it)) } + ) { onIntent(SettingsIntent.SetGpsInterval(it)) } NumberPickerSetting( stringResource(R.string.gps_minimum_distance), state.preferences.gpsMinDistanceMeters, @@ -117,7 +189,7 @@ private fun GpsSettings(state: MainState, onIntent: (MainIntent) -> Unit) { ), 0, 10_000, - ) { onIntent(MainIntent.SetGpsDistance(it)) } + ) { onIntent(SettingsIntent.SetGpsDistance(it)) } } } @@ -189,34 +261,34 @@ private fun NumberPickerSetting( } @Composable -private fun BatteryGuardSetting(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun BatteryGuardSetting(state: SettingsState, onIntent: (SettingsIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.battery_guard), description = stringResource(R.string.battery_guard_settings_description), checked = state.preferences.restrictMeasurementOnLowBattery, - ) { onIntent(MainIntent.SetLowBatteryRestriction(it)) } + ) { onIntent(SettingsIntent.SetLowBatteryRestriction(it)) } } @Composable -private fun CpuWakeLockSetting(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun CpuWakeLockSetting(state: SettingsState, onIntent: (SettingsIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.keep_cpu_awake), description = stringResource(R.string.keep_cpu_awake_settings_description), checked = state.preferences.useWakeLock, - ) { onIntent(MainIntent.SetWakeLock(it)) } + ) { onIntent(SettingsIntent.SetWakeLock(it)) } } @Composable -private fun ScreenAwakeSetting(state: MainState, onIntent: (MainIntent) -> Unit) { +private fun ScreenAwakeSetting(state: SettingsState, onIntent: (SettingsIntent) -> Unit) { BooleanSetting( title = stringResource(R.string.keep_screen_awake), description = stringResource(R.string.keep_screen_awake_settings_description), checked = state.preferences.keepPhoneDisplayOn, - ) { onIntent(MainIntent.SetKeepScreenAwake(it)) } + ) { onIntent(SettingsIntent.SetKeepScreenAwake(it)) } } @Composable -private fun BatteryOptimizationSetting(isExempt: Boolean, onIntent: (MainIntent) -> Unit) { +private fun BatteryOptimizationSetting(isExempt: Boolean, onIntent: (SettingsIntent) -> Unit) { SensorBoxPanel { Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp)) { Text(stringResource(R.string.battery_optimization), style = MaterialTheme.typography.titleMedium) @@ -229,7 +301,7 @@ private fun BatteryOptimizationSetting(isExempt: Boolean, onIntent: (MainIntent) if (!isExempt) { SensorBoxSecondaryButton( label = stringResource(R.string.exclude_from_battery_saving), - onClick = { onIntent(MainIntent.RequestBatteryOptimizationExemption) }, + onClick = { onIntent(SettingsIntent.RequestBatteryOptimizationExemption) }, modifier = Modifier.fillMaxWidth(), ) } @@ -238,7 +310,7 @@ private fun BatteryOptimizationSetting(isExempt: Boolean, onIntent: (MainIntent) } @Composable -private fun AboutSetting(onIntent: (MainIntent) -> Unit) { +private fun AboutSetting(onIntent: (SettingsIntent) -> Unit) { var showAboutDialog by rememberSaveable { mutableStateOf(false) } SensorBoxPanel { @@ -261,11 +333,11 @@ private fun AboutSetting(onIntent: (MainIntent) -> Unit) { onDismiss = { showAboutDialog = false }, onPrivacy = { showAboutDialog = false - onIntent(MainIntent.Navigate(MainRoute.PRIVACY)) + onIntent(SettingsIntent.Navigate(MainRoute.PRIVACY)) }, onLicenses = { showAboutDialog = false - onIntent(MainIntent.Navigate(MainRoute.LICENSES)) + onIntent(SettingsIntent.Navigate(MainRoute.LICENSES)) }, ) } @@ -291,7 +363,7 @@ private fun Context.isBatteryOptimizationExempt(): Boolean = getSystemService(PowerManager::class.java).isIgnoringBatteryOptimizations(packageName) @Composable -fun SamplingSetting(selected: Int, onIntent: (MainIntent) -> Unit) { +fun SamplingSetting(selected: Int, onSamplingPeriod: (Int) -> Unit) { SensorBoxPanel { Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp)) { Text(stringResource(R.string.sensor_sampling), style = MaterialTheme.typography.titleMedium) @@ -307,7 +379,7 @@ fun SamplingSetting(selected: Int, onIntent: (MainIntent) -> Unit) { R.string.sampling_normal, ).forEachIndexed { index, label -> SamplingChip(stringResource(label), selected == index) { - onIntent(MainIntent.SetSamplingPeriod(index)) + onSamplingPeriod(index) } } } diff --git a/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsViewModel.kt b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsViewModel.kt new file mode 100644 index 0000000..c328990 --- /dev/null +++ b/app/src/main/java/com/motionapps/sensorbox/presentation/main/SettingsViewModel.kt @@ -0,0 +1,138 @@ +package com.motionapps.sensorbox.presentation.main + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticsStore +import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent +import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository +import com.motionapps.sensorbox.di.IoDispatcher +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class SettingsViewModel @Inject constructor( + private val preferencesRepository: AppPreferencesRepository, + private val diagnosticsStore: DiagnosticsStore, + @IoDispatcher private val ioDispatcher: CoroutineDispatcher, +) : ViewModel() { + private val mutableState = MutableStateFlow(SettingsState()) + private val mutableEffects = Channel(Channel.BUFFERED) + + val state: StateFlow = mutableState.asStateFlow() + val effects = mutableEffects.receiveAsFlow() + + init { + viewModelScope.launch { + preferencesRepository.preferences.collect { result -> + when (result) { + is AppResult.Success -> mutableState.value = state.value.copy( + preferences = result.value, + errorCode = null, + ) + + is AppResult.Failure -> mutableState.value = state.value.copy(errorCode = result.error.code) + } + } + } + } + + fun accept(intent: SettingsIntent) { + intent.toPreferencesIntent()?.let { + update(it) + return + } + when (intent) { + SettingsIntent.RequestBatteryOptimizationExemption -> + mutableEffects.trySend(SettingsEffect.RequestBatteryOptimizationExemption) + + SettingsIntent.ShareDiagnosticsText -> mutableEffects.trySend(SettingsEffect.ShareDiagnosticsText) + + SettingsIntent.ShareDiagnosticsFile -> mutableEffects.trySend(SettingsEffect.ShareDiagnosticsFile) + + SettingsIntent.ViewDiagnostics -> viewDiagnostics() + + SettingsIntent.CopyDiagnostics -> copyDiagnostics() + + SettingsIntent.ClearDiagnostics -> clearDiagnostics() + + SettingsIntent.DismissDiagnostics -> mutableState.value = state.value.copy(diagnosticsText = null) + + is SettingsIntent.Navigate -> mutableEffects.trySend(SettingsEffect.Navigate(intent.route)) + + is SettingsIntent.SetSamplingPeriod, + is SettingsIntent.SetLowBatteryRestriction, + is SettingsIntent.SetWakeLock, + is SettingsIntent.SetKeepScreenAwake, + is SettingsIntent.SetGpsInterval, + is SettingsIntent.SetGpsDistance, + -> Unit + } + } + + private fun SettingsIntent.toPreferencesIntent(): AppPreferencesIntent? = when (this) { + is SettingsIntent.SetSamplingPeriod -> AppPreferencesIntent.SetSensorSamplingPeriod(index) + is SettingsIntent.SetLowBatteryRestriction -> AppPreferencesIntent.SetLowBatteryRestriction(enabled) + is SettingsIntent.SetWakeLock -> AppPreferencesIntent.SetWakeLock(enabled) + is SettingsIntent.SetKeepScreenAwake -> AppPreferencesIntent.SetKeepPhoneDisplayOn(enabled) + is SettingsIntent.SetGpsInterval -> AppPreferencesIntent.SetGpsInterval(seconds) + is SettingsIntent.SetGpsDistance -> AppPreferencesIntent.SetGpsMinDistance(meters) + else -> null + } + + private fun update(intent: AppPreferencesIntent) { + viewModelScope.launch { + preferencesRepository.dispatch(intent).onFailure { error -> + mutableState.value = state.value.copy(errorCode = error.code) + } + } + } + + private fun viewDiagnostics() { + viewModelScope.launch(ioDispatcher) { + when (val result = diagnosticsStore.readText()) { + is AppResult.Success -> mutableState.value = state.value.copy( + diagnosticsText = result.value, + errorCode = null, + ) + + is AppResult.Failure -> fail(result.error.code) + } + } + } + + private fun copyDiagnostics() { + viewModelScope.launch(ioDispatcher) { + when (val result = diagnosticsStore.readText()) { + is AppResult.Success -> mutableEffects.send(SettingsEffect.CopyDiagnosticsText(result.value)) + is AppResult.Failure -> fail(result.error.code) + } + } + } + + private fun clearDiagnostics() { + viewModelScope.launch(ioDispatcher) { + when (val result = diagnosticsStore.clear()) { + is AppResult.Success -> { + mutableState.value = state.value.copy(diagnosticsText = null, errorCode = null) + mutableEffects.send(SettingsEffect.DiagnosticsCleared) + } + + is AppResult.Failure -> fail(result.error.code) + } + } + } + + private suspend fun fail(code: AppErrorCode) { + mutableState.value = state.value.copy(errorCode = code) + mutableEffects.send(SettingsEffect.DiagnosticsFailed(code)) + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 77d5c1f..42222f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -228,5 +228,12 @@ Share diagnostics Send as text Send as file + View logs + Copy logs + Clear logs + Delete both retained diagnostic log files? This cannot be undone. + Diagnostics copied. + Diagnostics cleared. + The diagnostics action failed. Diagnostics could not be shared. The error was saved for a later attempt. diff --git a/app/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt b/app/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt index 5774387..34a824a 100644 --- a/app/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt +++ b/app/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt @@ -1,9 +1,9 @@ package com.motionapps.sensorbox -import java.io.File -import javax.xml.parsers.DocumentBuilderFactory import org.junit.Assert.assertEquals import org.junit.Test +import java.io.File +import javax.xml.parsers.DocumentBuilderFactory class PolicyLinksTest { @Test diff --git a/app/src/test/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinatorTest.kt b/app/src/test/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinatorTest.kt new file mode 100644 index 0000000..f2bd197 --- /dev/null +++ b/app/src/test/java/com/motionapps/sensorbox/domain/paired/PairedRecordingCoordinatorTest.kt @@ -0,0 +1,223 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.domain.measurement.MeasurementRequest +import com.motionapps.sensorbox.domain.measurement.PhoneRecordingController +import com.motionapps.sensorbox.domain.measurement.PreparedPhoneRecording +import com.motionapps.sensorservices.intent.MeasurementLaunchRequest +import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase +import com.motionapps.wearoslib.connectivity.WearConnectionRepository +import com.motionapps.wearoslib.connectivity.WearNode +import com.motionapps.wearoslib.protocol.SendWearCommandUseCase +import com.motionapps.wearoslib.protocol.WearAcknowledgementOutcome +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearCommandCodec +import com.motionapps.wearoslib.protocol.WearSessionCommand +import com.motionapps.wearoslib.protocol.WearStopReason +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +@OptIn(ExperimentalCoroutinesApi::class) +class PairedRecordingCoordinatorTest { + @Test + fun `Given Wear rejects prepare When start is requested Then local preparation is aborted`() = runTest { + val fixture = Fixture() + fixture.repository.onCommand = { command -> + when (command) { + is WearCommand.PrepareRecording -> fixture.ack( + command.sessionId, + WearSessionCommand.PREPARE, + WearAcknowledgementOutcome.REJECTED, + AppErrorCode.PERMISSION, + ) + + is WearCommand.AbortRecording -> fixture.succeed(command.sessionId, WearSessionCommand.ABORT) + + else -> Unit + } + } + + val result = fixture.coordinator.start(pairedRequest()) + + assertTrue(result.isFailure) + assertEquals(1, fixture.local.abortCalls) + assertTrue(fixture.repository.commands.any { it is WearCommand.AbortRecording }) + assertEquals(0, fixture.local.commitCalls) + } + + @Test + fun `Given no prepare ack When start times out Then three sends and both sides abort`() = runTest { + val fixture = Fixture() + fixture.repository.onCommand = { command -> + if (command is WearCommand.AbortRecording) { + fixture.succeed(command.sessionId, WearSessionCommand.ABORT) + } + } + + val result = fixture.coordinator.start(pairedRequest()) + + assertEquals(AppErrorCode.TIMEOUT, result.errorOrNull()?.code) + assertEquals(3, fixture.repository.commands.count { it is WearCommand.PrepareRecording }) + assertEquals(1, fixture.local.abortCalls) + } + + @Test + fun `Given commit is rejected When local commit succeeded Then both devices are compensated`() = runTest { + val fixture = Fixture() + fixture.repository.onCommand = { command -> + when (command) { + is WearCommand.PrepareRecording -> fixture.succeed(command.sessionId, WearSessionCommand.PREPARE) + + is WearCommand.CommitRecording -> fixture.ack( + command.sessionId, + WearSessionCommand.COMMIT, + WearAcknowledgementOutcome.FAILED, + AppErrorCode.MEASUREMENT, + ) + + is WearCommand.AbortRecording -> fixture.succeed(command.sessionId, WearSessionCommand.ABORT) + + else -> Unit + } + } + + val result = fixture.coordinator.start(pairedRequest()) + + assertTrue(result.isFailure) + assertEquals(1, fixture.local.commitCalls) + assertEquals(1, fixture.local.abortCalls) + assertTrue(fixture.repository.commands.any { it is WearCommand.AbortRecording }) + } + + @Test + fun `Given local stop fails When paired recording stops Then remote stop is still attempted`() = runTest { + val fixture = Fixture() + fixture.repository.onCommand = { command -> + when (command) { + is WearCommand.PrepareRecording -> fixture.succeed(command.sessionId, WearSessionCommand.PREPARE) + is WearCommand.CommitRecording -> fixture.succeed(command.sessionId, WearSessionCommand.COMMIT) + is WearCommand.StopRecording -> fixture.succeed(command.sessionId, WearSessionCommand.STOP) + else -> Unit + } + } + assertTrue(fixture.coordinator.start(pairedRequest()).isSuccess) + fixture.local.stopResult = failure("Stop local recording") + + val result = fixture.coordinator.stop() + + assertTrue(result.isFailure) + assertEquals(1, fixture.local.stopCalls) + assertTrue(fixture.repository.commands.any { it is WearCommand.StopRecording }) + } + + private fun pairedRequest() = MeasurementRequest( + sensorIds = setOf(1), + includesGps = false, + samplingPeriodIndex = 0, + stopOnLowBattery = true, + useWakeLock = true, + gpsIntervalSeconds = 10, + gpsMinDistanceMeters = 20, + wearSensorIds = setOf(21), + ) + + private class Fixture { + val inbox = WearAcknowledgementInbox() + val repository = InteractiveRepository() + val local = FakePhoneRecordingController() + val coordinator = PairedRecordingCoordinator( + localController = local, + sendCommand = SendWearCommandUseCase(SendWearMessageUseCase(repository)), + acknowledgementInbox = inbox, + sessionIdFactory = RecordingSessionIdFactory(), + diagnosticLogger = DiagnosticLogger { }, + ) + + fun succeed(sessionId: String, command: WearSessionCommand) { + ack(sessionId, command, WearAcknowledgementOutcome.SUCCEEDED) + } + + fun ack( + sessionId: String, + command: WearSessionCommand, + outcome: WearAcknowledgementOutcome, + errorCode: AppErrorCode? = null, + ) { + inbox.publish(WearCommand.Acknowledgement(sessionId, command, outcome, errorCode)) + } + } +} + +private class InteractiveRepository : WearConnectionRepository { + val commands = mutableListOf() + var onCommand: (WearCommand) -> Unit = { } + + override fun observeCapability(capability: String): Flow = + emptyFlow() + + override suspend fun findNode(capability: String): WearNode? = WearNode("wear", "Wear", isNearby = true) + + override suspend fun sendMessage(capability: String, path: String, payload: ByteArray): AppResult { + val command = WearCommandCodec.decode(payload).getOrThrow() + commands += command + onCommand(command) + return AppResult.success(Unit) + } +} + +private class FakePhoneRecordingController : PhoneRecordingController { + var commitCalls = 0 + var abortCalls = 0 + var stopCalls = 0 + var stopResult: AppResult = AppResult.success(Unit) + + override suspend fun prepare(sessionId: String, request: MeasurementRequest): AppResult = + AppResult.success( + PreparedPhoneRecording( + sessionId = sessionId, + launchRequest = MeasurementLaunchRequest( + sessionId = sessionId, + folderName = "fixture", + useInternalStorage = false, + sensorIds = request.sensorIds, + sensorSamplingPeriod = 0, + includesGps = request.includesGps, + stopOnLowBattery = request.stopOnLowBattery, + useWakeLock = request.useWakeLock, + gpsIntervalSeconds = request.gpsIntervalSeconds, + gpsMinDistanceMeters = request.gpsMinDistanceMeters, + ), + ), + ) + + override fun commit(prepared: PreparedPhoneRecording, startAtEpochMillis: Long): AppResult { + commitCalls += 1 + return AppResult.success(Unit) + } + + override fun abort(sessionId: String): AppResult { + abortCalls += 1 + return AppResult.success(Unit) + } + + override fun stop(sessionId: String, reason: WearStopReason): AppResult { + stopCalls += 1 + return stopResult + } + + override fun stopAny(reason: WearStopReason): AppResult = stopResult + + override fun annotate(text: String, timestampMillis: Long): AppResult = AppResult.success(Unit) +} + +private fun failure(operation: String): AppResult = AppResult.failure( + AppError(AppErrorCode.MEASUREMENT, operation), +) diff --git a/app/src/test/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcherTest.kt b/app/src/test/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcherTest.kt new file mode 100644 index 0000000..207dc92 --- /dev/null +++ b/app/src/test/java/com/motionapps/sensorbox/domain/paired/PhoneWearMessageDispatcherTest.kt @@ -0,0 +1,51 @@ +package com.motionapps.sensorbox.domain.paired + +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.wearoslib.WearOsConstants.PHONE_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearCommandCodec +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class PhoneWearMessageDispatcherTest { + @Test + fun `Given encoded command bytes When dispatched Then no Google callback type is required`() = runTest { + val commands = mutableListOf() + val dispatcher = PhoneWearMessageDispatcher( + commandHandler = PhoneWearCommandPolicy { command -> + commands += command + AppResult.success(Unit) + }, + diagnosticLogger = DiagnosticLogger { }, + ) + val payload = WearCommandCodec.encode(WearCommand.LaunchPhone).getOrThrow() + + val result = dispatcher.dispatch(PHONE_MESSAGE_PATH, payload) + + assertTrue(result.isSuccess) + assertEquals(listOf(WearCommand.LaunchPhone), commands) + } + + @Test + fun `Given a protocol v1 payload When dispatched Then command policy is not called`() = runTest { + var calls = 0 + val dispatcher = PhoneWearMessageDispatcher( + commandHandler = PhoneWearCommandPolicy { + calls += 1 + AppResult.success(Unit) + }, + diagnosticLogger = DiagnosticLogger { }, + ) + + val result = dispatcher.dispatch( + PHONE_MESSAGE_PATH, + byteArrayOf(0x53, 0x42, 0x58, 0x31, 1, 1), + ) + + assertTrue(result.isFailure) + assertEquals(0, calls) + } +} diff --git a/app/src/test/java/com/motionapps/sensorbox/presentation/main/FeatureViewModelTest.kt b/app/src/test/java/com/motionapps/sensorbox/presentation/main/FeatureViewModelTest.kt new file mode 100644 index 0000000..b0cbf75 --- /dev/null +++ b/app/src/test/java/com/motionapps/sensorbox/presentation/main/FeatureViewModelTest.kt @@ -0,0 +1,168 @@ +package com.motionapps.sensorbox.presentation.main + +import android.content.Intent +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticsStore +import com.motionapps.sensorbox.core.testing.FakeAppPreferencesRepository +import com.motionapps.sensorbox.domain.measurement.DocumentStorageGateway +import com.motionapps.sensorbox.domain.measurement.MeasurementRequest +import com.motionapps.sensorbox.domain.measurement.RecordingWorkflowGateway +import com.motionapps.sensorbox.domain.sensors.SensorDescriptor +import com.motionapps.sensorbox.domain.sensors.WearSensorCatalogStore +import com.motionapps.sensorbox.testing.MainDispatcherRule +import com.motionapps.sensorservices.session.MeasurementSessionStore +import com.motionapps.wearoslib.connectivity.FakeWearConnectionRepository +import com.motionapps.wearoslib.connectivity.ObserveWearCapabilityUseCase +import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.async +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Rule +import org.junit.Test +import java.io.File + +@OptIn(ExperimentalCoroutinesApi::class) +class FeatureViewModelTest { + @get:Rule + val mainDispatcherRule = MainDispatcherRule() + + @Test + fun `Given onboarding storage When completed Then state and navigation effect are owned by onboarding`() = runTest { + val viewModel = OnboardingViewModel( + preferencesRepository = FakeAppPreferencesRepository(), + documentStorage = FakeDocumentStorage(hasStorage = true), + ) + val effect = async { viewModel.effects.first() } + + viewModel.accept(OnboardingIntent.AdvanceOnboarding) + viewModel.accept(OnboardingIntent.CompleteOnboarding) + advanceUntilIdle() + + assertEquals(1, viewModel.state.value.page) + assertEquals(OnboardingEffect.Navigate(MainRoute.RECORD), effect.await()) + } + + @Test + fun `Given onboarding has no storage When completed Then storage error code is exposed`() = runTest { + val viewModel = OnboardingViewModel( + preferencesRepository = FakeAppPreferencesRepository(), + documentStorage = FakeDocumentStorage(hasStorage = false), + ) + + viewModel.accept(OnboardingIntent.CompleteOnboarding) + + assertEquals(AppErrorCode.STORAGE, viewModel.state.value.errorCode) + } + + @Test + fun `Given settings action When sampling changes Then settings owns updated preference state`() = runTest { + val viewModel = SettingsViewModel( + preferencesRepository = FakeAppPreferencesRepository(), + diagnosticsStore = FakeDiagnosticsStore(), + ioDispatcher = mainDispatcherRule.dispatcher, + ) + advanceUntilIdle() + + viewModel.accept(SettingsIntent.SetSamplingPeriod(3)) + advanceUntilIdle() + + assertEquals(3, viewModel.state.value.preferences.sensorSamplingPeriod) + } + + @Test + fun `Given diagnostics read failure When viewed Then settings emits the stable error code`() = runTest { + val diagnostics = FakeDiagnosticsStore( + readResult = AppResult.failure(AppError(AppErrorCode.STORAGE, "Read fixture diagnostics")), + ) + val viewModel = SettingsViewModel( + FakeAppPreferencesRepository(), + diagnostics, + mainDispatcherRule.dispatcher, + ) + val effect = async { viewModel.effects.first() } + + viewModel.accept(SettingsIntent.ViewDiagnostics) + advanceUntilIdle() + + assertEquals(AppErrorCode.STORAGE, viewModel.state.value.errorCode) + assertEquals(SettingsEffect.DiagnosticsFailed(AppErrorCode.STORAGE), effect.await()) + } + + @Test + fun `Given no selected source When recording starts Then recording exposes validation code`() = runTest { + val viewModel = recordingViewModel(FakeRecordingWorkflow()) + advanceUntilIdle() + + viewModel.accept(RecordingIntent.StartMeasurement) + + assertEquals(RecordingMessage.PICK_AT_LEAST_ONE_SOURCE, viewModel.state.value.message) + assertEquals(AppErrorCode.VALIDATION, viewModel.state.value.errorCode) + } + + @Test + fun `Given storage action When chosen Then recording emits only its picker effect`() = runTest { + val viewModel = recordingViewModel(FakeRecordingWorkflow()) + val effect = async { viewModel.effects.first() } + + viewModel.accept(RecordingIntent.ChooseStorage) + + assertEquals(RecordingEffect.PickStorageDirectory, effect.await()) + } + + private fun recordingViewModel(workflow: RecordingWorkflowGateway): RecordingViewModel { + val repository = FakeWearConnectionRepository() + return RecordingViewModel( + preferencesRepository = FakeAppPreferencesRepository(), + workflow = workflow, + sessionStore = MeasurementSessionStore(), + observeWearCapability = ObserveWearCapabilityUseCase(repository), + sendWearMessage = SendWearMessageUseCase(repository), + wearSensorCatalog = WearSensorCatalogStore(), + ) + } +} + +private class FakeDocumentStorage(private val hasStorage: Boolean) : DocumentStorageGateway { + override fun hasStorage(): AppResult = AppResult.success(hasStorage) + + override fun displayPath(): AppResult = AppResult.success(if (hasStorage) "fixture" else null) + + override fun persist(resultIntent: Intent): AppResult = AppResult.success(Unit) +} + +private class FakeDiagnosticsStore( + private val readResult: AppResult = AppResult.success("fixture diagnostics"), +) : DiagnosticsStore { + override fun readText(): AppResult = readResult + + override fun exportFile(): AppResult = AppResult.failure( + AppError(AppErrorCode.STORAGE, "Export fixture diagnostics"), + ) + + override fun clear(): AppResult = AppResult.success(Unit) +} + +private class FakeRecordingWorkflow : RecordingWorkflowGateway { + var startResult: AppResult = AppResult.success(Unit) + + override fun sensors(): List = emptyList() + + override fun storagePath(): String? = "fixture" + + override fun hasStorage(): Boolean = true + + override fun persistStorage(resultIntent: Intent?): AppResult = AppResult.success(Unit) + + override fun missingPermissions(request: MeasurementRequest, includesHeartRate: Boolean): Set = emptySet() + + override suspend fun start(request: MeasurementRequest): AppResult = startResult + + override suspend fun stop(): AppResult = AppResult.success(Unit) + + override fun annotate(text: String): AppResult = AppResult.success(Unit) +} diff --git a/app/src/test/java/com/motionapps/sensorbox/presentation/main/MainReducerTest.kt b/app/src/test/java/com/motionapps/sensorbox/presentation/main/MainReducerTest.kt deleted file mode 100644 index 67d5338..0000000 --- a/app/src/test/java/com/motionapps/sensorbox/presentation/main/MainReducerTest.kt +++ /dev/null @@ -1,118 +0,0 @@ -package com.motionapps.sensorbox.presentation.main - -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue -import org.junit.Test - -class MainReducerTest { - @Test - fun `Given an unselected sensor When toggled Then it becomes selected`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.ToggleSensor(sensorId = 1)) - - assertTrue(1 in actual.state.selectedSensorIds) - } - - @Test - fun `Given record state When storage is requested Then picker effect is emitted`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.ChooseStorage) - - assertEquals(MainEffect.PickStorageDirectory, actual.effect) - } - - @Test - fun `Given GPS disabled When toggled Then GPS becomes enabled`() { - val givenState = MainStateFixtures.state(includesGps = false) - - val actual = MainReducer.reduce(givenState, MainIntent.ToggleGps) - - assertTrue(actual.state.includesGps) - } - - @Test - fun `Given an unselected Wear sensor When toggled Then only Wear selection changes`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.ToggleWearSensor(sensorId = 21)) - - assertTrue(21 in actual.state.selectedWearSensorIds) - assertTrue(actual.state.selectedSensorIds.isEmpty()) - } - - @Test - fun `Given endless mode When timed mode is selected Then timing configuration is retained`() { - val givenState = MainStateFixtures.state().copy(durationSeconds = 60) - - val actual = MainReducer.reduce(givenState, MainIntent.SetMeasurementType("TIMED")) - - assertEquals("TIMED", actual.state.measurementType) - assertEquals(60, actual.state.durationSeconds) - } - - @Test - fun `Given selected sensors When setup is opened Then setup route is shown`() { - val givenState = MainStateFixtures.state(selectedSensorIds = setOf(1)) - - val actual = MainReducer.reduce(givenState, MainIntent.OpenMeasurementSetup) - - assertEquals(MainRoute.SETUP, actual.state.route) - } - - @Test - fun `Given a sensor When its information is opened Then details route retains its type`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.OpenSensorDetails(sensorType = 1)) - - assertEquals(MainRoute.SENSOR_DETAILS, actual.state.route) - assertEquals(1, actual.state.detailsSensorType) - } - - @Test - fun `Given measurement setup When returning Then sensor selection is shown`() { - val givenState = MainStateFixtures.state(route = MainRoute.SETUP, selectedSensorIds = setOf(1)) - - val actual = MainReducer.reduce(givenState, MainIntent.ReturnToSensorSelection) - - assertEquals(MainRoute.RECORD, actual.state.route) - } - - @Test - fun `Given later introduction page When going back Then previous page is shown`() { - val givenState = MainStateFixtures.state().copy(onboardingPage = 3) - - val actual = MainReducer.reduce(givenState, MainIntent.RetreatOnboarding) - - assertEquals(2, actual.state.onboardingPage) - } - - @Test - fun `Given policy introduction When privacy is opened Then privacy effect is emitted`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.OpenPrivacyPolicy) - - assertEquals(MainEffect.OpenPrivacyPolicy, actual.effect) - } - - @Test - fun `Given policy introduction When terms are opened Then terms effect is emitted`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.OpenTermsOfUse) - - assertEquals(MainEffect.OpenTermsOfUse, actual.effect) - } - - @Test - fun `Given battery introduction When exemption is requested Then settings effect is emitted`() { - val givenState = MainStateFixtures.state() - - val actual = MainReducer.reduce(givenState, MainIntent.RequestBatteryOptimizationExemption) - - assertEquals(MainEffect.RequestBatteryOptimizationExemption, actual.effect) - } -} diff --git a/app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingReducerTest.kt b/app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingReducerTest.kt new file mode 100644 index 0000000..0aa4a52 --- /dev/null +++ b/app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingReducerTest.kt @@ -0,0 +1,82 @@ +package com.motionapps.sensorbox.presentation.main + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class RecordingReducerTest { + @Test + fun `Given an unselected sensor When toggled Then it becomes selected`() { + val givenState = RecordingStateFixtures.state() + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.ToggleSensor(sensorId = 1)) + + assertTrue(1 in actual.state.selectedSensorIds) + } + + @Test + fun `Given record state When storage is requested Then picker effect is emitted`() { + val givenState = RecordingStateFixtures.state() + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.ChooseStorage) + + assertEquals(RecordingEffect.PickStorageDirectory, actual.effect) + } + + @Test + fun `Given GPS disabled When toggled Then GPS becomes enabled`() { + val givenState = RecordingStateFixtures.state(includesGps = false) + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.ToggleGps) + + assertTrue(actual.state.includesGps) + } + + @Test + fun `Given an unselected Wear sensor When toggled Then only Wear selection changes`() { + val givenState = RecordingStateFixtures.state() + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.ToggleWearSensor(sensorId = 21)) + + assertTrue(21 in actual.state.selectedWearSensorIds) + assertTrue(actual.state.selectedSensorIds.isEmpty()) + } + + @Test + fun `Given endless mode When timed mode is selected Then timing configuration is retained`() { + val givenState = RecordingStateFixtures.state().copy(durationSeconds = 60) + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.SetMeasurementType("TIMED")) + + assertEquals("TIMED", actual.state.measurementType) + assertEquals(60, actual.state.durationSeconds) + } + + @Test + fun `Given selected sensors When setup is opened Then setup route is shown`() { + val givenState = RecordingStateFixtures.state(selectedSensorIds = setOf(1)) + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.OpenMeasurementSetup) + + assertEquals(RecordingEffect.Navigate(MainRoute.SETUP), actual.effect) + } + + @Test + fun `Given a sensor When its information is opened Then details route retains its type`() { + val givenState = RecordingStateFixtures.state() + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.OpenSensorDetails(sensorType = 1)) + + assertEquals(RecordingEffect.Navigate(MainRoute.SENSOR_DETAILS), actual.effect) + assertEquals(1, actual.state.detailsSensorType) + } + + @Test + fun `Given measurement setup When returning Then sensor selection is shown`() { + val givenState = RecordingStateFixtures.state(selectedSensorIds = setOf(1)) + + val actual = RecordingReducer.reduce(givenState, RecordingIntent.ReturnToSensorSelection) + + assertEquals(RecordingEffect.Navigate(MainRoute.RECORD), actual.effect) + } +} diff --git a/app/src/test/java/com/motionapps/sensorbox/presentation/main/MainStateFixtures.kt b/app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingStateFixtures.kt similarity index 61% rename from app/src/test/java/com/motionapps/sensorbox/presentation/main/MainStateFixtures.kt rename to app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingStateFixtures.kt index 18f5cad..e79bd86 100644 --- a/app/src/test/java/com/motionapps/sensorbox/presentation/main/MainStateFixtures.kt +++ b/app/src/test/java/com/motionapps/sensorbox/presentation/main/RecordingStateFixtures.kt @@ -2,13 +2,8 @@ package com.motionapps.sensorbox.presentation.main import com.motionapps.sensorbox.domain.sensors.SensorDescriptor -object MainStateFixtures { - fun state( - route: MainRoute = MainRoute.RECORD, - selectedSensorIds: Set = emptySet(), - includesGps: Boolean = false, - ) = MainState( - route = route, +object RecordingStateFixtures { + fun state(selectedSensorIds: Set = emptySet(), includesGps: Boolean = false) = RecordingState( sensors = listOf( SensorDescriptor(type = 1, name = "Accelerometer", vendor = "Fixture", isHeartRate = false), ), diff --git a/app/src/test/java/com/motionapps/sensorbox/testing/MainDispatcherRule.kt b/app/src/test/java/com/motionapps/sensorbox/testing/MainDispatcherRule.kt new file mode 100644 index 0000000..38c9e27 --- /dev/null +++ b/app/src/test/java/com/motionapps/sensorbox/testing/MainDispatcherRule.kt @@ -0,0 +1,21 @@ +package com.motionapps.sensorbox.testing + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.TestDispatcher +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.setMain +import org.junit.rules.TestWatcher +import org.junit.runner.Description + +@OptIn(ExperimentalCoroutinesApi::class) +class MainDispatcherRule(val dispatcher: TestDispatcher = StandardTestDispatcher()) : TestWatcher() { + override fun starting(description: Description) { + Dispatchers.setMain(dispatcher) + } + + override fun finished(description: Description) { + Dispatchers.resetMain() + } +} diff --git a/build.gradle.kts b/build.gradle.kts index c953e63..10f9403 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.detekt) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.ksp) apply false + alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.oss.licenses) apply false } diff --git a/core-common/build.gradle.kts b/core-common/build.gradle.kts new file mode 100644 index 0000000..de002f4 --- /dev/null +++ b/core-common/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.detekt) +} + +kotlin { + jvmToolchain(17) +} + +dependencies { + implementation(libs.coroutines.core) + testImplementation(libs.junit) +} diff --git a/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppError.kt b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppError.kt new file mode 100644 index 0000000..c8d4ac3 --- /dev/null +++ b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppError.kt @@ -0,0 +1,45 @@ +package com.motionapps.sensorbox.core.error + +data class AppError( + val code: AppErrorCode, + val operation: String, + val diagnosticMessage: String, + val cause: Throwable? = null, + val context: Map = emptyMap(), + val isRetryable: Boolean = false, +) { + constructor(code: AppErrorCode, operation: String) : this( + code = code, + operation = operation, + diagnosticMessage = "$operation failed", + ) + + fun within(parentOperation: String, fallbackCode: AppErrorCode = code): AppError = copy( + code = if (code == AppErrorCode.UNKNOWN) fallbackCode else code, + operation = parentOperation, + diagnosticMessage = "$parentOperation failed during $operation", + context = context + ("failedOperation" to operation), + ) + + companion object { + fun from(code: AppErrorCode, operation: String, cause: Throwable): AppError = AppError( + code = code, + operation = operation, + diagnosticMessage = "$operation failed with ${cause::class.java.simpleName}", + cause = cause, + ) + } +} + +enum class AppErrorCode { + CONNECTIVITY, + EXTERNAL_ACTION, + MEASUREMENT, + PERMISSION, + PREFERENCES, + STORAGE, + VALIDATION, + TIMEOUT, + CONFLICT, + UNKNOWN, +} diff --git a/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppResult.kt b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppResult.kt new file mode 100644 index 0000000..86a4eaf --- /dev/null +++ b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/AppResult.kt @@ -0,0 +1,123 @@ +package com.motionapps.sensorbox.core.error + +import kotlinx.coroutines.CancellationException + +sealed interface AppResult { + val isSuccess: Boolean + get() = this is Success + + val isFailure: Boolean + get() = this is Failure + + fun getOrNull(): T? = when (this) { + is Success -> value + is Failure -> null + } + + fun errorOrNull(): AppError? = when (this) { + is Success -> null + is Failure -> error + } + + fun fold(onSuccess: (T) -> R, onFailure: (AppError) -> R): R = when (this) { + is Success -> onSuccess(value) + is Failure -> onFailure(error) + } + + fun map(transform: (T) -> R): AppResult = when (this) { + is Success -> success(transform(value)) + is Failure -> this + } + + fun getOrElse(onFailure: (AppError) -> @UnsafeVariance T): T = when (this) { + is Success -> value + is Failure -> onFailure(error) + } + + fun getOrDefault(defaultValue: @UnsafeVariance T): T = when (this) { + is Success -> value + is Failure -> defaultValue + } + + fun getOrThrow(): T = when (this) { + is Success -> value + is Failure -> throw IllegalStateException(error.diagnosticMessage, error.cause) + } + + fun onSuccess(action: (T) -> Unit): AppResult = apply { + if (this is Success) action(value) + } + + fun onFailure(action: (AppError) -> Unit): AppResult = apply { + if (this is Failure) action(error) + } + + data class Success(val value: T) : AppResult + + data class Failure(val error: AppError) : AppResult + + companion object { + fun success(value: T): AppResult = Success(value) + + fun failure(error: AppError): AppResult = Failure(error) + } +} + +inline fun AppResult.flatMap(transform: (T) -> AppResult): AppResult = when (this) { + is AppResult.Success -> transform(value) + is AppResult.Failure -> this +} + +suspend inline fun AppResult.suspendFlatMap( + crossinline transform: suspend (T) -> AppResult, +): AppResult = when (this) { + is AppResult.Success -> transform(value) + is AppResult.Failure -> this +} + +@Suppress("TooGenericExceptionCaught") +inline fun appResult(code: AppErrorCode, operation: String, block: () -> T): AppResult = try { + AppResult.success(block()) +} catch (error: CancellationException) { + throw error +} catch (error: Throwable) { + AppResult.failure(AppError.from(code, operation, error)) +} + +@Suppress("TooGenericExceptionCaught") +suspend inline fun suspendAppResult( + code: AppErrorCode, + operation: String, + crossinline block: suspend () -> T, +): AppResult = try { + AppResult.success(block()) +} catch (error: CancellationException) { + throw error +} catch (error: Throwable) { + AppResult.failure(AppError.from(code, operation, error)) +} + +fun AppResult.withAppError(code: AppErrorCode, operation: String): AppResult = when (this) { + is AppResult.Success -> this + is AppResult.Failure -> AppResult.failure(error.within(operation, code)) +} + +fun Iterable>.combineAppResults(code: AppErrorCode, operation: String): AppResult { + val errors = mapNotNull(AppResult<*>::errorOrNull) + if (errors.isEmpty()) return AppResult.success(Unit) + val causes = errors.mapNotNull(AppError::cause) + val firstCause = causes.firstOrNull() + causes.drop(1).forEach { cause -> firstCause?.addSuppressed(cause) } + return AppResult.failure( + AppError( + code = errors.first().code.takeUnless { it == AppErrorCode.UNKNOWN } ?: code, + operation = operation, + diagnosticMessage = "$operation failed in ${errors.size} operation(s)", + cause = firstCause, + context = mapOf( + "failureCount" to errors.size.toString(), + "failedOperations" to errors.joinToString(",") { it.operation }, + ), + ), + ) +} diff --git a/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/Diagnostics.kt b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/Diagnostics.kt new file mode 100644 index 0000000..338d26a --- /dev/null +++ b/core-common/src/main/kotlin/com/motionapps/sensorbox/core/error/Diagnostics.kt @@ -0,0 +1,41 @@ +package com.motionapps.sensorbox.core.error + +import java.io.File + +enum class DiagnosticSeverity { + INFO, + WARNING, + ERROR, + FATAL, +} + +data class DiagnosticEvent( + val severity: DiagnosticSeverity, + val code: AppErrorCode, + val operation: String, + val diagnosticMessage: String, + val cause: Throwable? = null, + val context: Map = emptyMap(), +) + +fun AppError.toDiagnosticEvent(severity: DiagnosticSeverity = DiagnosticSeverity.ERROR): DiagnosticEvent = + DiagnosticEvent( + severity = severity, + code = code, + operation = operation, + diagnosticMessage = diagnosticMessage, + cause = cause, + context = context, + ) + +fun interface DiagnosticLogger { + fun record(event: DiagnosticEvent) +} + +interface DiagnosticsStore { + fun readText(): AppResult + + fun exportFile(): AppResult + + fun clear(): AppResult +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 16d4218..74da485 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -23,6 +23,8 @@ android { } dependencies { + api(project(":core-common")) + implementation(libs.androidx.datastore.preferences) implementation(libs.androidx.documentfile) implementation(libs.coroutines.core) diff --git a/core/src/main/java/com/motionapps/sensorbox/core/error/AppDiagnostics.kt b/core/src/main/java/com/motionapps/sensorbox/core/error/AppDiagnostics.kt deleted file mode 100644 index bed03b5..0000000 --- a/core/src/main/java/com/motionapps/sensorbox/core/error/AppDiagnostics.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.motionapps.sensorbox.core.error - -import android.content.Context -import java.io.File -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale - -object AppDiagnostics { - private val lock = Any() - private val pending = ArrayDeque() - - @Volatile - private var applicationContext: Context? = null - - @Volatile - private var uncaughtHandlerInstalled = false - - fun install(context: Context) { - synchronized(lock) { - applicationContext = context.applicationContext - installUncaughtExceptionHandler() - val queued = pending.toList() - pending.clear() - queued.forEach(::appendSafely) - } - } - - private fun installUncaughtExceptionHandler() { - if (uncaughtHandlerInstalled) return - val previous = Thread.getDefaultUncaughtExceptionHandler() - Thread.setDefaultUncaughtExceptionHandler { thread, error -> - AppError.from(AppError.Kind.UNKNOWN, "Uncaught exception on ${thread.name}", error) - previous?.uncaughtException(thread, error) - } - uncaughtHandlerInstalled = true - } - - fun record(error: AppError) { - val entry = error.toDiagnosticEntry() - synchronized(lock) { - if (applicationContext == null) { - if (pending.size == MAX_PENDING_ENTRIES) pending.removeFirst() - pending.addLast(entry) - } else { - appendSafely(entry) - } - } - } - - fun readText(): Result = appResult(AppError.Kind.STORAGE, "Read diagnostics") { - synchronized(lock) { - val file = diagnosticsFile() - if (file.exists()) file.readText() else NO_DIAGNOSTICS - } - } - - fun exportFile(): Result = appResult(AppError.Kind.STORAGE, "Export diagnostics") { - synchronized(lock) { - diagnosticsFile().also { file -> - file.parentFile?.mkdirs() - if (!file.exists()) file.writeText(NO_DIAGNOSTICS) - } - } - } - - fun clear(): Result = appResult(AppError.Kind.STORAGE, "Clear diagnostics") { - synchronized(lock) { - val file = diagnosticsFile() - check(!file.exists() || file.delete()) { "Unable to delete diagnostics" } - } - } - - private fun appendSafely(entry: String) { - try { - val file = diagnosticsFile() - file.parentFile?.mkdirs() - if (file.length() + entry.length > MAX_FILE_BYTES) rotate(file) - file.appendText(entry) - } catch (_: Throwable) { - // Diagnostics must never become a second failure source. - } - } - - private fun rotate(file: File) { - val previous = File(file.parentFile, PREVIOUS_FILE_NAME) - if (previous.exists()) previous.delete() - if (file.exists()) file.renameTo(previous) - } - - private fun diagnosticsFile(): File { - val context = checkNotNull(applicationContext) { "Diagnostics are not initialized" } - return File(File(context.filesDir, DIRECTORY_NAME), FILE_NAME) - } - - private fun AppError.toDiagnosticEntry(): String = buildString { - val timestamp = SimpleDateFormat(TIMESTAMP_FORMAT, Locale.US).format(Date()) - append(timestamp).append(" | ").append(kind).append(" | ").append(operation).appendLine() - append(stackTraceToString().take(MAX_ENTRY_CHARS)).appendLine() - appendLine(ENTRY_SEPARATOR) - } - - private const val DIRECTORY_NAME = "diagnostics" - private const val FILE_NAME = "sensorbox-diagnostics.txt" - private const val PREVIOUS_FILE_NAME = "sensorbox-diagnostics-previous.txt" - private const val TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" - private const val ENTRY_SEPARATOR = "---" - private const val NO_DIAGNOSTICS = "No diagnostics have been recorded.\n" - private const val MAX_PENDING_ENTRIES = 20 - private const val MAX_ENTRY_CHARS = 32_000 - private const val MAX_FILE_BYTES = 1_000_000L -} diff --git a/core/src/main/java/com/motionapps/sensorbox/core/error/AppError.kt b/core/src/main/java/com/motionapps/sensorbox/core/error/AppError.kt deleted file mode 100644 index 5fd0da9..0000000 --- a/core/src/main/java/com/motionapps/sensorbox/core/error/AppError.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.motionapps.sensorbox.core.error - -import kotlinx.coroutines.CancellationException - -class AppError(val kind: Kind, val operation: String, cause: Throwable? = null) : - Exception(message(operation, cause), cause) { - init { - AppDiagnostics.record(this) - } - - enum class Kind { - CONNECTIVITY, - EXTERNAL_ACTION, - MEASUREMENT, - PERMISSION, - PREFERENCES, - STORAGE, - UNKNOWN, - } - - companion object { - fun from(kind: Kind, operation: String, cause: Throwable): AppError = - cause as? AppError ?: AppError(kind, operation, cause) - - private fun message(operation: String, cause: Throwable?): String = - cause?.message?.takeIf(String::isNotBlank)?.let { "$operation: $it" } ?: "$operation failed" - } -} - -@Suppress("TooGenericExceptionCaught") -inline fun appResult(kind: AppError.Kind, operation: String, block: () -> T): Result = try { - Result.success(block()) -} catch (error: CancellationException) { - throw error -} catch (error: Throwable) { - Result.failure(AppError.from(kind, operation, error)) -} - -@Suppress("TooGenericExceptionCaught") -suspend inline fun suspendAppResult( - kind: AppError.Kind, - operation: String, - crossinline block: suspend () -> T, -): Result = try { - Result.success(block()) -} catch (error: CancellationException) { - throw error -} catch (error: Throwable) { - Result.failure(AppError.from(kind, operation, error)) -} - -fun Result.withAppError(kind: AppError.Kind, operation: String): Result = fold( - onSuccess = Result.Companion::success, - onFailure = { Result.failure(AppError.from(kind, operation, it)) }, -) - -inline fun Result.flatMap(transform: (T) -> Result): Result = fold( - onSuccess = transform, - onFailure = Result.Companion::failure, -) - -suspend inline fun Result.suspendFlatMap(crossinline transform: suspend (T) -> Result): Result = fold( - onSuccess = { transform(it) }, - onFailure = Result.Companion::failure, -) - -fun Iterable>.combineAppResults(kind: AppError.Kind, operation: String): Result { - val failures = mapNotNull(Result<*>::exceptionOrNull) - if (failures.isEmpty()) return Result.success(Unit) - val first = failures.first() - failures.drop(1).forEach(first::addSuppressed) - return Result.failure(AppError.from(kind, operation, first)) -} diff --git a/core/src/main/java/com/motionapps/sensorbox/core/error/FileDiagnostics.kt b/core/src/main/java/com/motionapps/sensorbox/core/error/FileDiagnostics.kt new file mode 100644 index 0000000..fc46960 --- /dev/null +++ b/core/src/main/java/com/motionapps/sensorbox/core/error/FileDiagnostics.kt @@ -0,0 +1,161 @@ +package com.motionapps.sensorbox.core.error + +import android.content.Context +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +data class DiagnosticMetadata( + val appVersion: String, + val buildType: String, + val deviceModel: String, + val androidVersion: String, + val processName: String, +) + +class FileDiagnostics internal constructor( + private val diagnosticsDirectory: File, + private val metadata: DiagnosticMetadata, +) : DiagnosticLogger, + DiagnosticsStore { + private val lock = Any() + + constructor(context: Context, metadata: DiagnosticMetadata) : this( + diagnosticsDirectory = File(context.filesDir, DIRECTORY_NAME), + metadata = metadata, + ) + + @Volatile + private var uncaughtHandlerInstalled = false + + override fun record(event: DiagnosticEvent) { + val entry = event.toDiagnosticEntry().take(MAX_ENTRY_CHARS) + synchronized(lock) { + appendSafely(entry) + } + } + + fun installUncaughtExceptionHandler() { + if (uncaughtHandlerInstalled) return + val previous = Thread.getDefaultUncaughtExceptionHandler() + Thread.setDefaultUncaughtExceptionHandler { thread, error -> + record( + DiagnosticEvent( + severity = DiagnosticSeverity.FATAL, + code = AppErrorCode.UNKNOWN, + operation = "Uncaught exception", + diagnosticMessage = "Uncaught ${error::class.java.simpleName}", + cause = error, + context = mapOf("threadName" to thread.name), + ), + ) + previous?.uncaughtException(thread, error) + } + uncaughtHandlerInstalled = true + } + + override fun readText(): AppResult = appResult(AppErrorCode.STORAGE, "Read diagnostics") { + synchronized(lock) { + val files = listOf(previousFile(), currentFile()).filter(File::exists) + if (files.isEmpty()) NO_DIAGNOSTICS else files.joinToString(separator = "") { it.readText() } + } + } + + override fun exportFile(): AppResult = readText().flatMap { text -> + appResult(AppErrorCode.STORAGE, "Export diagnostics") { + synchronized(lock) { + diagnosticsDirectory.mkdirs() + exportFilePath().apply { writeText(text) } + } + } + } + + override fun clear(): AppResult = appResult(AppErrorCode.STORAGE, "Clear diagnostics") { + synchronized(lock) { + listOf(currentFile(), previousFile(), exportFilePath()).forEach { file -> + check(!file.exists() || file.delete()) { "Unable to delete diagnostics" } + } + } + } + + private fun appendSafely(entry: String) { + try { + diagnosticsDirectory.mkdirs() + val file = currentFile() + if (file.length() + entry.toByteArray().size > MAX_FILE_BYTES) rotate(file) + file.appendText(entry) + } catch (_: Throwable) { + // A diagnostics write must never become an application failure. + } + } + + private fun rotate(file: File) { + val previous = previousFile() + if (previous.exists()) previous.delete() + if (file.exists()) file.renameTo(previous) + } + + private fun DiagnosticEvent.toDiagnosticEntry(): String = buildString { + val timestamp = SimpleDateFormat(TIMESTAMP_FORMAT, Locale.US).format(Date()) + append(timestamp).append(" | ").append(severity).append(" | ").append(code).append(" | ") + .append(operation.safeText()).appendLine() + append("message=").append(diagnosticMessage.safeText()).appendLine() + append("appVersion=").append(metadata.appVersion.safeText()).appendLine() + append("buildType=").append(metadata.buildType.safeText()).appendLine() + append("deviceModel=").append(metadata.deviceModel.safeText()).appendLine() + append("androidVersion=").append(metadata.androidVersion.safeText()).appendLine() + append("process=").append(metadata.processName.safeText()).appendLine() + context.filterKeys(SAFE_CONTEXT_KEYS::contains).toSortedMap().forEach { (key, value) -> + append(key).append('=').append(value.safeText()).appendLine() + } + cause?.let { error -> + append("exception=").append(error::class.java.name).appendLine() + error.stackTrace.take(MAX_STACK_FRAMES).forEach { frame -> + append("at ").append(frame.className).append('.').append(frame.methodName) + .append('(').append(frame.fileName?.substringAfterLast('/')?.safeText() ?: "Unknown") + .append(':').append(frame.lineNumber).appendLine(")") + } + } + appendLine(ENTRY_SEPARATOR) + } + + private fun String.safeText(): String = replace('\n', ' ').replace('\r', ' ').take(MAX_FIELD_CHARS) + + private fun currentFile(): File = File(diagnosticsDirectory, FILE_NAME) + + private fun previousFile(): File = File(diagnosticsDirectory, PREVIOUS_FILE_NAME) + + private fun exportFilePath(): File = File(diagnosticsDirectory, EXPORT_FILE_NAME) + + private companion object { + const val DIRECTORY_NAME = "diagnostics" + const val FILE_NAME = "sensorbox-diagnostics.txt" + const val PREVIOUS_FILE_NAME = "sensorbox-diagnostics-previous.txt" + const val EXPORT_FILE_NAME = "sensorbox-diagnostics-export.txt" + const val TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + const val ENTRY_SEPARATOR = "---" + const val NO_DIAGNOSTICS = "No diagnostics have been recorded.\n" + const val MAX_ENTRY_CHARS = 32_000 + const val MAX_FIELD_CHARS = 512 + const val MAX_STACK_FRAMES = 80 + const val MAX_FILE_BYTES = 1_000_000L + val SAFE_CONTEXT_KEYS = setOf( + "androidVersion", + "buildType", + "durationMillis", + "failureCount", + "failedOperation", + "processName", + "protocolVersion", + "retryCount", + "samplingPeriod", + "sessionId", + "sourceCount", + "sourceType", + "state", + "stopReason", + "threadName", + ) + } +} diff --git a/core/src/main/java/com/motionapps/sensorbox/core/preferences/AppPreferencesRepository.kt b/core/src/main/java/com/motionapps/sensorbox/core/preferences/AppPreferencesRepository.kt index 5ab2def..a711f73 100644 --- a/core/src/main/java/com/motionapps/sensorbox/core/preferences/AppPreferencesRepository.kt +++ b/core/src/main/java/com/motionapps/sensorbox/core/preferences/AppPreferencesRepository.kt @@ -1,9 +1,10 @@ package com.motionapps.sensorbox.core.preferences +import com.motionapps.sensorbox.core.error.AppResult import kotlinx.coroutines.flow.Flow interface AppPreferencesRepository { - val preferences: Flow> + val preferences: Flow> - suspend fun dispatch(intent: AppPreferencesIntent): Result + suspend fun dispatch(intent: AppPreferencesIntent): AppResult } diff --git a/core/src/main/java/com/motionapps/sensorbox/core/preferences/DataStoreAppPreferencesRepository.kt b/core/src/main/java/com/motionapps/sensorbox/core/preferences/DataStoreAppPreferencesRepository.kt index aecb395..0814460 100644 --- a/core/src/main/java/com/motionapps/sensorbox/core/preferences/DataStoreAppPreferencesRepository.kt +++ b/core/src/main/java/com/motionapps/sensorbox/core/preferences/DataStoreAppPreferencesRepository.kt @@ -6,6 +6,8 @@ import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.suspendAppResult import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.Flow @@ -13,15 +15,15 @@ import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.map class DataStoreAppPreferencesRepository(private val dataStore: DataStore) : AppPreferencesRepository { - override val preferences: Flow> = dataStore.data - .map { values -> Result.success(values.toAppPreferences()) } + override val preferences: Flow> = dataStore.data + .map { values -> AppResult.success(values.toAppPreferences()) } .catch { error -> if (error is CancellationException) throw error - emit(Result.failure(AppError.from(AppError.Kind.PREFERENCES, "Read preferences", error))) + emit(AppResult.failure(AppError.from(AppErrorCode.PREFERENCES, "Read preferences", error))) } - override suspend fun dispatch(intent: AppPreferencesIntent): Result = suspendAppResult( - AppError.Kind.PREFERENCES, + override suspend fun dispatch(intent: AppPreferencesIntent): AppResult = suspendAppResult( + AppErrorCode.PREFERENCES, "Update preferences", ) { dataStore.edit { values -> diff --git a/core/src/main/java/com/motionapps/sensorbox/core/storage/NativeDocumentStorage.kt b/core/src/main/java/com/motionapps/sensorbox/core/storage/NativeDocumentStorage.kt index 9557d42..eaa69e1 100644 --- a/core/src/main/java/com/motionapps/sensorbox/core/storage/NativeDocumentStorage.kt +++ b/core/src/main/java/com/motionapps/sensorbox/core/storage/NativeDocumentStorage.kt @@ -4,18 +4,32 @@ import android.content.Context import android.content.Intent import androidx.documentfile.provider.DocumentFile import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap import java.io.InputStream import java.io.OutputStream object NativeDocumentStorage { - fun persistRootAccess(context: Context, intent: Intent, appDirectoryName: String): Result { + fun persistRootAccess(context: Context, intent: Intent, appDirectoryName: String): AppResult { val uri = intent.data ?: return storageFailure("Storage directory was not selected") val grantFlags = intent.flags and READ_WRITE_FLAGS if (grantFlags == 0) return storageFailure("Storage permission was not granted") - return appResult(AppError.Kind.STORAGE, "Persist storage permission") { - context.contentResolver.takePersistableUriPermission(uri, grantFlags) + return appResult(AppErrorCode.STORAGE, "Persist storage permission") { + when (grantFlags) { + Intent.FLAG_GRANT_READ_URI_PERMISSION -> context.contentResolver.takePersistableUriPermission( + uri, + Intent.FLAG_GRANT_READ_URI_PERMISSION, + ) + + Intent.FLAG_GRANT_WRITE_URI_PERMISSION -> context.contentResolver.takePersistableUriPermission( + uri, + Intent.FLAG_GRANT_WRITE_URI_PERMISSION, + ) + + else -> context.contentResolver.takePersistableUriPermission(uri, READ_WRITE_FLAGS) + } DocumentFile.fromTreeUri(context, uri) }.flatMap { selectedDirectory -> if (selectedDirectory?.isDirectory != true) { @@ -25,38 +39,41 @@ object NativeDocumentStorage { if (appDirectory(context, appDirectoryName, create = true) == null) { storageFailure("Storage directory is unavailable") } else { - Result.success(Unit) + AppResult.success(Unit) } } } - fun hasAppDirectory(context: Context, appDirectoryName: String): Result = appResult( - AppError.Kind.STORAGE, + fun hasAppDirectory(context: Context, appDirectoryName: String): AppResult = appResult( + AppErrorCode.STORAGE, "Check storage directory", ) { appDirectory(context, appDirectoryName, create = false)?.exists() == true } - fun displayPath(context: Context, appDirectoryName: String): Result = appResult( - AppError.Kind.STORAGE, + fun displayPath(context: Context, appDirectoryName: String): AppResult = appResult( + AppErrorCode.STORAGE, "Read storage path", ) { val selectedDirectory = appDirectory(context, appDirectoryName, create = false) ?: return@appResult null selectedDirectory.name ?: selectedDirectory.uri.lastPathSegment } - fun createMeasurementDirectory(context: Context, appDirectoryName: String, measurementName: String): Result = - appResult(AppError.Kind.STORAGE, "Access measurement root") { - appDirectory(context, appDirectoryName, create = false) - }.flatMap { appDirectory -> - if (appDirectory == null) return@flatMap storageFailure("Storage directory is not configured") - appResult(AppError.Kind.STORAGE, "Create measurement directory") { - findDirectory(appDirectory, measurementName) != null || - appDirectory.createDirectory(measurementName) != null - }.flatMap { created -> - if (created) Result.success(Unit) else storageFailure("Unable to create measurement directory") - } + fun createMeasurementDirectory( + context: Context, + appDirectoryName: String, + measurementName: String, + ): AppResult = appResult(AppErrorCode.STORAGE, "Access measurement root") { + appDirectory(context, appDirectoryName, create = false) + }.flatMap { appDirectory -> + if (appDirectory == null) return@flatMap storageFailure("Storage directory is not configured") + appResult(AppErrorCode.STORAGE, "Create measurement directory") { + findDirectory(appDirectory, measurementName) != null || + appDirectory.createDirectory(measurementName) != null + }.flatMap { created -> + if (created) AppResult.success(Unit) else storageFailure("Unable to create measurement directory") } + } fun openMeasurementFile( context: Context, @@ -65,29 +82,29 @@ object NativeDocumentStorage { mimeType: String, fileName: String, replaceExisting: Boolean = false, - ): Result = appResult(AppError.Kind.STORAGE, "Access measurement directory") { + ): AppResult = appResult(AppErrorCode.STORAGE, "Access measurement directory") { measurementDirectory(context, appDirectoryName, measurementName) }.flatMap { directory -> if (directory == null) return@flatMap storageFailure("Measurement directory is unavailable") createOrReplaceFile(directory, mimeType, fileName, replaceExisting).flatMap { createdFile -> if (createdFile == null) return@flatMap storageFailure("Unable to create measurement file") - appResult(AppError.Kind.STORAGE, "Open measurement file") { + appResult(AppErrorCode.STORAGE, "Open measurement file") { context.contentResolver.openOutputStream(createdFile.uri, "wt") }.flatMap { output -> - output?.let(Result.Companion::success) ?: storageFailure("Unable to open measurement file") + output?.let(AppResult.Companion::success) ?: storageFailure("Unable to open measurement file") } } } - fun deleteMeasurement(context: Context, appDirectoryName: String, measurementName: String): Result = - appResult(AppError.Kind.STORAGE, "Access measurement directory") { + fun deleteMeasurement(context: Context, appDirectoryName: String, measurementName: String): AppResult = + appResult(AppErrorCode.STORAGE, "Access measurement directory") { appDirectory(context, appDirectoryName, create = false) }.flatMap { appDirectory -> if (appDirectory == null) return@flatMap storageFailure("Storage directory is not configured") val directory = findDirectory(appDirectory, measurementName) ?: return@flatMap storageFailure("Measurement does not exist") - appResult(AppError.Kind.STORAGE, "Delete measurement") { directory.delete() }.flatMap { deleted -> - if (deleted) Result.success(Unit) else storageFailure("Unable to delete measurement") + appResult(AppErrorCode.STORAGE, "Delete measurement") { directory.delete() }.flatMap { deleted -> + if (deleted) AppResult.success(Unit) else storageFailure("Unable to delete measurement") } } @@ -98,7 +115,7 @@ object NativeDocumentStorage { measurementName: String, fileName: String, mimeType: String, - ): Result = openMeasurementFile( + ): AppResult = openMeasurementFile( context = context, appDirectoryName = appDirectoryName, measurementName = measurementName, @@ -106,7 +123,7 @@ object NativeDocumentStorage { fileName = fileName, replaceExisting = true, ).flatMap { output -> - appResult(AppError.Kind.STORAGE, "Copy measurement file") { + appResult(AppErrorCode.STORAGE, "Copy measurement file") { input.use { source -> output.use(source::copyTo) } Unit } @@ -148,7 +165,7 @@ private fun createOrReplaceFile( mimeType: String, fileName: String, replaceExisting: Boolean, -): Result = appResult(AppError.Kind.STORAGE, "Create measurement file") { +): AppResult = appResult(AppErrorCode.STORAGE, "Create measurement file") { val existing = directory.findFile(fileName) if (replaceExisting && existing != null) { if (existing.delete()) directory.createFile(normalizeMimeType(mimeType), fileName) else null @@ -157,8 +174,8 @@ private fun createOrReplaceFile( } } -private fun storageFailure(operation: String): Result = - Result.failure(AppError(AppError.Kind.STORAGE, operation)) +private fun storageFailure(operation: String): AppResult = + AppResult.failure(AppError(AppErrorCode.STORAGE, operation)) private fun releaseOtherRootPermissions(context: Context, selectedUri: android.net.Uri) { val resolver = context.contentResolver @@ -169,7 +186,7 @@ private fun releaseOtherRootPermissions(context: Context, selectedUri: android.n (if (permission.isReadPermission) Intent.FLAG_GRANT_READ_URI_PERMISSION else 0) or (if (permission.isWritePermission) Intent.FLAG_GRANT_WRITE_URI_PERMISSION else 0) if (flags != 0) { - appResult(AppError.Kind.STORAGE, "Release old storage permission") { + appResult(AppErrorCode.STORAGE, "Release old storage permission") { resolver.releasePersistableUriPermission(permission.uri, flags) } } diff --git a/core/src/test/java/com/motionapps/sensorbox/core/error/AppErrorTest.kt b/core/src/test/java/com/motionapps/sensorbox/core/error/AppErrorTest.kt index 6623341..45c3c0e 100644 --- a/core/src/test/java/com/motionapps/sensorbox/core/error/AppErrorTest.kt +++ b/core/src/test/java/com/motionapps/sensorbox/core/error/AppErrorTest.kt @@ -12,11 +12,11 @@ class AppErrorTest { fun `Given an operation failure When captured Then AppError is returned`() { val cause = IllegalStateException("disk unavailable") - val result = appResult(AppError.Kind.STORAGE, "Write file") { throw cause } + val result = appResult(AppErrorCode.STORAGE, "Write file") { throw cause } - val error = result.exceptionOrNull() + val error = result.errorOrNull() assertTrue(error is AppError) - assertEquals(AppError.Kind.STORAGE, (error as AppError).kind) + assertEquals(AppErrorCode.STORAGE, (error as AppError).code) assertEquals("Write file", error.operation) assertSame(cause, error.cause) } @@ -24,7 +24,7 @@ class AppErrorTest { @Test(expected = CancellationException::class) fun `Given coroutine cancellation When captured Then cancellation is rethrown`() { runBlocking { - suspendAppResult(AppError.Kind.CONNECTIVITY, "Send message") { + suspendAppResult(AppErrorCode.CONNECTIVITY, "Send message") { throw CancellationException("cancelled") } } diff --git a/core/src/test/java/com/motionapps/sensorbox/core/error/FileDiagnosticsTest.kt b/core/src/test/java/com/motionapps/sensorbox/core/error/FileDiagnosticsTest.kt new file mode 100644 index 0000000..b14462f --- /dev/null +++ b/core/src/test/java/com/motionapps/sensorbox/core/error/FileDiagnosticsTest.kt @@ -0,0 +1,95 @@ +package com.motionapps.sensorbox.core.error + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder + +class FileDiagnosticsTest { + @get:Rule + val temporaryFolder = TemporaryFolder() + + @Test + fun `Given many events When logs rotate Then only two one megabyte files remain`() { + val directory = temporaryFolder.newFolder("diagnostics") + val diagnostics = diagnostics(directory) + + repeat(2_500) { index -> diagnostics.record(event(message = "$index ${"x".repeat(1_000)}")) } + + val retainedLogs = directory.listFiles().orEmpty().filter { "export" !in it.name } + assertEquals(2, retainedLogs.size) + assertTrue(retainedLogs.all { it.length() <= 1_000_000L }) + assertTrue(diagnostics.readText().getOrNull().orEmpty().contains("2499 ")) + } + + @Test + fun `Given private context When event is recorded Then only allowlisted context is written`() { + val diagnostics = diagnostics(temporaryFolder.newFolder("diagnostics")) + diagnostics.record( + event( + message = "Controlled failure message", + context = mapOf( + "sessionId" to "session-123", + "sensorSamples" to "1.2,3.4,5.6", + "coordinates" to "48.1,17.1", + "annotation" to "private note", + "recordingName" to "private recording", + "safUri" to "content://private/path", + "rawPayload" to "secret bytes", + "deviceId" to "unique-device-id", + ), + ), + ) + + val text = diagnostics.readText().getOrNull().orEmpty() + assertTrue(text.contains("sessionId=session-123")) + assertFalse(text.contains("1.2,3.4,5.6")) + assertFalse(text.contains("48.1,17.1")) + assertFalse(text.contains("private note")) + assertFalse(text.contains("private recording")) + assertFalse(text.contains("content://private/path")) + assertFalse(text.contains("secret bytes")) + assertFalse(text.contains("unique-device-id")) + } + + @Test + fun `Given an unwritable location When event is recorded Then logger does not throw`() { + val fileInsteadOfDirectory = temporaryFolder.newFile("not-a-directory") + val diagnostics = diagnostics(fileInsteadOfDirectory) + + diagnostics.record(event(message = "Write failure")) + + assertTrue(fileInsteadOfDirectory.isFile) + } + + @Test + fun `Given retained logs When cleared Then reading returns the empty message`() { + val diagnostics = diagnostics(temporaryFolder.newFolder("diagnostics")) + diagnostics.record(event(message = "Before clear")) + + assertTrue(diagnostics.clear().isSuccess) + + assertEquals("No diagnostics have been recorded.\n", diagnostics.readText().getOrNull()) + } + + private fun diagnostics(directory: java.io.File) = FileDiagnostics( + diagnosticsDirectory = directory, + metadata = DiagnosticMetadata( + appVersion = "1.0", + buildType = "test", + deviceModel = "test model", + androidVersion = "test android", + processName = "test process", + ), + ) + + private fun event(message: String, context: Map = emptyMap()) = DiagnosticEvent( + severity = DiagnosticSeverity.ERROR, + code = AppErrorCode.STORAGE, + operation = "Test operation", + diagnosticMessage = message, + context = context, + ) +} diff --git a/core/src/testFixtures/java/com/motionapps/sensorbox/core/testing/FakeAppPreferencesRepository.kt b/core/src/testFixtures/java/com/motionapps/sensorbox/core/testing/FakeAppPreferencesRepository.kt index c6ce1eb..ede7036 100644 --- a/core/src/testFixtures/java/com/motionapps/sensorbox/core/testing/FakeAppPreferencesRepository.kt +++ b/core/src/testFixtures/java/com/motionapps/sensorbox/core/testing/FakeAppPreferencesRepository.kt @@ -1,5 +1,7 @@ package com.motionapps.sensorbox.core.testing +import com.motionapps.sensorbox.core.error.AppResult + import com.motionapps.sensorbox.core.preferences.AppPreferences import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent import com.motionapps.sensorbox.core.preferences.AppPreferencesReducer @@ -12,10 +14,10 @@ class FakeAppPreferencesRepository( ) : AppPreferencesRepository { private val mutablePreferences = MutableStateFlow(initial) - override val preferences = mutablePreferences.map(Result.Companion::success) + override val preferences = mutablePreferences.map(AppResult.Companion::success) - override suspend fun dispatch(intent: AppPreferencesIntent): Result { + override suspend fun dispatch(intent: AppPreferencesIntent): AppResult { mutablePreferences.value = AppPreferencesReducer.reduce(mutablePreferences.value, intent) - return Result.success(Unit) + return AppResult.success(Unit) } } diff --git a/docs/adr/0001-use-explicit-application-outcomes.md b/docs/adr/0001-use-explicit-application-outcomes.md new file mode 100644 index 0000000..5244340 --- /dev/null +++ b/docs/adr/0001-use-explicit-application-outcomes.md @@ -0,0 +1,5 @@ +# Use explicit application outcomes + +Expected failures crossing repository, storage, protocol, recording, use-case, or presentation interfaces use a shared `AppResult` and data-only `AppError`. Kotlin `Result` and custom exceptions do not cross those interfaces because callers need stable error codes, exhaustive handling, and diagnostics without constructor side effects. + +Infrastructure adapters translate expected exceptions and preserve safe causes. Application entry points record terminal failures through an injected local diagnostic logger. User-facing messages remain presentation decisions. diff --git a/docs/adr/0002-separate-recording-engine-from-android-adapters.md b/docs/adr/0002-separate-recording-engine-from-android-adapters.md new file mode 100644 index 0000000..e967f9e --- /dev/null +++ b/docs/adr/0002-separate-recording-engine-from-android-adapters.md @@ -0,0 +1,5 @@ +# Separate the recording engine from Android adapters + +Recording state, scheduling policy, source coordination, cleanup, and terminal events live in a pure Kotlin `recording-core` module. Android sensor capture, foreground hosting, notifications, wake locks, battery callbacks, GPS, and storage streams remain adapters in `sensorservices`. + +This split keeps the recording state machine testable without Android and prevents Wear transport policy from entering the local recording module. diff --git a/docs/adr/0003-coordinate-paired-recordings-with-protocol-v2.md b/docs/adr/0003-coordinate-paired-recordings-with-protocol-v2.md new file mode 100644 index 0000000..616fb88 --- /dev/null +++ b/docs/adr/0003-coordinate-paired-recordings-with-protocol-v2.md @@ -0,0 +1,5 @@ +# Coordinate paired recordings with protocol version 2 + +Paired phone and watch recording uses a breaking, session-identified prepare, commit, abort, and stop protocol. Both sides must prepare before either side commits. Commands are idempotent, bounded by timeouts, and retried with the same session ID. + +The phone owns the paired workflow. `WearOsLib` owns typed protocol encoding and transport, while phone and watch applications own command behavior. Unsupported protocol versions fail explicitly. diff --git a/docs/adr/0004-own-presentation-state-by-user-workflow.md b/docs/adr/0004-own-presentation-state-by-user-workflow.md new file mode 100644 index 0000000..1466b17 --- /dev/null +++ b/docs/adr/0004-own-presentation-state-by-user-workflow.md @@ -0,0 +1,5 @@ +# Own presentation state by user workflow + +Phone presentation state is owned by onboarding, recording, and settings workflows rather than one application-wide MVI contract. The recording workflow spans selection, details, preview, setup, permissions, active recording, and annotations because those routes edit or observe one recording plan. + +The application shell owns navigation and a small read-only view of recording session facts. Routes remain stateless and receive focused state and actions from their owning feature. diff --git a/docs/architecture-refactor-plan.md b/docs/architecture-refactor-plan.md new file mode 100644 index 0000000..2d1fbff --- /dev/null +++ b/docs/architecture-refactor-plan.md @@ -0,0 +1,117 @@ +# SensorBox architecture refactor plan + +Status: implemented and verified on 2026-08-19. The phone emulator workflow passes. The Wear-to-phone emulator workflow is built but awaits a one-time Android Studio phone/watch pairing. + +This file is the implementation source of truth for the Android 17 hard-cut refactor. Update the status boxes as work lands. Do not preserve an old interface merely because a later step still uses it. Each completed step must leave the repository in a valid intermediate state. + +Related decisions: + +- [0001: Use explicit application outcomes](adr/0001-use-explicit-application-outcomes.md) +- [0002: Separate the recording engine from Android adapters](adr/0002-separate-recording-engine-from-android-adapters.md) +- [0003: Coordinate paired recordings with protocol version 2](adr/0003-coordinate-paired-recordings-with-protocol-v2.md) +- [0004: Own presentation state by user workflow](adr/0004-own-presentation-state-by-user-workflow.md) + +## Completion rules + +- [x] Every module interface uses `AppResult` for expected outcomes. Kotlin `Result` does not cross a module interface. +- [x] Every intermediate implementation state compiles and passes the checks relevant to its changes. +- [ ] The final state passes unit tests, Detekt, phone and watch lint, Android test compilation, and both emulator workflows. +- [x] Tests cross the same interfaces used by production callers. +- [x] Diagnostics remain local until the user copies or shares them. +- [x] `sensorservices` has no dependency on `wearoslib`. +- [x] Unsupported Wear protocol versions fail explicitly. No compatibility layer remains. + +## Phase 1: outcomes and diagnostics + +- [x] Replace exception-backed `AppError` with a data-only error. +- [x] Add stable error codes for connectivity, external actions, measurement, permission, preferences, storage, validation, timeout, conflict, and unknown failures. +- [x] Add `AppResult.Success` and `AppResult.Failure` plus composition helpers. +- [x] Translate expected exceptions at infrastructure adapters and rethrow coroutine cancellation. +- [x] Add `DiagnosticLogger` for writes and `DiagnosticsStore` for read, export, and clear operations. +- [x] Store structured, redacted diagnostics in app-private rotating files. +- [x] Keep the current and previous diagnostic file at no more than 1 MB each. +- [x] Expose view, copy, share-text, share-file, and clear actions from Settings. +- [x] Add tests for outcome composition, cancellation, redaction, rotation, and logger write failure. + +Diagnostic entries may contain timestamps, severity, stable codes, operations, app/build information, Android/device model information, process names, session IDs, lifecycle states, stop reasons, source types, protocol versions, retry counts, sanitized exception classes, stack traces, durations, source counts, and sampling periods. + +Diagnostic entries must not contain samples, coordinates, annotations, command payloads, full recording names, complete file names, SAF URIs, or persistent device identifiers. + +## Phase 2: pure recording engine + +- [x] Add a pure Kotlin `recording-core` module. +- [x] Define typed recording plans, session IDs, source types, stop reasons, states, commands, and terminal events. +- [x] Define the small source role used internally by the engine. +- [x] Prepare and start sources in stable order. +- [x] On start failure, stop all prepared sources in reverse order. +- [x] On stop, attempt every active source and combine failures. +- [x] Make repeated stop idempotent. +- [x] Emit typed stop events for duration expiry, low battery, source failure, platform destruction, and user requests. +- [x] Test partial start, reverse cleanup, repeated stop, timed stop, low-battery stop, and combined cleanup failure. + +The durable state sequence is `Idle`, `Preparing`, `Prepared`, `Running`, and `Stopping`. Terminal results are `RecordingStarted`, `RecordingStartRejected`, and `RecordingStopped` events. The engine returns to `Idle` after a terminal event. + +## Phase 3: Android recording adapters + +- [x] Keep Android sensors, GPS, activity recognition, significant motion, storage streams, alarms, wake locks, battery callbacks, notifications, and foreground hosting in `sensorservices`. +- [x] Replace `Bundle` source configuration with typed configuration. +- [x] Make `MeasurementService` translate intents into engine commands. +- [x] Publish engine state through an application-scoped read-only session repository. +- [x] Deliver typed session events to application-provided observers. +- [x] Remove Wear commands, codecs, connection collaborators, and paired flags from `sensorservices`. +- [x] Remove the `sensorservices -> wearoslib` Gradle dependency. + +## Phase 4: Wear protocol version 2 + +- [x] Add session identity to every paired recording command. +- [x] Add prepare, commit, abort, stop, and correlated acknowledgement messages with typed outcomes. +- [x] Make handlers idempotent and return the prior outcome for duplicate commands. +- [x] Reject a command for a conflicting active session with `CONFLICT`. +- [x] Reject unsupported protocol versions. +- [x] Keep command models, encoding, decoding, connection discovery, and byte transport in `WearOsLib`. +- [x] Add round-trip, unsupported-version, duplicate-command, and malformed-payload tests. + +## Phase 5: paired recording workflow + +- [x] Put phone and watch coordination in one phone-side workflow. +- [x] Prepare both sides before committing either side. +- [x] Give prepare 10 seconds and commit acknowledgement 5 seconds. +- [x] Retry each message twice with the same session ID. +- [x] Abort both sides after rejection or final timeout. +- [x] Never fall back to phone-only recording when the plan contains watch sources. +- [x] Propagate every automatic local stop to the watch through the typed session observer. +- [x] Stop both sides even if one stop fails, then return a combined outcome. +- [x] Test remote rejection, prepare timeout, commit compensation, duplicate messages, and partial stop failure. + +## Phase 6: presentation ownership + +- [x] Make the application shell own navigation and only the session facts needed for navigation and screen-awake policy. +- [x] Give onboarding its own state, actions, effects, and ViewModel. +- [x] Give the full recording journey one navigation-graph-scoped ViewModel. +- [x] Give settings its own state, actions, effects, and ViewModel. +- [x] Keep child routes stateless and pass focused state and actions. +- [x] Move recording request construction, validation, permission resolution, and start effects into the recording feature. +- [x] Test ViewModel actions, state transitions, effects, and representative error codes. + +The recording journey includes sensor selection, sensor details, live preview, measurement setup, permission resolution, active recording, and annotations. + +## Phase 7: typed Wear handlers + +- [x] Keep listener services limited to callback validation, decoding, and dispatch. +- [x] Put phone command behavior in `PhoneWearCommandHandler` in `app`. +- [x] Put watch command behavior in `WearCommandHandler` in `wear`. +- [x] Keep application preferences, permissions, recording behavior, and navigation out of `WearOsLib`. +- [x] Test handlers with typed commands and local adapters, without Google Play Services callback objects. + +## Final verification + +- [x] `./gradlew testDebugUnitTest detekt` +- [x] `./gradlew :app:assembleDebug :wear:assembleDebug` +- [x] `./gradlew :app:lintDebug :wear:lintDebug` +- [x] `./gradlew :app:compileDebugAndroidTestKotlin :wear:compileDebugAndroidTestKotlin` +- [x] Run the phone sensor recording emulator workflow. +- [ ] Run the Wear-to-phone transfer emulator workflow. +- [x] Update README architecture and test instructions. +- [x] Confirm the final worktree contains no obsolete result, protocol, presentation, or service interfaces. + +Wear workflow note: `tools/emulator/run_wear_sync_test.sh` reached its pairing precondition and exited with the expected guidance because `SensorBox_Wear_API_37` reports no paired phone. APKs and both instrumentation suites compile. Complete the one-time Pair Wearable flow in Android Studio, then rerun the script. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cb823c2..ef8e8ab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,4 +70,5 @@ detekt = { id = "dev.detekt", version.ref = "detekt" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } oss-licenses = { id = "com.google.android.gms.oss-licenses-plugin", version.ref = "ossLicensesPlugin" } diff --git a/recording-core/build.gradle.kts b/recording-core/build.gradle.kts new file mode 100644 index 0000000..0c54959 --- /dev/null +++ b/recording-core/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.detekt) +} + +kotlin { + jvmToolchain(17) +} + +dependencies { + implementation(project(":core-common")) + implementation(libs.coroutines.core) + + testImplementation(libs.coroutines.test) + testImplementation(libs.junit) +} diff --git a/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingEngine.kt b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingEngine.kt new file mode 100644 index 0000000..2a8fb45 --- /dev/null +++ b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingEngine.kt @@ -0,0 +1,226 @@ +package com.motionapps.sensorbox.recording + +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.combineAppResults +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.currentCoroutineContext +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock + +class RecordingEngine( + sources: List, + private val scope: CoroutineScope, + private val clock: RecordingClock, + private val delay: RecordingDelay, +) { + private val sourceByType = sources.associateBy(RecordingSource::type) + private val mutex = Mutex() + private val mutableState = MutableStateFlow(RecordingSessionState.Idle) + private val mutableEvents = MutableSharedFlow(extraBufferCapacity = EVENT_BUFFER_SIZE) + private var activeSources: List = emptyList() + private var committingSessionId: RecordingSessionId? = null + private var durationJob: Job? = null + private var lastCompletedSessionId: RecordingSessionId? = null + private var lastStopResult: AppResult = AppResult.success(Unit) + + val state: StateFlow = mutableState.asStateFlow() + val events: SharedFlow = mutableEvents.asSharedFlow() + + suspend fun prepare(plan: RecordingPlan): AppResult = mutex.withLock { + if (mutableState.value !is RecordingSessionState.Idle) { + return@withLock conflict("Prepare recording", plan.sessionId) + } + val validation = validate(plan) + if (validation is AppResult.Failure) return@withLock reject(plan.sessionId, validation.error) + + mutableState.value = RecordingSessionState.Preparing(plan) + val prepared = mutableListOf() + for (spec in plan.sources.sortedBy { it.type.ordinal }) { + val source = checkNotNull(sourceByType[spec.type]) + when (val result = source.prepare(spec)) { + is AppResult.Success -> prepared += source + + is AppResult.Failure -> { + val sourcesToClean = prepared + source + activeSources = sourcesToClean + return@withLock rejectWithCleanup(plan.sessionId, result.error, sourcesToClean) + } + } + } + activeSources = prepared + mutableState.value = RecordingSessionState.Prepared(plan) + AppResult.success(Unit) + } + + suspend fun commit(sessionId: RecordingSessionId): AppResult = when (val claim = claimCommit(sessionId)) { + is AppResult.Failure -> claim + + is AppResult.Success -> claim.value?.let { plan -> + delay.pause((plan.startAtEpochMillis - clock.epochMillis()).coerceAtLeast(0L)) + startPreparedSources(sessionId, plan) + } ?: AppResult.success(Unit) + } + + private suspend fun claimCommit(sessionId: RecordingSessionId): AppResult = mutex.withLock { + when (val current = mutableState.value) { + is RecordingSessionState.Running -> if (current.plan.sessionId == sessionId) { + AppResult.success(null) + } else { + conflict("Commit recording", sessionId) + } + + is RecordingSessionState.Prepared -> claimPreparedCommit(current, sessionId) + + else -> conflict("Commit recording", sessionId) + } + } + + private fun claimPreparedCommit( + current: RecordingSessionState.Prepared, + sessionId: RecordingSessionId, + ): AppResult = when { + current.plan.sessionId != sessionId -> conflict("Commit recording", sessionId) + + committingSessionId == sessionId -> AppResult.success(null) + + else -> { + committingSessionId = sessionId + AppResult.success(current.plan) + } + } + + private suspend fun startPreparedSources(sessionId: RecordingSessionId, plan: RecordingPlan): AppResult = + mutex.withLock { + val prepared = mutableState.value as? RecordingSessionState.Prepared + if (prepared?.plan?.sessionId != sessionId) { + return@withLock conflict("Commit recording", sessionId) + } + + for (source in activeSources) { + when (val result = source.start()) { + is AppResult.Success -> Unit + + is AppResult.Failure -> { + committingSessionId = null + return@withLock rejectWithCleanup(sessionId, result.error, activeSources) + } + } + } + committingSessionId = null + val startedAt = clock.epochMillis() + mutableState.value = RecordingSessionState.Running(plan, startedAt) + mutableEvents.tryEmit(RecordingEvent.RecordingStarted(sessionId, startedAt)) + scheduleDurationStop(plan) + AppResult.success(Unit) + } + + suspend fun abort(sessionId: RecordingSessionId): AppResult = + stop(sessionId, RecordingStopReason.PAIRED_ABORT) + + suspend fun stop(sessionId: RecordingSessionId, reason: RecordingStopReason): AppResult = mutex.withLock { + val current = mutableState.value + if (current is RecordingSessionState.Idle) { + return@withLock if (lastCompletedSessionId == sessionId) { + lastStopResult + } else { + conflict("Stop recording", sessionId) + } + } + if (current.sessionId() != sessionId) return@withLock conflict("Stop recording", sessionId) + + mutableState.value = RecordingSessionState.Stopping(sessionId, reason) + val currentJob = currentCoroutineContext()[Job] + durationJob?.takeIf { it !== currentJob }?.cancel() + durationJob = null + committingSessionId = null + val results = activeSources.asReversed().map { it.stop() } + activeSources = emptyList() + val result = results.combineAppResults(AppErrorCode.MEASUREMENT, "Stop recording sources") + lastCompletedSessionId = sessionId + lastStopResult = result + mutableState.value = RecordingSessionState.Idle + mutableEvents.tryEmit(RecordingEvent.RecordingStopped(sessionId, reason, result)) + result + } + + private suspend fun rejectWithCleanup( + sessionId: RecordingSessionId, + startError: AppError, + sources: List, + ): AppResult { + val cleanup = sources.asReversed().map { it.stop() } + activeSources = emptyList() + val result = (listOf(AppResult.failure(startError)) + cleanup).combineAppResults( + AppErrorCode.MEASUREMENT, + "Reject recording start", + ) + return reject(sessionId, checkNotNull(result.errorOrNull())) + } + + private fun reject(sessionId: RecordingSessionId, error: AppError): AppResult { + committingSessionId = null + mutableState.value = RecordingSessionState.Idle + mutableEvents.tryEmit(RecordingEvent.RecordingStartRejected(sessionId, error)) + return AppResult.failure(error) + } + + private fun validate(plan: RecordingPlan): AppResult { + val message = when { + plan.sources.isEmpty() -> "Recording plan has no sources" + + plan.durationMillis < 0L -> "Recording duration is negative" + + plan.sources.map(RecordingSourceSpec::type).distinct().size != plan.sources.size -> + "Recording plan repeats a source type" + + plan.sources.map(RecordingSourceSpec::type).any { it !in sourceByType } -> + "Recording source adapter is missing" + + else -> null + } + return message?.let(::validationFailure) ?: AppResult.success(Unit) + } + + private fun validationFailure(message: String): AppResult = AppResult.failure( + AppError(AppErrorCode.VALIDATION, "Validate recording plan", message), + ) + + private fun conflict(operation: String, sessionId: RecordingSessionId): AppResult = AppResult.failure( + AppError( + code = AppErrorCode.CONFLICT, + operation = operation, + diagnosticMessage = "$operation conflicts with the active session", + context = mapOf("sessionId" to sessionId.value), + ), + ) + + private fun scheduleDurationStop(plan: RecordingPlan) { + if (plan.durationMillis <= 0L) return + durationJob = scope.launch { + delay.pause(plan.durationMillis) + stop(plan.sessionId, RecordingStopReason.DURATION_EXPIRED) + } + } + + private fun RecordingSessionState.sessionId(): RecordingSessionId? = when (this) { + RecordingSessionState.Idle -> null + is RecordingSessionState.Preparing -> plan.sessionId + is RecordingSessionState.Prepared -> plan.sessionId + is RecordingSessionState.Running -> plan.sessionId + is RecordingSessionState.Stopping -> sessionId + } + + private companion object { + const val EVENT_BUFFER_SIZE = 16 + } +} diff --git a/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingModel.kt b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingModel.kt new file mode 100644 index 0000000..bf5e456 --- /dev/null +++ b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingModel.kt @@ -0,0 +1,92 @@ +package com.motionapps.sensorbox.recording + +import java.util.UUID + +@JvmInline +value class RecordingSessionId(val value: String) { + init { + require(value.isNotBlank()) + } + + companion object { + fun create(): RecordingSessionId = RecordingSessionId(UUID.randomUUID().toString()) + } +} + +enum class RecordingSourceType { + SESSION, + SENSOR, + GPS, + ACTIVITY_RECOGNITION, + SIGNIFICANT_MOTION, +} + +sealed interface RecordingSourceSpec { + val type: RecordingSourceType + + data object Session : RecordingSourceSpec { + override val type = RecordingSourceType.SESSION + } + + data class Sensors(val sensorTypes: Set, val samplingPeriod: Int) : RecordingSourceSpec { + override val type = RecordingSourceType.SENSOR + } + + data class Gps(val intervalSeconds: Int, val minimumDistanceMeters: Int) : RecordingSourceSpec { + override val type = RecordingSourceType.GPS + } + + data class ActivityRecognition(val periodSeconds: Int) : RecordingSourceSpec { + override val type = RecordingSourceType.ACTIVITY_RECOGNITION + } + + data object SignificantMotion : RecordingSourceSpec { + override val type = RecordingSourceType.SIGNIFICANT_MOTION + } +} + +data class RecordingPlan( + val sessionId: RecordingSessionId, + val sources: List, + val startAtEpochMillis: Long, + val durationMillis: Long = 0L, +) + +sealed interface RecordingSessionState { + data object Idle : RecordingSessionState + + data class Preparing(val plan: RecordingPlan) : RecordingSessionState + + data class Prepared(val plan: RecordingPlan) : RecordingSessionState + + data class Running(val plan: RecordingPlan, val startedAtEpochMillis: Long) : RecordingSessionState + + data class Stopping(val sessionId: RecordingSessionId, val reason: RecordingStopReason) : RecordingSessionState +} + +enum class RecordingStopReason { + USER_REQUEST, + DURATION_EXPIRED, + LOW_BATTERY, + SOURCE_FAILURE, + PLATFORM_DESTROYED, + PAIRED_ABORT, +} + +sealed interface RecordingEvent { + val sessionId: RecordingSessionId + + data class RecordingStarted(override val sessionId: RecordingSessionId, val startedAtEpochMillis: Long) : + RecordingEvent + + data class RecordingStartRejected( + override val sessionId: RecordingSessionId, + val error: com.motionapps.sensorbox.core.error.AppError, + ) : RecordingEvent + + data class RecordingStopped( + override val sessionId: RecordingSessionId, + val reason: RecordingStopReason, + val result: com.motionapps.sensorbox.core.error.AppResult, + ) : RecordingEvent +} diff --git a/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingSource.kt b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingSource.kt new file mode 100644 index 0000000..908737f --- /dev/null +++ b/recording-core/src/main/kotlin/com/motionapps/sensorbox/recording/RecordingSource.kt @@ -0,0 +1,21 @@ +package com.motionapps.sensorbox.recording + +import com.motionapps.sensorbox.core.error.AppResult + +interface RecordingSource { + val type: RecordingSourceType + + suspend fun prepare(spec: RecordingSourceSpec): AppResult + + suspend fun start(): AppResult + + suspend fun stop(): AppResult +} + +fun interface RecordingClock { + fun epochMillis(): Long +} + +fun interface RecordingDelay { + suspend fun pause(durationMillis: Long) +} diff --git a/recording-core/src/test/kotlin/com/motionapps/sensorbox/recording/RecordingEngineTest.kt b/recording-core/src/test/kotlin/com/motionapps/sensorbox/recording/RecordingEngineTest.kt new file mode 100644 index 0000000..d64d37d --- /dev/null +++ b/recording-core/src/test/kotlin/com/motionapps/sensorbox/recording/RecordingEngineTest.kt @@ -0,0 +1,188 @@ +package com.motionapps.sensorbox.recording + +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +@OptIn(ExperimentalCoroutinesApi::class) +class RecordingEngineTest { + @Test + fun `Given unordered sources When committed Then sources start in stable order`() = runTest { + val calls = mutableListOf() + val gps = FakeSource(RecordingSourceType.GPS, calls) + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val engine = engine(listOf(gps, sensors)) + val plan = plan( + RecordingSourceSpec.Gps(10, 20), + RecordingSourceSpec.Sensors(setOf(1), 0), + ) + + assertTrue(engine.prepare(plan).isSuccess) + assertTrue(engine.commit(plan.sessionId).isSuccess) + + assertEquals( + listOf("prepare:SENSOR", "prepare:GPS", "start:SENSOR", "start:GPS"), + calls, + ) + assertTrue(engine.state.value is RecordingSessionState.Running) + } + + @Test + fun `Given a partial start failure When committed Then started sources stop in reverse order`() = runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val gps = FakeSource(RecordingSourceType.GPS, calls, startFails = true) + val engine = engine(listOf(gps, sensors)) + val plan = plan( + RecordingSourceSpec.Sensors(setOf(1), 0), + RecordingSourceSpec.Gps(10, 20), + ) + + engine.prepare(plan) + val result = engine.commit(plan.sessionId) + + assertTrue(result.isFailure) + assertEquals(listOf("stop:GPS", "stop:SENSOR"), calls.takeLast(2)) + assertEquals(RecordingSessionState.Idle, engine.state.value) + } + + @Test + fun `Given a prepare failure When prepared Then failing and prepared sources clean up in reverse order`() = + runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val gps = FakeSource(RecordingSourceType.GPS, calls, prepareFails = true) + val engine = engine(listOf(gps, sensors)) + val plan = plan( + RecordingSourceSpec.Sensors(setOf(1), 0), + RecordingSourceSpec.Gps(10, 20), + ) + + val result = engine.prepare(plan) + + assertTrue(result.isFailure) + assertEquals(listOf("stop:GPS", "stop:SENSOR"), calls.takeLast(2)) + assertEquals(RecordingSessionState.Idle, engine.state.value) + } + + @Test + fun `Given stop failures When stopped Then every source is attempted`() = runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls, stopFails = true) + val gps = FakeSource(RecordingSourceType.GPS, calls, stopFails = true) + val engine = engine(listOf(gps, sensors)) + val plan = plan( + RecordingSourceSpec.Sensors(setOf(1), 0), + RecordingSourceSpec.Gps(10, 20), + ) + engine.prepare(plan) + engine.commit(plan.sessionId) + + val result = engine.stop(plan.sessionId, RecordingStopReason.USER_REQUEST) + + assertTrue(result.isFailure) + assertTrue(calls.contains("stop:GPS")) + assertTrue(calls.contains("stop:SENSOR")) + } + + @Test + fun `Given a completed session When stop repeats Then sources are not stopped twice`() = runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val engine = engine(listOf(sensors)) + val plan = plan(RecordingSourceSpec.Sensors(setOf(1), 0)) + engine.prepare(plan) + engine.commit(plan.sessionId) + + val first = engine.stop(plan.sessionId, RecordingStopReason.USER_REQUEST) + val second = engine.stop(plan.sessionId, RecordingStopReason.USER_REQUEST) + + assertEquals(first, second) + assertEquals(1, calls.count { it == "stop:SENSOR" }) + } + + @Test + fun `Given a duration When committed Then recording stops after duration`() = runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val engine = RecordingEngine( + sources = listOf(sensors), + scope = backgroundScope, + clock = RecordingClock { testScheduler.currentTime }, + delay = RecordingDelay { kotlinx.coroutines.delay(it) }, + ) + val plan = plan(RecordingSourceSpec.Sensors(setOf(1), 0), durationMillis = 500L) + + engine.prepare(plan) + engine.commit(plan.sessionId) + advanceTimeBy(500L) + runCurrent() + + assertEquals(RecordingSessionState.Idle, engine.state.value) + assertEquals(1, calls.count { it == "stop:SENSOR" }) + } + + @Test + fun `Given a running session When low battery stops it Then terminal state returns to idle`() = runTest { + val calls = mutableListOf() + val sensors = FakeSource(RecordingSourceType.SENSOR, calls) + val engine = engine(listOf(sensors)) + val plan = plan(RecordingSourceSpec.Sensors(setOf(1), 0)) + engine.prepare(plan) + engine.commit(plan.sessionId) + + val result = engine.stop(plan.sessionId, RecordingStopReason.LOW_BATTERY) + + assertTrue(result.isSuccess) + assertEquals(RecordingSessionState.Idle, engine.state.value) + assertEquals(1, calls.count { it == "stop:SENSOR" }) + } + + private fun engine(sources: List) = RecordingEngine( + sources = sources, + scope = kotlinx.coroutines.CoroutineScope(kotlinx.coroutines.Dispatchers.Unconfined), + clock = RecordingClock { 0L }, + delay = RecordingDelay { }, + ) + + private fun plan(vararg sources: RecordingSourceSpec, durationMillis: Long = 0L) = RecordingPlan( + sessionId = RecordingSessionId.create(), + sources = sources.toList(), + startAtEpochMillis = 0L, + durationMillis = durationMillis, + ) +} + +private class FakeSource( + override val type: RecordingSourceType, + private val calls: MutableList, + private val prepareFails: Boolean = false, + private val startFails: Boolean = false, + private val stopFails: Boolean = false, +) : RecordingSource { + override suspend fun prepare(spec: RecordingSourceSpec): AppResult { + calls += "prepare:$type" + return if (prepareFails) failure("Prepare $type") else AppResult.success(Unit) + } + + override suspend fun start(): AppResult { + calls += "start:$type" + return if (startFails) failure("Start $type") else AppResult.success(Unit) + } + + override suspend fun stop(): AppResult { + calls += "stop:$type" + return if (stopFails) failure("Stop $type") else AppResult.success(Unit) + } + + private fun failure(operation: String): AppResult = AppResult.failure( + AppError(AppErrorCode.MEASUREMENT, operation), + ) +} diff --git a/sensorservices/build.gradle.kts b/sensorservices/build.gradle.kts index e6114af..234aac3 100644 --- a/sensorservices/build.gradle.kts +++ b/sensorservices/build.gradle.kts @@ -37,7 +37,7 @@ android { dependencies { implementation(project(":core")) - implementation(project(":wearoslib")) + implementation(project(":recording-core")) implementation(libs.androidx.core.ktx) implementation(libs.play.services.location) diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/GPSHandler.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/GPSHandler.kt index a42ac7f..930c1e2 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/GPSHandler.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/GPSHandler.kt @@ -14,6 +14,8 @@ import com.google.android.gms.location.LocationResult import com.google.android.gms.location.LocationServices import com.google.android.gms.location.Priority import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap @@ -62,12 +64,12 @@ class GPSHandler : LocationCallback() { callback?.onLastLocationSuccess(location) } }.addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Read last GPS location", error) + AppError.from(AppErrorCode.MEASUREMENT, "Read last GPS location", error) callback?.onLastLocationSuccess(null) } locationClient.requestLocationUpdates(request, this, Looper.getMainLooper()).addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Request GPS updates", error) + AppError.from(AppErrorCode.MEASUREMENT, "Request GPS updates", error) } registered = true } @@ -95,14 +97,14 @@ class GPSHandler : LocationCallback() { } /** Stops location updates for the active measurement. */ - fun gpsOff(): Result = appResult(AppError.Kind.MEASUREMENT, "Stop GPS updates") { + fun gpsOff(): AppResult = appResult(AppErrorCode.MEASUREMENT, "Stop GPS updates") { if (registered) { Log.i(tag, "Logging off location") locationClient.flushLocations().addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Flush GPS updates", error) + AppError.from(AppErrorCode.MEASUREMENT, "Flush GPS updates", error) } locationClient.removeLocationUpdates(this).addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Remove GPS updates", error) + AppError.from(AppErrorCode.MEASUREMENT, "Remove GPS updates", error) } } registered = false @@ -133,9 +135,9 @@ class GPSHandler : LocationCallback() { * @param gpsCallback - this object will get access to location and updates, previous is forgotten * */ - fun addCallback(context: Context, gpsCallback: OnLocationChangedCallback): Result = - (if (registered) gpsOff() else Result.success(Unit)).flatMap { - appResult(AppError.Kind.MEASUREMENT, "Register GPS callback") { + fun addCallback(context: Context, gpsCallback: OnLocationChangedCallback): AppResult = + (if (registered) gpsOff() else AppResult.success(Unit)).flatMap { + appResult(AppErrorCode.MEASUREMENT, "Register GPS callback") { callback = gpsCallback initialize(context) gpsCallback.onLocationChanged(lastLocation) diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/StorageHandler.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/StorageHandler.kt index 7428763..b63fdbc 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/StorageHandler.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/StorageHandler.kt @@ -3,6 +3,8 @@ package com.motionapps.sensorservices.handlers import android.content.Context import android.content.Intent import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap import com.motionapps.sensorbox.core.storage.NativeDocumentStorage @@ -21,15 +23,15 @@ object StorageHandler { return SimpleDateFormat(format, Locale.getDefault()).format(calendar.time) } - fun createMainFolder(context: Context, intent: Intent?): Result { + fun createMainFolder(context: Context, intent: Intent?): AppResult { val directoryName = context.getString(R.string.app_name) return if (intent == null) { NativeDocumentStorage.hasAppDirectory(context, directoryName).flatMap { exists -> if (exists) { - Result.success(Unit) + AppResult.success(Unit) } else { - Result.failure( - AppError(AppError.Kind.STORAGE, "Storage directory is not configured"), + AppResult.failure( + AppError(AppErrorCode.STORAGE, "Storage directory is not configured"), ) } } @@ -38,34 +40,34 @@ object StorageHandler { } } - fun isFolder(context: Context): Result = NativeDocumentStorage.hasAppDirectory( + fun isFolder(context: Context): AppResult = NativeDocumentStorage.hasAppDirectory( context = context, appDirectoryName = context.getString(R.string.app_name), ) - fun isAccess(context: Context): Result = isFolder(context) + fun isAccess(context: Context): AppResult = isFolder(context) - fun getFolderName(context: Context): Result = NativeDocumentStorage.displayPath( + fun getFolderName(context: Context): AppResult = NativeDocumentStorage.displayPath( context = context, appDirectoryName = context.getString(R.string.app_name), ).map { it ?: context.getString(R.string.no_path) } - fun createInternalStorageMeasurementFolder(context: Context, folderName: String): Result { + fun createInternalStorageMeasurementFolder(context: Context, folderName: String): AppResult { val directory = internalMeasurementDirectory(context, folderName) - return appResult(AppError.Kind.STORAGE, "Create internal measurement directory") { + return appResult(AppErrorCode.STORAGE, "Create internal measurement directory") { directory.exists() || directory.mkdirs() }.flatMap { created -> if (created) { - Result.success(Unit) + AppResult.success(Unit) } else { - Result.failure( - AppError(AppError.Kind.STORAGE, "Create internal measurement directory"), + AppResult.failure( + AppError(AppErrorCode.STORAGE, "Create internal measurement directory"), ) } } } - fun createFolderMeasurement(context: Context, folderName: String): Result = + fun createFolderMeasurement(context: Context, folderName: String): AppResult = NativeDocumentStorage.createMeasurementDirectory( context = context, appDirectoryName = context.getString(R.string.app_name), @@ -77,7 +79,7 @@ object StorageHandler { folderName: String, mimeOfNewFile: String, nameOfNewFile: String, - ): Result = NativeDocumentStorage.openMeasurementFile( + ): AppResult = NativeDocumentStorage.openMeasurementFile( context = context, appDirectoryName = context.getString(R.string.app_name), measurementName = folderName, @@ -85,23 +87,23 @@ object StorageHandler { fileName = nameOfNewFile, ) - fun createFileInInternalFolder(context: Context, folderName: String, nameOfFile: String): Result = - appResult(AppError.Kind.STORAGE, "Prepare internal measurement directory") { + fun createFileInInternalFolder(context: Context, folderName: String, nameOfFile: String): AppResult = + appResult(AppErrorCode.STORAGE, "Prepare internal measurement directory") { val directory = internalMeasurementDirectory(context, folderName) directory to (directory.exists() || directory.mkdirs()) }.flatMap { (directory, ready) -> if (!ready) { - Result.failure( - AppError(AppError.Kind.STORAGE, "Create internal measurement directory"), + AppResult.failure( + AppError(AppErrorCode.STORAGE, "Create internal measurement directory"), ) } else { - appResult(AppError.Kind.STORAGE, "Open internal measurement file") { + appResult(AppErrorCode.STORAGE, "Open internal measurement file") { FileOutputStream(File(directory, nameOfFile)) } } } - fun deleteByNameOfFolder(context: Context, deleteFolder: String): Result = + fun deleteByNameOfFolder(context: Context, deleteFolder: String): AppResult = NativeDocumentStorage.deleteMeasurement( context = context, appDirectoryName = context.getString(R.string.app_name), diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ActivityRecognitionMeasurement.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ActivityRecognitionMeasurement.kt index 5995c6f..acee0df 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ActivityRecognitionMeasurement.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ActivityRecognitionMeasurement.kt @@ -1,6 +1,7 @@ package com.motionapps.sensorservices.handlers.measurements import android.Manifest +import android.annotation.SuppressLint import android.app.PendingIntent import android.content.BroadcastReceiver import android.content.Context @@ -8,7 +9,6 @@ import android.content.Intent import android.content.IntentFilter import android.content.pm.PackageManager import android.os.Build -import android.os.Bundle import androidx.core.content.ContextCompat import com.google.android.gms.location.ActivityRecognition import com.google.android.gms.location.ActivityRecognitionClient @@ -18,6 +18,8 @@ import com.google.android.gms.location.ActivityTransitionRequest import com.google.android.gms.location.ActivityTransitionResult import com.google.android.gms.location.DetectedActivity import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.flatMap @@ -26,7 +28,7 @@ import com.motionapps.sensorservices.handlers.StorageHandler import java.io.OutputStream /** Records periodic Google Activity Recognition confidence values. */ -class ActivityRecognitionMeasurement(private val periodSeconds: Int) : MeasurementInterface { +class ActivityRecognitionMeasurement(private val periodSeconds: Int) { private var client: ActivityRecognitionClient? = null private var updatesPendingIntent: PendingIntent? = null private var transitionsPendingIntent: PendingIntent? = null @@ -64,32 +66,30 @@ class ActivityRecognitionMeasurement(private val periodSeconds: Int) : Measureme } } - override fun initMeasurement(context: Context, params: Bundle): Result { - val folder = params.getString(MeasurementInterface.FOLDER_NAME).orEmpty() - val internal = params.getBoolean(MeasurementInterface.INTERNAL_STORAGE) - val updatesResult = if (internal) { - StorageHandler.createFileInInternalFolder(context, folder, UPDATES_FILE_NAME) + fun prepare(context: Context, folderName: String, useInternalStorage: Boolean): AppResult { + val updatesResult = if (useInternalStorage) { + StorageHandler.createFileInInternalFolder(context, folderName, UPDATES_FILE_NAME) } else { - StorageHandler.createFileInFolder(context, folder, "text/csv", UPDATES_FILE_NAME) + StorageHandler.createFileInFolder(context, folderName, "text/csv", UPDATES_FILE_NAME) } return updatesResult.flatMap { updates -> updatesOutput = updates - val transitionsResult = if (internal) { - StorageHandler.createFileInInternalFolder(context, folder, TRANSITIONS_FILE_NAME) + val transitionsResult = if (useInternalStorage) { + StorageHandler.createFileInInternalFolder(context, folderName, TRANSITIONS_FILE_NAME) } else { - StorageHandler.createFileInFolder(context, folder, "text/csv", TRANSITIONS_FILE_NAME) + StorageHandler.createFileInFolder(context, folderName, "text/csv", TRANSITIONS_FILE_NAME) } transitionsResult.onFailure { - appResult(AppError.Kind.STORAGE, "Close incomplete activity measurement") { updates.close() } + appResult(AppErrorCode.STORAGE, "Close incomplete activity measurement") { updates.close() } }.flatMap { transitions -> transitionsOutput = transitions initializeResources(context) } - }.withAppError(AppError.Kind.MEASUREMENT, "Initialize activity recognition") + }.withAppError(AppErrorCode.MEASUREMENT, "Initialize activity recognition") } - private fun initializeResources(context: Context): Result = appResult( - AppError.Kind.MEASUREMENT, + private fun initializeResources(context: Context): AppResult = appResult( + AppErrorCode.MEASUREMENT, "Initialize activity recognition resources", ) { updatesOutput?.write( @@ -97,11 +97,7 @@ class ActivityRecognitionMeasurement(private val periodSeconds: Int) : Measureme ) transitionsOutput?.write("t_nanos;activity;enter_exit\n".toByteArray()) val filter = IntentFilter(ACTION_UPDATE).apply { addAction(ACTION_TRANSITION) } - if (Build.VERSION.SDK_INT >= 33) { - context.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED) - } else { - context.registerReceiver(receiver, filter) - } + ContextCompat.registerReceiver(context, receiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED) receiverRegistered = true client = ActivityRecognition.getClient(context) updatesPendingIntent = PendingIntent.getBroadcast( @@ -118,43 +114,42 @@ class ActivityRecognitionMeasurement(private val periodSeconds: Int) : Measureme ) } - override fun startMeasurement(context: Context): Result { - if (Build.VERSION.SDK_INT >= 29 && - ContextCompat.checkSelfPermission( - context, - Manifest.permission.ACTIVITY_RECOGNITION, - ) != PackageManager.PERMISSION_GRANTED - ) { - return Result.failure(AppError(AppError.Kind.PERMISSION, "Start activity recognition")) + @SuppressLint("MissingPermission") + fun start(context: Context): AppResult { + if (!hasPermission(context)) { + return AppResult.failure(AppError(AppErrorCode.PERMISSION, "Start activity recognition")) } - return appResult(AppError.Kind.MEASUREMENT, "Start activity recognition") { + return appResult(AppErrorCode.MEASUREMENT, "Start activity recognition") { updatesPendingIntent?.let { client?.requestActivityUpdates(periodSeconds.coerceAtLeast(1) * 1_000L, it) ?.addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Request activity updates", error) + AppError.from(AppErrorCode.MEASUREMENT, "Request activity updates", error) } } transitionsPendingIntent?.let { client?.requestActivityTransitionUpdates(ActivityTransitionRequest(ACTIVITY_TRANSITIONS), it) ?.addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Request activity transitions", error) + AppError.from(AppErrorCode.MEASUREMENT, "Request activity transitions", error) } } } } - override fun pauseMeasurement(context: Context): Result = appResult( - AppError.Kind.MEASUREMENT, + @SuppressLint("MissingPermission") + private fun pause(context: Context): AppResult = appResult( + AppErrorCode.MEASUREMENT, "Pause activity recognition", ) { - updatesPendingIntent?.let { - client?.removeActivityUpdates(it)?.addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Remove activity updates", error) + if (hasPermission(context)) { + updatesPendingIntent?.let { + client?.removeActivityUpdates(it)?.addOnFailureListener { error -> + AppError.from(AppErrorCode.MEASUREMENT, "Remove activity updates", error) + } } - } - transitionsPendingIntent?.let { - client?.removeActivityTransitionUpdates(it)?.addOnFailureListener { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Remove activity transitions", error) + transitionsPendingIntent?.let { + client?.removeActivityTransitionUpdates(it)?.addOnFailureListener { error -> + AppError.from(AppErrorCode.MEASUREMENT, "Remove activity transitions", error) + } } } if (receiverRegistered) { @@ -163,34 +158,40 @@ class ActivityRecognitionMeasurement(private val periodSeconds: Int) : Measureme receiverRegistered = false } - override suspend fun saveMeasurement(context: Context): Result { - val results = mutableListOf>() - results += appResult(AppError.Kind.STORAGE, "Close activity updates") { + private suspend fun save(): AppResult { + val results = mutableListOf>() + results += appResult(AppErrorCode.STORAGE, "Close activity updates") { updatesOutput?.close() } - results += appResult(AppError.Kind.STORAGE, "Close activity transitions") { + results += appResult(AppErrorCode.STORAGE, "Close activity transitions") { transitionsOutput?.close() } - writeFailure?.let { results += Result.failure(it) } + writeFailure?.let { results += AppResult.failure(it) } updatesOutput = null transitionsOutput = null writeFailure = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Save activity recognition") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Save activity recognition") } - override suspend fun onDestroyMeasurement(context: Context): Result { - val results = listOf(pauseMeasurement(context), saveMeasurement(context)) + suspend fun stop(context: Context): AppResult { + val results = listOf(pause(context), save()) updatesPendingIntent = null transitionsPendingIntent = null client = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Stop activity recognition") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Stop activity recognition") } private inline fun recordWriteFailure(operation: String, block: () -> Unit) { if (writeFailure != null) return - appResult(AppError.Kind.STORAGE, operation, block).onFailure { writeFailure = it as AppError } + appResult(AppErrorCode.STORAGE, operation, block).onFailure { writeFailure = it } } + private fun hasPermission(context: Context): Boolean = Build.VERSION.SDK_INT < 29 || + ContextCompat.checkSelfPermission( + context, + Manifest.permission.ACTIVITY_RECOGNITION, + ) == PackageManager.PERMISSION_GRANTED + private companion object { const val ACTION_UPDATE = "com.motionapps.sensorbox.ACTIVITY_RECOGNITION_UPDATE" const val ACTION_TRANSITION = "com.motionapps.sensorbox.ACTIVITY_RECOGNITION_TRANSITION" diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ExtraInfoHandler.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ExtraInfoHandler.kt index c16d73d..d2c3fa5 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ExtraInfoHandler.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/ExtraInfoHandler.kt @@ -4,7 +4,8 @@ import android.content.Context import android.hardware.Sensor import android.hardware.SensorManager import android.os.SystemClock -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.flatMap import com.motionapps.sensorbox.core.error.withAppError @@ -39,11 +40,11 @@ class ExtraInfoHandler { triggeredAlarms += timestampMillis } - fun write(context: Context): Result { - val active = config ?: return Result.success(Unit) - if (written) return Result.success(Unit) + fun write(context: Context): AppResult { + val active = config ?: return AppResult.success(Unit) + if (written) return AppResult.success(Unit) written = true - val jsonResult = appResult(AppError.Kind.MEASUREMENT, "Build measurement metadata") { + val jsonResult = appResult(AppErrorCode.MEASUREMENT, "Build measurement metadata") { JSONObject().apply { put("millis", startedAtMillis) put("nanos", startedAtNanos) @@ -83,11 +84,11 @@ class ExtraInfoHandler { StorageHandler.createFileInFolder(context, active.folderName, "application/json", EXTRA_FILE) } stream.flatMap { output -> - appResult(AppError.Kind.STORAGE, "Write measurement metadata file") { + appResult(AppErrorCode.STORAGE, "Write measurement metadata file") { output.use { it.write(json.toString(2).toByteArray()) } } } - }.withAppError(AppError.Kind.MEASUREMENT, "Write measurement metadata") + }.withAppError(AppErrorCode.MEASUREMENT, "Write measurement metadata") } private fun sensorRanges(context: Context, sensorIds: IntArray): JSONArray { diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/GPSMeasurement.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/GPSMeasurement.kt index b3dbc91..a073eb4 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/GPSMeasurement.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/GPSMeasurement.kt @@ -2,18 +2,16 @@ package com.motionapps.sensorservices.handlers.measurements import android.content.Context import android.location.Location -import android.os.Bundle import com.google.android.gms.location.LocationAvailability import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.flatMap import com.motionapps.sensorbox.core.error.withAppError import com.motionapps.sensorservices.handlers.GPSHandler import com.motionapps.sensorservices.handlers.StorageHandler -import com.motionapps.sensorservices.handlers.measurements.MeasurementInterface.Companion.FOLDER_NAME -import com.motionapps.sensorservices.handlers.measurements.MeasurementInterface.Companion.INTERNAL_STORAGE -import com.motionapps.sensorservices.services.MeasurementService import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.OutputStream @@ -23,9 +21,7 @@ import java.io.OutputStream * * @property gpsHandler - manages access to GPS */ -class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : - MeasurementInterface, - GPSHandler.OnLocationChangedCallback { +class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : GPSHandler.OnLocationChangedCallback { private var outputStream: OutputStream? = null private var writeFailure: AppError? = null @@ -37,29 +33,35 @@ class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : * @param context * @param params - from the service */ - override fun initMeasurement(context: Context, params: Bundle): Result { + fun prepare( + context: Context, + folderName: String, + useInternalStorage: Boolean, + intervalSeconds: Int, + minimumDistanceMeters: Int, + ): AppResult { gpsHandler.configure( - intervalSeconds = params.getInt(MeasurementService.GPS_INTERVAL_SECONDS, 10), - minDistanceMeters = params.getInt(MeasurementService.GPS_DISTANCE_METERS, 20), + intervalSeconds = intervalSeconds, + minDistanceMeters = minimumDistanceMeters, ) - val stream = if (params.getBoolean(INTERNAL_STORAGE)) { + val stream = if (useInternalStorage) { StorageHandler.createFileInInternalFolder( context, - params.getString(FOLDER_NAME).orEmpty(), + folderName, "gps.csv", ) } else { StorageHandler.createFileInFolder( context, - params.getString(FOLDER_NAME).orEmpty(), + folderName, "csv", "gps.csv", ) } return stream.flatMap { output -> outputStream = output - appResult(AppError.Kind.STORAGE, "Write GPS header") { output.write(header.toByteArray()) } - }.withAppError(AppError.Kind.MEASUREMENT, "Initialize GPS measurement") + appResult(AppErrorCode.STORAGE, "Write GPS header") { output.write(header.toByteArray()) } + }.withAppError(AppErrorCode.MEASUREMENT, "Initialize GPS measurement") } /** @@ -83,31 +85,31 @@ class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : * @param context */ - override fun startMeasurement(context: Context): Result = gpsHandler.addCallback(context, this) - .withAppError(AppError.Kind.MEASUREMENT, "Start GPS") + fun start(context: Context): AppResult = gpsHandler.addCallback(context, this) + .withAppError(AppErrorCode.MEASUREMENT, "Start GPS") /** * turns off the GPS * * @param context */ - override fun pauseMeasurement(context: Context): Result = gpsHandler.gpsOff() - .withAppError(AppError.Kind.MEASUREMENT, "Pause GPS") + private fun pause(): AppResult = gpsHandler.gpsOff() + .withAppError(AppErrorCode.MEASUREMENT, "Pause GPS") /** * outputStream is saved and closed * * @param context */ - override suspend fun saveMeasurement(context: Context): Result { + private suspend fun save(): AppResult { val stream = outputStream - val results = mutableListOf>() - results += appResult(AppError.Kind.STORAGE, "Flush GPS measurement") { stream?.flush() } - writeFailure?.let { results += Result.failure(it) } - results += appResult(AppError.Kind.STORAGE, "Close GPS measurement") { stream?.close() } + val results = mutableListOf>() + results += appResult(AppErrorCode.STORAGE, "Flush GPS measurement") { stream?.flush() } + writeFailure?.let { results += AppResult.failure(it) } + results += appResult(AppErrorCode.STORAGE, "Close GPS measurement") { stream?.close() } outputStream = null writeFailure = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Save GPS measurement") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Save GPS measurement") } /** @@ -115,10 +117,10 @@ class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : * * @param context */ - override suspend fun onDestroyMeasurement(context: Context): Result = listOf( - withContext(Dispatchers.Main) { pauseMeasurement(context) }, - withContext(Dispatchers.IO) { saveMeasurement(context) }, - ).combineAppResults(AppError.Kind.MEASUREMENT, "Stop GPS measurement") + suspend fun stop(): AppResult = listOf( + withContext(Dispatchers.Main) { pause() }, + withContext(Dispatchers.IO) { save() }, + ).combineAppResults(AppErrorCode.MEASUREMENT, "Stop GPS measurement") /** * called on GPS change @@ -127,9 +129,9 @@ class GPSMeasurement constructor(private val gpsHandler: GPSHandler) : */ override fun onLocationChanged(location: Location?) { location?.let { loc: Location -> - appResult(AppError.Kind.STORAGE, "Write GPS sample") { + appResult(AppErrorCode.STORAGE, "Write GPS sample") { outputStream?.write(createLocationStamp(loc).toByteArray()) - }.onFailure { writeFailure = it as AppError } + }.onFailure { writeFailure = it } } } diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/MeasurementInterface.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/MeasurementInterface.kt deleted file mode 100644 index 2b1cfbd..0000000 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/MeasurementInterface.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.motionapps.sensorservices.handlers.measurements - -import android.content.Context -import android.os.Bundle - -/** - * basic methods, which handlers have to call them at once with service lifecycle events - * - */ -interface MeasurementInterface { - - fun initMeasurement(context: Context, params: Bundle): Result - fun startMeasurement(context: Context): Result - fun pauseMeasurement(context: Context): Result - suspend fun saveMeasurement(context: Context): Result - suspend fun onDestroyMeasurement(context: Context): Result - - companion object { - // keys for the bundle in service to handlers - const val FOLDER_NAME = "FOLDER_NAME" - const val SENSOR_ID = "SENSOR_ID" - const val SENSOR_SPEED = "SENSOR_SPEED" - const val INTERNAL_STORAGE = "INTERNAL_STORAGE" - } -} diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SensorMeasurement.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SensorMeasurement.kt index 0b5a527..e465989 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SensorMeasurement.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SensorMeasurement.kt @@ -2,8 +2,9 @@ package com.motionapps.sensorservices.handlers.measurements import android.content.Context import android.hardware.SensorManager -import android.os.Bundle import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.flatMap @@ -12,37 +13,48 @@ import com.motionapps.sensorservices.handlers.StorageHandler import com.motionapps.sensorservices.types.SensorHolder import com.motionapps.sensorservices.types.SensorSpec -class SensorMeasurement : MeasurementInterface { +class SensorMeasurement { private val holders = mutableListOf() private var samplingPeriod = SensorManager.SENSOR_DELAY_FASTEST - override fun initMeasurement(context: Context, params: Bundle): Result { - samplingPeriod = params.getInt(MeasurementInterface.SENSOR_SPEED) - return (params.getIntArray(MeasurementInterface.SENSOR_ID) ?: intArrayOf()).fold( - Result.success(Unit), + fun prepare( + context: Context, + folderName: String, + useInternalStorage: Boolean, + sensorTypes: Set, + samplingPeriod: Int, + ): AppResult { + this.samplingPeriod = samplingPeriod + return sensorTypes.sorted().fold( + AppResult.success(Unit), ) { result, sensorType -> result.flatMap { - createHolder(context, params, sensorType).map { holder -> + createHolder(context, folderName, useInternalStorage, sensorType).map { holder -> holder?.let(holders::add) Unit } } } - .withAppError(AppError.Kind.MEASUREMENT, "Initialize sensors") + .withAppError(AppErrorCode.MEASUREMENT, "Initialize sensors") } - private fun createHolder(context: Context, params: Bundle, sensorType: Int): Result { - val spec = SensorSpec.fromType(sensorType) ?: return Result.success(null) - val stream = if (params.getBoolean(MeasurementInterface.INTERNAL_STORAGE)) { + private fun createHolder( + context: Context, + folderName: String, + useInternalStorage: Boolean, + sensorType: Int, + ): AppResult { + val spec = SensorSpec.fromType(sensorType) ?: return AppResult.success(null) + val stream = if (useInternalStorage) { StorageHandler.createFileInInternalFolder( context, - params.getString(MeasurementInterface.FOLDER_NAME).orEmpty(), + folderName, spec.fileName, ) } else { StorageHandler.createFileInFolder( context, - params.getString(MeasurementInterface.FOLDER_NAME).orEmpty(), + folderName, "text/csv", spec.fileName, ) @@ -50,49 +62,49 @@ class SensorMeasurement : MeasurementInterface { return stream.map { SensorHolder(spec, it) } } - override fun startMeasurement(context: Context): Result = appResult( - AppError.Kind.MEASUREMENT, + fun start(context: Context): AppResult = appResult( + AppErrorCode.MEASUREMENT, "Access sensor manager", ) { context.getSystemService(SensorManager::class.java) }.flatMap { sensorManager -> - holders.fold(Result.success(Unit)) { result, holder -> + holders.fold(AppResult.success(Unit)) { result, holder -> result.flatMap { val sensor = sensorManager.getDefaultSensor(holder.spec.type) - ?: return@flatMap Result.failure( - AppError(AppError.Kind.MEASUREMENT, "Find sensor ${holder.spec.type}"), + ?: return@flatMap AppResult.failure( + AppError(AppErrorCode.MEASUREMENT, "Find sensor ${holder.spec.type}"), ) - appResult(AppError.Kind.MEASUREMENT, "Register sensor ${holder.spec.type}") { + appResult(AppErrorCode.MEASUREMENT, "Register sensor ${holder.spec.type}") { sensorManager.registerListener(holder, sensor, samplingPeriod) }.flatMap { registered -> if (registered) { - Result.success(Unit) + AppResult.success(Unit) } else { - Result.failure( - AppError(AppError.Kind.MEASUREMENT, "Register sensor ${holder.spec.type}"), + AppResult.failure( + AppError(AppErrorCode.MEASUREMENT, "Register sensor ${holder.spec.type}"), ) } } } } - }.withAppError(AppError.Kind.MEASUREMENT, "Start sensors") + }.withAppError(AppErrorCode.MEASUREMENT, "Start sensors") - override fun pauseMeasurement(context: Context): Result = appResult( - AppError.Kind.MEASUREMENT, + private fun pause(context: Context): AppResult = appResult( + AppErrorCode.MEASUREMENT, "Pause sensors", ) { val sensorManager = context.getSystemService(SensorManager::class.java) holders.forEach(sensorManager::unregisterListener) } - override suspend fun saveMeasurement(context: Context): Result { + private suspend fun save(): AppResult { val results = holders.map { it.close() } holders.clear() - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Save sensors") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Save sensors") } - override suspend fun onDestroyMeasurement(context: Context): Result = listOf( - pauseMeasurement(context), - saveMeasurement(context), - ).combineAppResults(AppError.Kind.MEASUREMENT, "Stop sensors") + suspend fun stop(context: Context): AppResult = listOf( + pause(context), + save(), + ).combineAppResults(AppErrorCode.MEASUREMENT, "Stop sensors") } diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SignificantMotion.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SignificantMotion.kt index ad827cb..220a4a7 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SignificantMotion.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/handlers/measurements/SignificantMotion.kt @@ -5,8 +5,9 @@ import android.hardware.Sensor import android.hardware.SensorManager import android.hardware.TriggerEvent import android.hardware.TriggerEventListener -import android.os.Bundle import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.flatMap @@ -15,67 +16,64 @@ import com.motionapps.sensorservices.handlers.StorageHandler import java.io.OutputStream /** Handles Android's one-shot significant-motion trigger and re-arms it after every event. */ -class SignificantMotion : - TriggerEventListener(), - MeasurementInterface { +class SignificantMotion : TriggerEventListener() { private var sensorManager: SensorManager? = null private var sensor: Sensor? = null private var output: OutputStream? = null private var writeFailure: AppError? = null - override fun initMeasurement(context: Context, params: Bundle): Result { + fun prepare(context: Context, folderName: String, useInternalStorage: Boolean): AppResult { sensorManager = context.getSystemService(SensorManager::class.java) sensor = sensorManager?.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION) - val folder = params.getString(MeasurementInterface.FOLDER_NAME).orEmpty() - val stream = if (params.getBoolean(MeasurementInterface.INTERNAL_STORAGE)) { - StorageHandler.createFileInInternalFolder(context, folder, FILE_NAME) + val stream = if (useInternalStorage) { + StorageHandler.createFileInInternalFolder(context, folderName, FILE_NAME) } else { - StorageHandler.createFileInFolder(context, folder, "text/csv", FILE_NAME) + StorageHandler.createFileInFolder(context, folderName, "text/csv", FILE_NAME) } return stream.flatMap { opened -> output = opened - appResult(AppError.Kind.STORAGE, "Write significant motion header") { + appResult(AppErrorCode.STORAGE, "Write significant motion header") { opened.write("t_unix;event\n".toByteArray()) } - }.withAppError(AppError.Kind.MEASUREMENT, "Initialize significant motion") + }.withAppError(AppErrorCode.MEASUREMENT, "Initialize significant motion") } - override fun startMeasurement(context: Context): Result = if (arm()) { - Result.success(Unit) + fun start(): AppResult = if (arm()) { + AppResult.success(Unit) } else { - Result.failure(AppError(AppError.Kind.MEASUREMENT, "Start significant motion")) + AppResult.failure(AppError(AppErrorCode.MEASUREMENT, "Start significant motion")) } - override fun pauseMeasurement(context: Context): Result = appResult( - AppError.Kind.MEASUREMENT, + private fun pause(): AppResult = appResult( + AppErrorCode.MEASUREMENT, "Pause significant motion", ) { sensor?.let { sensorManager?.cancelTriggerSensor(this, it) } } - override suspend fun saveMeasurement(context: Context): Result { - val results = mutableListOf>() - results += appResult(AppError.Kind.STORAGE, "Close significant motion") { output?.close() } - writeFailure?.let { results += Result.failure(it) } + private suspend fun save(): AppResult { + val results = mutableListOf>() + results += appResult(AppErrorCode.STORAGE, "Close significant motion") { output?.close() } + writeFailure?.let { results += AppResult.failure(it) } output = null writeFailure = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Save significant motion") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Save significant motion") } - override suspend fun onDestroyMeasurement(context: Context): Result { - val results = listOf(pauseMeasurement(context), saveMeasurement(context)) + suspend fun stop(): AppResult { + val results = listOf(pause(), save()) sensor = null sensorManager = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Stop significant motion") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Stop significant motion") } override fun onTrigger(event: TriggerEvent?) { event?.values?.firstOrNull()?.let { value -> - appResult(AppError.Kind.STORAGE, "Write significant motion") { + appResult(AppErrorCode.STORAGE, "Write significant motion") { output?.write("${System.currentTimeMillis()};$value\n".toByteArray()) - }.onFailure { writeFailure = it as AppError } + }.onFailure { writeFailure = it } } - if (!arm()) AppError(AppError.Kind.MEASUREMENT, "Re-arm significant motion") + if (!arm()) AppError(AppErrorCode.MEASUREMENT, "Re-arm significant motion") } private fun arm(): Boolean = sensor?.let { sensorManager?.requestTriggerSensor(this, it) } == true diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementIntentFactory.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementIntentFactory.kt index f110b51..1f9ab0d 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementIntentFactory.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementIntentFactory.kt @@ -9,6 +9,7 @@ import javax.inject.Inject class MeasurementIntentFactory @Inject constructor(@ApplicationContext private val context: Context) { fun create(request: MeasurementLaunchRequest): Intent = Intent(context, MeasurementService::class.java).apply { + putExtra(MeasurementService.SESSION_ID, request.sessionId) putExtra(MeasurementService.FOLDER_NAME, request.folderName) putExtra(MeasurementService.INTERNAL_STORAGE, request.useInternalStorage) putExtra(MeasurementService.ANDROID_SENSORS, request.sensorIds.toIntArray()) @@ -26,7 +27,6 @@ class MeasurementIntentFactory @Inject constructor(@ApplicationContext private v putExtra(MeasurementService.ACTIVITY_RECOGNITION, request.activityRecognition) putExtra(MeasurementService.ACTIVITY_RECOGNITION_PERIOD_SECONDS, request.activityRecognitionPeriodSeconds) putExtra(MeasurementService.SIGNIFICANT_MOTION, request.significantMotion) - putExtra(MeasurementService.CONTROLS_WEAR_MEASUREMENT, request.controlsWearMeasurement) } fun newFolderName(customName: String = "", measurementType: String = "ENDLESS"): String { diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementLaunchRequest.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementLaunchRequest.kt index 638bdde..73c9115 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementLaunchRequest.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/intent/MeasurementLaunchRequest.kt @@ -1,6 +1,7 @@ package com.motionapps.sensorservices.intent data class MeasurementLaunchRequest( + val sessionId: String = java.util.UUID.randomUUID().toString(), val folderName: String, val useInternalStorage: Boolean, val sensorIds: Set, @@ -18,5 +19,4 @@ data class MeasurementLaunchRequest( val activityRecognition: Boolean = false, val activityRecognitionPeriodSeconds: Int = 30, val significantMotion: Boolean = false, - val controlsWearMeasurement: Boolean = false, ) diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/AndroidRecordingSources.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/AndroidRecordingSources.kt new file mode 100644 index 0000000..6d55c38 --- /dev/null +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/AndroidRecordingSources.kt @@ -0,0 +1,176 @@ +package com.motionapps.sensorservices.serviceController + +import android.content.Context +import android.media.AudioManager +import android.media.ToneGenerator +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.appResult +import com.motionapps.sensorbox.core.error.combineAppResults +import com.motionapps.sensorbox.recording.RecordingSource +import com.motionapps.sensorbox.recording.RecordingSourceSpec +import com.motionapps.sensorbox.recording.RecordingSourceType +import com.motionapps.sensorservices.handlers.GPSHandler +import com.motionapps.sensorservices.handlers.StorageHandler +import com.motionapps.sensorservices.handlers.measurements.ActivityRecognitionMeasurement +import com.motionapps.sensorservices.handlers.measurements.ExtraInfoHandler +import com.motionapps.sensorservices.handlers.measurements.GPSMeasurement +import com.motionapps.sensorservices.handlers.measurements.SensorMeasurement +import com.motionapps.sensorservices.handlers.measurements.SignificantMotion + +class AndroidRecordingSources(private val context: Context, private val config: MeasurementConfig) { + private val artifacts = SessionArtifacts(context, config) + + val sources: List = listOf( + SessionSource(artifacts), + SensorSource(context, config), + GpsSource(context, config), + ActivitySource(context, config), + SignificantMotionSource(context, config), + ) + + fun annotate(timestampMillis: Long, text: String): AppResult = artifacts.annotate(timestampMillis, text) + + fun playAlarm(): AppResult = artifacts.playAlarm() +} + +private class SessionSource(private val artifacts: SessionArtifacts) : RecordingSource { + override val type = RecordingSourceType.SESSION + + override suspend fun prepare(spec: RecordingSourceSpec): AppResult = + if (spec is RecordingSourceSpec.Session) artifacts.prepare() else invalidSpec(type) + + override suspend fun start(): AppResult = AppResult.success(Unit) + + override suspend fun stop(): AppResult = artifacts.stop() +} + +private class SensorSource(private val context: Context, private val config: MeasurementConfig) : RecordingSource { + private val measurement = SensorMeasurement() + override val type = RecordingSourceType.SENSOR + + override suspend fun prepare(spec: RecordingSourceSpec): AppResult = + if (spec is RecordingSourceSpec.Sensors) { + measurement.prepare( + context = context, + folderName = config.folderName, + useInternalStorage = config.useInternalStorage, + sensorTypes = spec.sensorTypes, + samplingPeriod = spec.samplingPeriod, + ) + } else { + invalidSpec(type) + } + + override suspend fun start(): AppResult = measurement.start(context) + + override suspend fun stop(): AppResult = measurement.stop(context) +} + +private class GpsSource(private val context: Context, private val config: MeasurementConfig) : RecordingSource { + private val measurement = GPSMeasurement(GPSHandler()) + override val type = RecordingSourceType.GPS + + override suspend fun prepare(spec: RecordingSourceSpec): AppResult = if (spec is RecordingSourceSpec.Gps) { + measurement.prepare( + context = context, + folderName = config.folderName, + useInternalStorage = config.useInternalStorage, + intervalSeconds = spec.intervalSeconds, + minimumDistanceMeters = spec.minimumDistanceMeters, + ) + } else { + invalidSpec(type) + } + + override suspend fun start(): AppResult = measurement.start(context) + + override suspend fun stop(): AppResult = measurement.stop() +} + +private class ActivitySource(private val context: Context, private val config: MeasurementConfig) : RecordingSource { + private var measurement: ActivityRecognitionMeasurement? = null + override val type = RecordingSourceType.ACTIVITY_RECOGNITION + + override suspend fun prepare(spec: RecordingSourceSpec): AppResult = + if (spec is RecordingSourceSpec.ActivityRecognition) { + ActivityRecognitionMeasurement(spec.periodSeconds).also { measurement = it }.prepare( + context, + config.folderName, + config.useInternalStorage, + ) + } else { + invalidSpec(type) + } + + override suspend fun start(): AppResult = measurement?.start(context) + ?: invalidSpec(type) + + override suspend fun stop(): AppResult { + val result = measurement?.stop(context) ?: AppResult.success(Unit) + measurement = null + return result + } +} + +private class SignificantMotionSource(private val context: Context, private val config: MeasurementConfig) : + RecordingSource { + private val measurement = SignificantMotion() + override val type = RecordingSourceType.SIGNIFICANT_MOTION + + override suspend fun prepare(spec: RecordingSourceSpec): AppResult = + if (spec is RecordingSourceSpec.SignificantMotion) { + measurement.prepare(context, config.folderName, config.useInternalStorage) + } else { + invalidSpec(type) + } + + override suspend fun start(): AppResult = measurement.start() + + override suspend fun stop(): AppResult = measurement.stop() +} + +private class SessionArtifacts(private val context: Context, private val config: MeasurementConfig) { + private val extraInfo = ExtraInfoHandler() + private var toneGenerator: ToneGenerator? = null + + fun prepare(): AppResult { + val directory = if (config.useInternalStorage) { + StorageHandler.createInternalStorageMeasurementFolder(context, config.folderName) + } else { + StorageHandler.createFolderMeasurement(context, config.folderName) + } + return directory.onSuccess { extraInfo.start(config) } + } + + fun annotate(timestampMillis: Long, text: String): AppResult = appResult( + AppErrorCode.MEASUREMENT, + "Add measurement annotation", + ) { + extraInfo.annotate(timestampMillis, text) + } + + fun playAlarm(): AppResult = appResult(AppErrorCode.MEASUREMENT, "Play measurement alarm") { + extraInfo.alarmTriggered() + val tone = toneGenerator ?: ToneGenerator(AudioManager.STREAM_ALARM, 100).also { toneGenerator = it } + tone.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, ALARM_DURATION_MILLIS) + } + + fun stop(): AppResult { + val releaseTone = appResult(AppErrorCode.MEASUREMENT, "Release measurement alarm") { + toneGenerator?.release() + toneGenerator = null + } + return listOf(releaseTone, extraInfo.write(context)) + .combineAppResults(AppErrorCode.MEASUREMENT, "Close measurement session artifacts") + } + + private companion object { + const val ALARM_DURATION_MILLIS = 1_000 + } +} + +private fun invalidSpec(type: RecordingSourceType): AppResult = AppResult.failure( + AppError(AppErrorCode.VALIDATION, "Prepare $type recording source"), +) diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/MeasurementConfig.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/MeasurementConfig.kt index 61fcc48..beea66c 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/MeasurementConfig.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/MeasurementConfig.kt @@ -5,6 +5,7 @@ import android.hardware.SensorManager import com.motionapps.sensorservices.services.MeasurementService data class MeasurementConfig( + val sessionId: String, val folderName: String, val useInternalStorage: Boolean, val sensorIds: IntArray, @@ -22,10 +23,10 @@ data class MeasurementConfig( val activityRecognition: Boolean, val activityRecognitionPeriodSeconds: Int, val significantMotion: Boolean, - val controlsWearMeasurement: Boolean, ) { companion object { fun from(intent: Intent): MeasurementConfig = MeasurementConfig( + sessionId = intent.getStringExtra(MeasurementService.SESSION_ID).orEmpty(), folderName = intent.getStringExtra(MeasurementService.FOLDER_NAME).orEmpty(), useInternalStorage = intent.getBooleanExtra(MeasurementService.INTERNAL_STORAGE, false), sensorIds = intent.getIntArrayExtra(MeasurementService.ANDROID_SENSORS) ?: intArrayOf(), @@ -53,7 +54,6 @@ data class MeasurementConfig( 30, ).coerceAtLeast(1), significantMotion = intent.getBooleanExtra(MeasurementService.SIGNIFICANT_MOTION, false), - controlsWearMeasurement = intent.getBooleanExtra(MeasurementService.CONTROLS_WEAR_MEASUREMENT, false), ) } } diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/ServiceController.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/ServiceController.kt index 7032964..6cd0143 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/ServiceController.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/serviceController/ServiceController.kt @@ -1,124 +1,58 @@ package com.motionapps.sensorservices.serviceController import android.content.Context -import android.media.AudioManager -import android.media.ToneGenerator -import android.os.Bundle -import com.motionapps.sensorbox.core.error.AppError -import com.motionapps.sensorbox.core.error.appResult -import com.motionapps.sensorbox.core.error.combineAppResults -import com.motionapps.sensorbox.core.error.flatMap -import com.motionapps.sensorbox.core.error.withAppError -import com.motionapps.sensorservices.handlers.GPSHandler -import com.motionapps.sensorservices.handlers.StorageHandler -import com.motionapps.sensorservices.handlers.measurements.ActivityRecognitionMeasurement -import com.motionapps.sensorservices.handlers.measurements.ExtraInfoHandler -import com.motionapps.sensorservices.handlers.measurements.GPSMeasurement -import com.motionapps.sensorservices.handlers.measurements.MeasurementInterface -import com.motionapps.sensorservices.handlers.measurements.SensorMeasurement -import com.motionapps.sensorservices.handlers.measurements.SignificantMotion -import com.motionapps.sensorservices.services.MeasurementService - -class ServiceController { - private val sensorMeasurement = SensorMeasurement() - private val gpsMeasurement = GPSMeasurement(GPSHandler()) - private var activeConfig: MeasurementConfig? = null - private val extraInfo = ExtraInfoHandler() - private var activityRecognition: ActivityRecognitionMeasurement? = null - private val significantMotion = SignificantMotion() - private var toneGenerator: ToneGenerator? = null - - fun start(context: Context, config: MeasurementConfig): Result { - var result = createMeasurementDirectory(context, config).flatMap { - appResult(AppError.Kind.MEASUREMENT, "Initialize measurement session") { - activeConfig = config - extraInfo.start(config) - } +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.recording.RecordingClock +import com.motionapps.sensorbox.recording.RecordingDelay +import com.motionapps.sensorbox.recording.RecordingEngine +import com.motionapps.sensorbox.recording.RecordingEvent +import com.motionapps.sensorbox.recording.RecordingPlan +import com.motionapps.sensorbox.recording.RecordingSessionId +import com.motionapps.sensorbox.recording.RecordingSourceSpec +import com.motionapps.sensorbox.recording.RecordingStopReason +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.SharedFlow + +class ServiceController(context: Context, private val config: MeasurementConfig, scope: CoroutineScope) { + private val androidSources = AndroidRecordingSources(context, config) + private val sessionId = RecordingSessionId(config.sessionId) + private val engine = RecordingEngine( + sources = androidSources.sources, + scope = scope, + clock = RecordingClock(System::currentTimeMillis), + delay = RecordingDelay { durationMillis -> delay(durationMillis) }, + ) + + val events: SharedFlow = engine.events + + suspend fun prepareAndCommit(): AppResult { + val plan = config.toRecordingPlan(sessionId) + return when (val prepared = engine.prepare(plan)) { + is AppResult.Success -> engine.commit(sessionId) + is AppResult.Failure -> prepared } - if (config.sensorIds.isNotEmpty()) result = result.flatMap { startSensors(context, config) } - if (config.includesGps) result = result.flatMap { startGps(context, config) } - if (config.activityRecognition) result = result.flatMap { startActivityRecognition(context, config) } - if (config.significantMotion) result = result.flatMap { startSignificantMotion(context, config) } - return result.withAppError(AppError.Kind.MEASUREMENT, "Start measurement controller") } - suspend fun stop(context: Context): Result { - val config = activeConfig ?: return Result.success(Unit) - val results = mutableListOf>() - if (config.sensorIds.isNotEmpty()) results += sensorMeasurement.onDestroyMeasurement(context) - if (config.includesGps) results += gpsMeasurement.onDestroyMeasurement(context) - activityRecognition?.let { results += it.onDestroyMeasurement(context) } - activityRecognition = null - if (config.significantMotion) results += significantMotion.onDestroyMeasurement(context) - results += appResult(AppError.Kind.MEASUREMENT, "Release alarm") { - toneGenerator?.release() - Unit - } - toneGenerator = null - results += extraInfo.write(context) - activeConfig = null - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Stop measurement controller") - } + suspend fun stop(reason: RecordingStopReason): AppResult = engine.stop(sessionId, reason) - fun annotate(timestampMillis: Long, text: String): Result = appResult( - AppError.Kind.MEASUREMENT, - "Add measurement annotation", - ) { - extraInfo.annotate(timestampMillis, text) - } - - fun playAlarm(): Result = appResult(AppError.Kind.MEASUREMENT, "Play measurement alarm") { - extraInfo.alarmTriggered() - val tone = toneGenerator ?: ToneGenerator(AudioManager.STREAM_ALARM, 100).also { toneGenerator = it } - tone.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, ALARM_DURATION_MILLIS) - } - - private fun createMeasurementDirectory(context: Context, config: MeasurementConfig): Result = - if (config.useInternalStorage) { - StorageHandler.createInternalStorageMeasurementFolder(context, config.folderName) - } else { - StorageHandler.createFolderMeasurement(context, config.folderName) - } + fun annotate(timestampMillis: Long, text: String): AppResult = androidSources.annotate(timestampMillis, text) - private fun startSensors(context: Context, config: MeasurementConfig): Result { - val params = baseParams(config).apply { - putIntArray(MeasurementInterface.SENSOR_ID, config.sensorIds) - putInt(MeasurementInterface.SENSOR_SPEED, config.sensorSamplingPeriod) - } - return sensorMeasurement.initMeasurement(context, params) - .flatMap { sensorMeasurement.startMeasurement(context) } - .withAppError(AppError.Kind.MEASUREMENT, "Start configured sensors") - } + fun playAlarm(): AppResult = androidSources.playAlarm() - private fun startGps(context: Context, config: MeasurementConfig): Result { - val params = baseParams(config).apply { - putInt(MeasurementService.GPS_INTERVAL_SECONDS, config.gpsIntervalSeconds) - putInt(MeasurementService.GPS_DISTANCE_METERS, config.gpsMinDistanceMeters) + private fun MeasurementConfig.toRecordingPlan(sessionId: RecordingSessionId): RecordingPlan { + val specs = buildList { + add(RecordingSourceSpec.Session) + if (sensorIds.isNotEmpty()) add(RecordingSourceSpec.Sensors(sensorIds.toSet(), sensorSamplingPeriod)) + if (includesGps) add(RecordingSourceSpec.Gps(gpsIntervalSeconds, gpsMinDistanceMeters)) + if (activityRecognition) add(RecordingSourceSpec.ActivityRecognition(activityRecognitionPeriodSeconds)) + if (significantMotion) add(RecordingSourceSpec.SignificantMotion) } - return gpsMeasurement.initMeasurement(context, params) - .flatMap { gpsMeasurement.startMeasurement(context) } - .withAppError(AppError.Kind.MEASUREMENT, "Start configured GPS") - } - - private fun startActivityRecognition(context: Context, config: MeasurementConfig): Result { - val handler = ActivityRecognitionMeasurement(config.activityRecognitionPeriodSeconds) - return handler.initMeasurement(context, baseParams(config)) - .flatMap { handler.startMeasurement(context) } - .onSuccess { activityRecognition = handler } - .withAppError(AppError.Kind.MEASUREMENT, "Start configured activity recognition") - } - - private fun startSignificantMotion(context: Context, config: MeasurementConfig): Result = - significantMotion.initMeasurement(context, baseParams(config)) - .flatMap { significantMotion.startMeasurement(context) } - .withAppError(AppError.Kind.MEASUREMENT, "Start configured significant motion") - - private fun baseParams(config: MeasurementConfig) = Bundle().apply { - putString(MeasurementInterface.FOLDER_NAME, config.folderName) - putBoolean(MeasurementInterface.INTERNAL_STORAGE, config.useInternalStorage) - } - - private companion object { - const val ALARM_DURATION_MILLIS = 1_000 + return RecordingPlan( + sessionId = sessionId, + sources = specs, + startAtEpochMillis = startAtEpochMillis, + durationMillis = durationMillis, + ) } } diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/services/MeasurementService.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/services/MeasurementService.kt index 2e288eb..7eb3a98 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/services/MeasurementService.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/services/MeasurementService.kt @@ -11,19 +11,17 @@ import android.os.Build import android.os.IBinder import android.os.PowerManager import android.os.SystemClock -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults -import com.motionapps.sensorbox.core.error.suspendFlatMap +import com.motionapps.sensorbox.recording.RecordingEvent +import com.motionapps.sensorbox.recording.RecordingStopReason import com.motionapps.sensorservices.serviceController.MeasurementConfig import com.motionapps.sensorservices.serviceController.ServiceController import com.motionapps.sensorservices.session.MeasurementSessionState import com.motionapps.sensorservices.session.MeasurementSessionStore -import com.motionapps.wearoslib.WearOsConstants.WEAR_APP_CAPABILITY -import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH -import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase -import com.motionapps.wearoslib.protocol.WearCommand -import com.motionapps.wearoslib.protocol.WearCommandCodec +import com.motionapps.sensorservices.session.MeasurementStopReason import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -32,6 +30,7 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import javax.inject.Inject @AndroidEntryPoint @@ -39,22 +38,18 @@ class MeasurementService : Service() { @Inject lateinit var sessionStore: MeasurementSessionStore - @Inject - lateinit var sendWearMessage: SendWearMessageUseCase - private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate) - private val controller = ServiceController() + private var controller: ServiceController? = null private var activeConfig: MeasurementConfig? = null + private var eventJob: Job? = null private var wakeLock: PowerManager.WakeLock? = null - private var isStopping = false private var batteryReceiverRegistered = false - private var startJob: Job? = null - private var durationJob: Job? = null private var alarmJobs: List = emptyList() + private var isFinishing = false private val lowBatteryReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { - if (intent?.action == Intent.ACTION_BATTERY_LOW) stopMeasurement() + if (intent?.action == Intent.ACTION_BATTERY_LOW) requestStop(RecordingStopReason.LOW_BATTERY) } } @@ -62,55 +57,123 @@ class MeasurementService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { when (intent?.action) { - ACTION_STOP -> stopMeasurement() + ACTION_STOP -> requestStop(RecordingStopReason.USER_REQUEST) - ACTION_ANNOTATE -> controller.annotate( + ACTION_ANNOTATE -> controller?.annotate( intent.getLongExtra(ANNOTATION_TIME, System.currentTimeMillis()), intent.getStringExtra(ANNOTATION_TEXT).orEmpty(), ) - else -> intent?.takeIf { activeConfig == null }?.let { startIntent -> - startMeasurement(startIntent).onFailure { stopMeasurement() } - } + else -> intent?.takeIf { activeConfig == null }?.let(::startRecordingHost) } - return START_NOT_STICKY } - private fun startMeasurement(intent: Intent): Result = appResult( - AppError.Kind.MEASUREMENT, - "Start measurement service", - ) { - val config = MeasurementConfig.from(intent) - activeConfig = config - promoteToForeground(config) - publishRunningSession(config) - configureRuntimeResources(config) - scheduleMeasurementStart(config) + private fun startRecordingHost(intent: Intent) { + appResult(AppErrorCode.MEASUREMENT, "Start recording foreground host") { + val config = MeasurementConfig.from(intent) + require(config.sessionId.isNotBlank()) { "Recording session ID is missing" } + activeConfig = config + isFinishing = false + promoteToForeground(config) + configureRuntimeResources(config) + val serviceController = ServiceController(this, config, serviceScope) + controller = serviceController + observeEngine(serviceController) + serviceScope.launch { + val result = serviceController.prepareAndCommit() + if (result.isFailure && !isFinishing) { + finishRecording(MeasurementStopReason.SOURCE_FAILURE, result) + } + } + }.onFailure { error -> + serviceScope.launch { + finishRecording( + MeasurementStopReason.SOURCE_FAILURE, + AppResult.failure(error), + ) + } + } } - private fun scheduleMeasurementStart(config: MeasurementConfig) { - startJob = serviceScope.launch { - delay((config.startAtEpochMillis - System.currentTimeMillis()).coerceAtLeast(0L)) - if (controller.start(this@MeasurementService, config).isFailure) { - stopMeasurement() - return@launch - } - scheduleAlarms(config) - if (config.durationMillis > 0L) { - durationJob = serviceScope.launch { - delay(config.durationMillis) - stopMeasurement() + private fun observeEngine(serviceController: ServiceController) { + eventJob?.cancel() + eventJob = serviceScope.launch { + serviceController.events.collect { event -> + when (event) { + is RecordingEvent.RecordingStarted -> onRecordingStarted(event) + + is RecordingEvent.RecordingStartRejected -> finishRecording( + MeasurementStopReason.SOURCE_FAILURE, + AppResult.failure(event.error), + ) + + is RecordingEvent.RecordingStopped -> finishRecording( + event.reason.toMeasurementReason(), + event.result, + ) } } } } + private fun onRecordingStarted(event: RecordingEvent.RecordingStarted) { + val config = activeConfig ?: return + sessionStore.markRunning( + MeasurementSessionState.Running( + sessionId = event.sessionId.value, + folderName = config.folderName, + startedAtElapsedRealtime = SystemClock.elapsedRealtime(), + sensorIds = config.sensorIds.toList(), + includesGps = config.includesGps, + ), + ) + scheduleAlarms(config) + } + + private fun requestStop(reason: RecordingStopReason) { + if (isFinishing) return + sessionStore.markStopping() + serviceScope.launch { + val result = controller?.stop(reason) ?: AppResult.success(Unit) + if (result.isFailure && !isFinishing) finishRecording(reason.toMeasurementReason(), result) + } + } + + private suspend fun finishRecording(reason: MeasurementStopReason, engineResult: AppResult) { + if (isFinishing) return + isFinishing = true + val sessionId = activeConfig?.sessionId.orEmpty() + val hostResult = finishHost() + val result = listOf(engineResult, hostResult) + .combineAppResults(AppErrorCode.MEASUREMENT, "Finish recording foreground host") + sessionStore.publishStopped(sessionId, reason, result) + eventJob?.cancel() + eventJob = null + } + + private fun finishHost(): AppResult { + val results = mutableListOf>() + results += releaseRuntimeResources() + activeConfig = null + controller = null + results += appResult(AppErrorCode.MEASUREMENT, "Publish idle measurement state") { + sessionStore.markIdle() + } + results += appResult(AppErrorCode.MEASUREMENT, "Remove measurement notification") { + stopForeground(STOP_FOREGROUND_REMOVE) + } + results += appResult(AppErrorCode.MEASUREMENT, "Stop measurement service instance") { + stopSelf() + } + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Finish recording host resources") + } + private fun scheduleAlarms(config: MeasurementConfig) { alarmJobs = config.alarmOffsetsSeconds.distinct().sorted().map { seconds -> serviceScope.launch { delay(seconds * 1_000L) - controller.playAlarm() + controller?.playAlarm() } } } @@ -130,18 +193,6 @@ class MeasurementService : Service() { FOREGROUND_SERVICE_TYPE_HEALTH } - private fun publishRunningSession(config: MeasurementConfig) { - val delayMillis = (config.startAtEpochMillis - System.currentTimeMillis()).coerceAtLeast(0L) - sessionStore.markRunning( - MeasurementSessionState.Running( - folderName = config.folderName, - startedAtElapsedRealtime = SystemClock.elapsedRealtime() + delayMillis, - sensorIds = config.sensorIds.toList(), - includesGps = config.includesGps, - ), - ) - } - private fun configureRuntimeResources(config: MeasurementConfig) { if (config.useWakeLock) acquireWakeLock() if (config.stopOnLowBattery) registerLowBatteryReceiver() @@ -149,9 +200,7 @@ class MeasurementService : Service() { private fun acquireWakeLock() { val powerManager = getSystemService(PowerManager::class.java) - wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG).apply { - acquire() - } + wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG).apply { acquire() } } private fun registerLowBatteryReceiver() { @@ -164,77 +213,60 @@ class MeasurementService : Service() { batteryReceiverRegistered = true } - private fun stopMeasurement() { - if (isStopping) return - isStopping = true - sessionStore.markStopping() - serviceScope.launch { - val failures = mutableListOf() - controller.stop(this@MeasurementService).exceptionOrNull()?.let(failures::add) - stopRemoteMeasurement().exceptionOrNull()?.let(failures::add) - finishService().exceptionOrNull()?.let(failures::add) - failures.firstOrNull()?.let { first -> - failures.drop(1).forEach(first::addSuppressed) - AppError.from(AppError.Kind.MEASUREMENT, "Stop measurement service", first) - } - } - } - - private suspend fun stopRemoteMeasurement(): Result { - val config = activeConfig ?: return Result.success(Unit) - if (config.useInternalStorage || !config.controlsWearMeasurement) return Result.success(Unit) - return WearCommandCodec.encode(WearCommand.StopMeasurement).suspendFlatMap { payload -> - sendWearMessage(WEAR_APP_CAPABILITY, WEAR_MESSAGE_PATH, payload) - } - } - - private fun finishService(): Result { - val results = mutableListOf>() - results += releaseRuntimeResources() - activeConfig = null - isStopping = false - results += appResult(AppError.Kind.MEASUREMENT, "Publish idle measurement state") { - sessionStore.markIdle() - } - results += appResult(AppError.Kind.MEASUREMENT, "Remove measurement notification") { - stopForeground(STOP_FOREGROUND_REMOVE) - } - results += appResult(AppError.Kind.MEASUREMENT, "Stop measurement service instance") { - stopSelf() - } - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Finish measurement service") - } - - private fun releaseRuntimeResources(): Result { - val results = mutableListOf>() - startJob?.cancel() - startJob = null - durationJob?.cancel() - durationJob = null + private fun releaseRuntimeResources(): AppResult { alarmJobs.forEach(Job::cancel) alarmJobs = emptyList() - results += appResult(AppError.Kind.MEASUREMENT, "Release measurement wake lock") { + val results = mutableListOf>() + results += appResult(AppErrorCode.MEASUREMENT, "Release measurement wake lock") { wakeLock?.takeIf(PowerManager.WakeLock::isHeld)?.release() + wakeLock = null } - wakeLock = null - results += appResult(AppError.Kind.MEASUREMENT, "Unregister low battery receiver") { + results += appResult(AppErrorCode.MEASUREMENT, "Unregister low battery receiver") { if (batteryReceiverRegistered) unregisterReceiver(lowBatteryReceiver) + batteryReceiverRegistered = false } - batteryReceiverRegistered = false - return results.combineAppResults(AppError.Kind.MEASUREMENT, "Release measurement resources") + return results.combineAppResults(AppErrorCode.MEASUREMENT, "Release recording host resources") } override fun onDestroy() { - if (activeConfig != null && !isStopping) { - AppError(AppError.Kind.MEASUREMENT, "Measurement service destroyed before cleanup") + val config = activeConfig + if (config != null && !isFinishing) { + isFinishing = true + val cleanup = runBlocking(Dispatchers.IO) { + controller?.stop(RecordingStopReason.PLATFORM_DESTROYED) ?: AppResult.success(Unit) + } + val resources = releaseRuntimeResources() + sessionStore.markIdle() + sessionStore.publishStopped( + config.sessionId, + MeasurementStopReason.SERVICE_DESTROYED, + listOf(cleanup, resources).combineAppResults( + AppErrorCode.MEASUREMENT, + "Destroy recording foreground host", + ), + ) } - releaseRuntimeResources() - appResult(AppError.Kind.MEASUREMENT, "Publish destroyed measurement state") { sessionStore.markIdle() } + eventJob?.cancel() serviceScope.cancel() super.onDestroy() } + private fun RecordingStopReason.toMeasurementReason(): MeasurementStopReason = when (this) { + RecordingStopReason.USER_REQUEST, + RecordingStopReason.PAIRED_ABORT, + -> MeasurementStopReason.USER_REQUEST + + RecordingStopReason.DURATION_EXPIRED -> MeasurementStopReason.DURATION_EXPIRED + + RecordingStopReason.LOW_BATTERY -> MeasurementStopReason.LOW_BATTERY + + RecordingStopReason.SOURCE_FAILURE -> MeasurementStopReason.SOURCE_FAILURE + + RecordingStopReason.PLATFORM_DESTROYED -> MeasurementStopReason.SERVICE_DESTROYED + } + companion object { + const val SESSION_ID = "SESSION_ID" const val FOLDER_NAME = "FOLDER_NAME" const val INTERNAL_STORAGE = "INTERNAL_STORAGE" const val ANDROID_SENSORS = "ANDROID_SENSORS" @@ -252,7 +284,6 @@ class MeasurementService : Service() { const val ACTIVITY_RECOGNITION = "ACTIVITY_RECOGNITION" const val ACTIVITY_RECOGNITION_PERIOD_SECONDS = "ACTIVITY_RECOGNITION_PERIOD_SECONDS" const val SIGNIFICANT_MOTION = "SIGNIFICANT_MOTION" - const val CONTROLS_WEAR_MEASUREMENT = "CONTROLS_WEAR_MEASUREMENT" const val ACTION_ANNOTATE = "com.motionapps.sensorbox.action.ANNOTATE_MEASUREMENT" const val ANNOTATION_TIME = "ANNOTATION_TIME" const val ANNOTATION_TEXT = "ANNOTATION_TEXT" diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionState.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionState.kt index 580a029..d89c7b4 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionState.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionState.kt @@ -4,6 +4,7 @@ sealed interface MeasurementSessionState { data object Idle : MeasurementSessionState data class Running( + val sessionId: String, val folderName: String, val startedAtElapsedRealtime: Long, val sensorIds: List, diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionStore.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionStore.kt index 0b2684f..9e751b0 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionStore.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/session/MeasurementSessionStore.kt @@ -1,6 +1,9 @@ package com.motionapps.sensorservices.session +import com.motionapps.sensorbox.core.error.AppResult +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import javax.inject.Inject @@ -9,7 +12,9 @@ import javax.inject.Singleton @Singleton class MeasurementSessionStore @Inject constructor() { private val mutableState = MutableStateFlow(MeasurementSessionState.Idle) + private val mutableEvents = MutableSharedFlow(extraBufferCapacity = EVENT_BUFFER_SIZE) val state: StateFlow = mutableState.asStateFlow() + val events: SharedFlow = mutableEvents fun markRunning(state: MeasurementSessionState.Running) { mutableState.value = state @@ -22,4 +27,25 @@ class MeasurementSessionStore @Inject constructor() { fun markIdle() { mutableState.value = MeasurementSessionState.Idle } + + fun publishStopped(sessionId: String, reason: MeasurementStopReason, result: AppResult) { + mutableEvents.tryEmit(MeasurementSessionEvent.Stopped(sessionId, reason, result)) + } + + private companion object { + const val EVENT_BUFFER_SIZE = 16 + } +} + +enum class MeasurementStopReason { + USER_REQUEST, + DURATION_EXPIRED, + LOW_BATTERY, + SOURCE_FAILURE, + SERVICE_DESTROYED, +} + +sealed interface MeasurementSessionEvent { + data class Stopped(val sessionId: String, val reason: MeasurementStopReason, val result: AppResult) : + MeasurementSessionEvent } diff --git a/sensorservices/src/main/java/com/motionapps/sensorservices/types/SensorHolder.kt b/sensorservices/src/main/java/com/motionapps/sensorservices/types/SensorHolder.kt index 12ca4d3..fe3b753 100644 --- a/sensorservices/src/main/java/com/motionapps/sensorservices/types/SensorHolder.kt +++ b/sensorservices/src/main/java/com/motionapps/sensorservices/types/SensorHolder.kt @@ -4,6 +4,8 @@ import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.combineAppResults import com.motionapps.sensorbox.core.error.suspendAppResult @@ -25,7 +27,7 @@ class SensorHolder(val spec: SensorSpec, outputStream: OutputStream) : SensorEve writer.append(spec.header) for (sample in samples) writer.appendLine(sample.toCsv(spec.axisCount)) } catch (error: IOException) { - writerFailure = AppError.from(AppError.Kind.STORAGE, "Write ${spec.fileName}", error) + writerFailure = AppError.from(AppErrorCode.STORAGE, "Write ${spec.fileName}", error) samples.close() } } @@ -44,21 +46,21 @@ class SensorHolder(val spec: SensorSpec, outputStream: OutputStream) : SensorEve ), ) if (result.isFailure && writerFailure == null) { - writerFailure = AppError(AppError.Kind.STORAGE, "Buffer ${spec.fileName}") + writerFailure = AppError(AppErrorCode.STORAGE, "Buffer ${spec.fileName}") } } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) = Unit - suspend fun close(): Result { + suspend fun close(): AppResult { samples.close() - val results = mutableListOf>() - results += suspendAppResult(AppError.Kind.STORAGE, "Finish ${spec.fileName} writer") { writerJob.await() } - writerFailure?.let { results += Result.failure(it) } - results += appResult(AppError.Kind.STORAGE, "Flush ${spec.fileName}") { writer.flush() } - results += appResult(AppError.Kind.STORAGE, "Close ${spec.fileName}") { writer.close() } + val results = mutableListOf>() + results += suspendAppResult(AppErrorCode.STORAGE, "Finish ${spec.fileName} writer") { writerJob.await() } + writerFailure?.let { results += AppResult.failure(it) } + results += appResult(AppErrorCode.STORAGE, "Flush ${spec.fileName}") { writer.flush() } + results += appResult(AppErrorCode.STORAGE, "Close ${spec.fileName}") { writer.close() } scope.cancel() - return results.combineAppResults(AppError.Kind.STORAGE, "Close ${spec.fileName}") + return results.combineAppResults(AppErrorCode.STORAGE, "Close ${spec.fileName}") } } diff --git a/sensorservices/src/test/java/com/motionapps/sensorservices/types/SensorHolderErrorTest.kt b/sensorservices/src/test/java/com/motionapps/sensorservices/types/SensorHolderErrorTest.kt index c0ea808..2d2d40c 100644 --- a/sensorservices/src/test/java/com/motionapps/sensorservices/types/SensorHolderErrorTest.kt +++ b/sensorservices/src/test/java/com/motionapps/sensorservices/types/SensorHolderErrorTest.kt @@ -2,6 +2,7 @@ package com.motionapps.sensorservices.types import android.hardware.Sensor import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -17,9 +18,9 @@ class SensorHolderErrorTest { val result = holder.close() - val error = result.exceptionOrNull() + val error = result.errorOrNull() assertTrue(error is AppError) - assertEquals(AppError.Kind.STORAGE, (error as AppError).kind) + assertEquals(AppErrorCode.STORAGE, (error as AppError).code) } private class FailingOutputStream : OutputStream() { diff --git a/settings.gradle.kts b/settings.gradle.kts index ea7fb18..756485c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,6 +26,8 @@ rootProject.name = "SensorBox" include( ":app", ":core", + ":core-common", + ":recording-core", ":sensorservices", ":wear", ":wearoslib", diff --git a/wear/src/androidTest/java/com/motionapps/sensorbox/emulator/WearToPhoneSyncSenderEmulatorTest.kt b/wear/src/androidTest/java/com/motionapps/sensorbox/emulator/WearToPhoneSyncSenderEmulatorTest.kt index 5f6331c..9b6648c 100644 --- a/wear/src/androidTest/java/com/motionapps/sensorbox/emulator/WearToPhoneSyncSenderEmulatorTest.kt +++ b/wear/src/androidTest/java/com/motionapps/sensorbox/emulator/WearToPhoneSyncSenderEmulatorTest.kt @@ -3,6 +3,8 @@ package com.motionapps.sensorbox.emulator import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.domain.sync.SyncWearMeasurementsUseCase import com.motionapps.wearoslib.connectivity.GooglePlayWearConnectionRepository import com.motionapps.wearoslib.files.GooglePlayWearFileTransferClient @@ -41,12 +43,16 @@ class WearToPhoneSyncSenderEmulatorTest { } private suspend fun syncWhenPhoneBecomesReachable(sync: SyncWearMeasurementsUseCase): Int { - var lastFailure: Throwable? = null + var lastFailure: AppError? = null repeat(MAX_ATTEMPTS) { - sync().onSuccess { return it }.onFailure { lastFailure = it } + when (val result = sync()) { + is AppResult.Success -> return result.value + is AppResult.Failure -> lastFailure = result.error + } delay(POLL_INTERVAL_MILLIS) } - throw AssertionError("Phone emulator did not become reachable", lastFailure) + val message = "Phone emulator did not become reachable: ${lastFailure?.code}" + throw AssertionError(message, lastFailure?.cause) } private companion object { diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index 6f0248d..d598f3a 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -68,7 +68,7 @@ diff --git a/wear/src/main/java/com/motionapps/sensorbox/WearSensorBoxApp.kt b/wear/src/main/java/com/motionapps/sensorbox/WearSensorBoxApp.kt index b432411..138bf5e 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/WearSensorBoxApp.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/WearSensorBoxApp.kt @@ -1,13 +1,22 @@ package com.motionapps.sensorbox import android.app.Application -import com.motionapps.sensorbox.core.error.AppDiagnostics +import com.motionapps.sensorbox.communication.WearRecordingSessionObserver +import com.motionapps.sensorbox.core.error.FileDiagnostics import dagger.hilt.android.HiltAndroidApp +import javax.inject.Inject @HiltAndroidApp class WearSensorBoxApp : Application() { + @Inject + lateinit var diagnostics: FileDiagnostics + + @Inject + lateinit var recordingSessionObserver: WearRecordingSessionObserver + override fun onCreate() { super.onCreate() - AppDiagnostics.install(this) + diagnostics.installUncaughtExceptionHandler() + recordingSessionObserver.start() } } diff --git a/wear/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt b/wear/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt index 122fa1b..6e96a73 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/activities/MainActivity.kt @@ -16,7 +16,7 @@ import androidx.core.net.toUri import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.remote.interactions.RemoteActivityHelper import com.motionapps.sensorbox.R -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.presentation.dashboard.WearDashboardEffect import com.motionapps.sensorbox.presentation.dashboard.WearDashboardIntent @@ -66,14 +66,14 @@ class MainActivity : ComponentActivity() { private fun handleEffect(effect: WearDashboardEffect) { when (effect) { is WearDashboardEffect.RequestPermissions -> appResult( - AppError.Kind.PERMISSION, + AppErrorCode.PERMISSION, "Request Wear permissions", ) { permissions.launch(effect.permissions.toTypedArray()) } WearDashboardEffect.OpenPhone -> appResult( - AppError.Kind.EXTERNAL_ACTION, + AppErrorCode.EXTERNAL_ACTION, "Open phone launcher", ) { startActivity(Intent(this, MoveToMain::class.java)) } @@ -89,12 +89,12 @@ class MainActivity : ComponentActivity() { val intent = Intent(Intent.ACTION_VIEW) .addCategory(Intent.CATEGORY_BROWSABLE) .setData(url.toUri()) - appResult(AppError.Kind.EXTERNAL_ACTION, "Request phone browser") { + appResult(AppErrorCode.EXTERNAL_ACTION, "Request phone browser") { RemoteActivityHelper(this).startRemoteActivity(intent) }.onSuccess { request -> request.addListener( { - appResult(AppError.Kind.EXTERNAL_ACTION, "Open phone browser") { request.get() } + appResult(AppErrorCode.EXTERNAL_ACTION, "Open phone browser") { request.get() } .fold( onSuccess = { Toast.makeText(this, R.string.open_phone_browser, Toast.LENGTH_SHORT).show() diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/MsgListener.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/MsgListener.kt index 32d786c..1d8f6c4 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/communication/MsgListener.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/MsgListener.kt @@ -1,108 +1,24 @@ package com.motionapps.sensorbox.communication -import android.hardware.Sensor import com.google.android.gms.wearable.MessageEvent import com.google.android.gms.wearable.WearableListenerService -import com.motionapps.sensorbox.core.error.AppError -import com.motionapps.sensorbox.core.error.suspendAppResult -import com.motionapps.sensorbox.core.error.suspendFlatMap -import com.motionapps.sensorbox.core.error.withAppError -import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository -import com.motionapps.sensorbox.domain.measurement.WearMeasurementControlUseCase -import com.motionapps.sensorbox.domain.measurement.WearMeasurementPermissionUseCase -import com.motionapps.sensorbox.domain.sensors.GetWearSensorsUseCase -import com.motionapps.wearoslib.WearOsConstants.PHONE_APP_CAPABILITY -import com.motionapps.wearoslib.WearOsConstants.PHONE_MESSAGE_PATH -import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH -import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase -import com.motionapps.wearoslib.protocol.WearCommand -import com.motionapps.wearoslib.protocol.WearCommandCodec -import com.motionapps.wearoslib.protocol.WearSensorInfo import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint class MsgListener : WearableListenerService() { @Inject - lateinit var measurementControl: WearMeasurementControlUseCase - - @Inject - lateinit var measurementPermissions: WearMeasurementPermissionUseCase - - @Inject - lateinit var preferencesRepository: AppPreferencesRepository - - @Inject - lateinit var getWearSensors: GetWearSensorsUseCase - - @Inject - lateinit var sendWearMessage: SendWearMessageUseCase + lateinit var messageDispatcher: WearMessageDispatcher private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) override fun onMessageReceived(messageEvent: MessageEvent) { - if (messageEvent.path != WEAR_MESSAGE_PATH) return - val command = WearCommandCodec.decode(messageEvent.data).fold( - onSuccess = { it }, - onFailure = { return }, - ) - when (command) { - is WearCommand.StartMeasurement -> startMeasurement(command) - WearCommand.StopMeasurement -> measurementControl.stop() - WearCommand.RequestSensorList -> sendSensorList() - WearCommand.SyncMeasurements, WearCommand.LaunchPhone, is WearCommand.SensorList -> Unit - } - } - - private fun sendSensorList() { - serviceScope.launch { - suspendAppResult(AppError.Kind.MEASUREMENT, "Read Wear sensors") { - val sensors = getWearSensors().map { sensor -> - WearSensorInfo(sensor.type, sensor.name, sensor.vendor, sensor.isHeartRate) - } - sensors - }.suspendFlatMap { sensors -> - WearCommandCodec.encode(WearCommand.SensorList(sensors)) - }.suspendFlatMap { payload -> - sendWearMessage( - PHONE_APP_CAPABILITY, - PHONE_MESSAGE_PATH, - payload, - ) - }.withAppError(AppError.Kind.CONNECTIVITY, "Send Wear sensor list") - } - } - - private fun startMeasurement(command: WearCommand.StartMeasurement) { - serviceScope.launch { - suspendAppResult(AppError.Kind.PERMISSION, "Check remote measurement permissions") { - val includesHeartRate = Sensor.TYPE_HEART_RATE in command.sensorIds - measurementPermissions(command.includesGps, includesHeartRate) - }.suspendFlatMap { missingPermissions -> - if (missingPermissions.isNotEmpty()) { - return@suspendFlatMap Result.failure( - AppError(AppError.Kind.PERMISSION, "Start remote Wear measurement"), - ) - } - preferencesRepository.preferences.first().suspendFlatMap { preferences -> - measurementControl.start( - sensorIds = command.sensorIds.toSet(), - includesGps = command.includesGps, - preferences = preferences, - folderName = command.folderName, - startAtEpochMillis = command.startAtEpochMillis, - durationMillis = command.durationMillis, - measurementType = command.measurementType, - ) - } - }.withAppError(AppError.Kind.MEASUREMENT, "Handle remote measurement start") - } + serviceScope.launch { messageDispatcher.dispatch(messageEvent.path, messageEvent.data) } } override fun onDestroy() { diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/WearAcknowledgementInbox.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/WearAcknowledgementInbox.kt new file mode 100644 index 0000000..56a0ae0 --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/WearAcknowledgementInbox.kt @@ -0,0 +1,38 @@ +package com.motionapps.sensorbox.communication + +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearSessionCommand +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.first +import java.util.concurrent.ConcurrentHashMap +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class WearAcknowledgementInbox @Inject constructor() { + private val acknowledgements = ConcurrentHashMap() + private val updates = MutableSharedFlow(extraBufferCapacity = BUFFER_SIZE) + + fun publish(acknowledgement: WearCommand.Acknowledgement) { + acknowledgements[acknowledgement.key()] = acknowledgement + updates.tryEmit(acknowledgement) + } + + fun clear(sessionId: String, command: WearSessionCommand) { + acknowledgements.remove(Key(sessionId, command)) + } + + suspend fun await(sessionId: String, command: WearSessionCommand): WearCommand.Acknowledgement { + val key = Key(sessionId, command) + acknowledgements[key]?.let { return it } + return updates.first { acknowledgement -> acknowledgement.key() == key } + } + + private fun WearCommand.Acknowledgement.key() = Key(sessionId, command) + + private data class Key(val sessionId: String, val command: WearSessionCommand) + + private companion object { + const val BUFFER_SIZE = 32 + } +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandEnvironment.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandEnvironment.kt new file mode 100644 index 0000000..0333b8f --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandEnvironment.kt @@ -0,0 +1,43 @@ +package com.motionapps.sensorbox.communication + +import android.hardware.Sensor +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.preferences.AppPreferences +import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository +import com.motionapps.sensorbox.domain.measurement.WearMeasurementPermissionUseCase +import com.motionapps.sensorbox.domain.sensors.GetWearSensorsUseCase +import com.motionapps.wearoslib.protocol.WearRecordingRequest +import com.motionapps.wearoslib.protocol.WearSensorInfo +import kotlinx.coroutines.flow.first +import javax.inject.Inject + +interface WearCommandEnvironment { + suspend fun prepare(request: WearRecordingRequest): AppResult + + fun sensors(): List +} + +class AndroidWearCommandEnvironment @Inject constructor( + private val measurementPermissions: WearMeasurementPermissionUseCase, + private val preferencesRepository: AppPreferencesRepository, + private val getWearSensors: GetWearSensorsUseCase, +) : WearCommandEnvironment { + override suspend fun prepare(request: WearRecordingRequest): AppResult { + val availableSensorIds = getWearSensors().map { it.type }.toSet() + if (!availableSensorIds.containsAll(request.sensorIds)) { + return AppResult.failure(AppError(AppErrorCode.VALIDATION, "Validate Wear recording sensors")) + } + val includesHeartRate = Sensor.TYPE_HEART_RATE in request.sensorIds + val missingPermissions = measurementPermissions(request.includesGps, includesHeartRate) + if (missingPermissions.isNotEmpty()) { + return AppResult.failure(AppError(AppErrorCode.PERMISSION, "Prepare Wear recording permissions")) + } + return preferencesRepository.preferences.first() + } + + override fun sensors(): List = getWearSensors().map { sensor -> + WearSensorInfo(sensor.type, sensor.name, sensor.vendor, sensor.isHeartRate) + } +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandHandler.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandHandler.kt new file mode 100644 index 0000000..1f93650 --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/WearCommandHandler.kt @@ -0,0 +1,206 @@ +package com.motionapps.sensorbox.communication + +import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.preferences.AppPreferences +import com.motionapps.sensorbox.domain.measurement.WearRecordingController +import com.motionapps.wearoslib.WearOsConstants.PHONE_APP_CAPABILITY +import com.motionapps.wearoslib.WearOsConstants.PHONE_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.SendWearCommandUseCase +import com.motionapps.wearoslib.protocol.WearAcknowledgementOutcome +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearRecordingRequest +import com.motionapps.wearoslib.protocol.WearSessionCommand +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withTimeoutOrNull +import javax.inject.Inject + +class WearCommandHandler @Inject constructor( + private val recordingController: WearRecordingController, + private val environment: WearCommandEnvironment, + private val sendCommand: SendWearCommandUseCase, + private val acknowledgementInbox: WearAcknowledgementInbox, +) { + private val mutex = Mutex() + private val acknowledgements = mutableMapOf() + private var preparedSession: PreparedSession? = null + private var activeSessionId: String? = null + + suspend fun handle(command: WearCommand): AppResult = when (command) { + is WearCommand.PrepareRecording -> sendAcknowledgement(prepare(command)) + + is WearCommand.CommitRecording -> sendAcknowledgement(commit(command)) + + is WearCommand.AbortRecording -> sendAcknowledgement(abort(command)) + + is WearCommand.StopRecording -> sendAcknowledgement(stop(command)) + + WearCommand.RequestSensorList -> sendSensorList() + + is WearCommand.Acknowledgement -> { + acknowledgementInbox.publish(command) + AppResult.success(Unit) + } + + WearCommand.LaunchPhone, + WearCommand.SyncMeasurements, + is WearCommand.SensorList, + -> AppResult.success(Unit) + } + + suspend fun onAutomaticStop(reason: com.motionapps.wearoslib.protocol.WearStopReason): AppResult { + val sessionId = mutex.withLock { + activeSessionId?.also(::clearSession) ?: return AppResult.success(Unit) + } + val command = WearCommand.StopRecording(sessionId, reason) + acknowledgementInbox.clear(sessionId, WearSessionCommand.STOP) + repeat(ATTEMPT_COUNT) { + if (sendCommand(PHONE_APP_CAPABILITY, PHONE_MESSAGE_PATH, command).isSuccess) { + val acknowledgement = withTimeoutOrNull(STOP_TIMEOUT_MILLIS / ATTEMPT_COUNT) { + acknowledgementInbox.await(sessionId, WearSessionCommand.STOP) + } + if (acknowledgement != null) { + return if (acknowledgement.outcome == WearAcknowledgementOutcome.SUCCEEDED) { + AppResult.success(Unit) + } else { + AppResult.failure( + AppError( + acknowledgement.errorCode ?: AppErrorCode.UNKNOWN, + "Propagate automatic Wear stop", + ), + ) + } + } + } + } + return AppResult.failure( + AppError( + code = AppErrorCode.TIMEOUT, + operation = "Propagate automatic Wear stop", + diagnosticMessage = "Phone stop acknowledgement timed out", + context = mapOf("sessionId" to sessionId, "retryCount" to RETRY_COUNT.toString()), + isRetryable = true, + ), + ) + } + + private suspend fun prepare(command: WearCommand.PrepareRecording): WearCommand.Acknowledgement = mutex.withLock { + cached(command.sessionId, WearSessionCommand.PREPARE)?.let { return@withLock it } + val result = validatePrepare(command) + if (result is AppResult.Success) { + preparedSession = PreparedSession(command.sessionId, command.request, result.value) + } + acknowledgement( + sessionId = command.sessionId, + command = WearSessionCommand.PREPARE, + result = result.map { Unit }, + failureOutcome = WearAcknowledgementOutcome.REJECTED, + ) + } + + private suspend fun validatePrepare(command: WearCommand.PrepareRecording): AppResult { + val occupiedSession = activeSessionId ?: preparedSession?.sessionId + if (occupiedSession != null && occupiedSession != command.sessionId) { + return AppResult.failure(AppError(AppErrorCode.CONFLICT, "Prepare Wear recording")) + } + return environment.prepare(command.request) + } + + private suspend fun commit(command: WearCommand.CommitRecording): WearCommand.Acknowledgement = mutex.withLock { + cached(command.sessionId, WearSessionCommand.COMMIT)?.let { return@withLock it } + val prepared = preparedSession + val result = if (activeSessionId == command.sessionId) { + AppResult.success(Unit) + } else if (prepared?.sessionId != command.sessionId) { + AppResult.failure(AppError(AppErrorCode.CONFLICT, "Commit unprepared Wear recording")) + } else { + recordingController.start( + sessionId = command.sessionId, + request = prepared.request, + preferences = prepared.preferences, + startAtEpochMillis = command.startAtEpochMillis, + ).onSuccess { + activeSessionId = command.sessionId + preparedSession = null + } + } + acknowledgement(command.sessionId, WearSessionCommand.COMMIT, result) + } + + private suspend fun abort(command: WearCommand.AbortRecording): WearCommand.Acknowledgement = mutex.withLock { + cached(command.sessionId, WearSessionCommand.ABORT)?.let { return@withLock it } + val result = when { + activeSessionId == command.sessionId -> recordingController.stop( + command.sessionId, + com.motionapps.wearoslib.protocol.WearStopReason.PAIRED_ABORT, + ) + + preparedSession?.sessionId == command.sessionId -> AppResult.success(Unit) + + else -> AppResult.success(Unit) + } + if (result.isSuccess) clearSession(command.sessionId) + acknowledgement(command.sessionId, WearSessionCommand.ABORT, result) + } + + private suspend fun stop(command: WearCommand.StopRecording): WearCommand.Acknowledgement = mutex.withLock { + cached(command.sessionId, WearSessionCommand.STOP)?.let { return@withLock it } + val result = when { + activeSessionId == command.sessionId -> recordingController.stop(command.sessionId, command.reason) + preparedSession?.sessionId == command.sessionId -> AppResult.success(Unit) + else -> AppResult.success(Unit) + } + if (result.isSuccess) clearSession(command.sessionId) + acknowledgement(command.sessionId, WearSessionCommand.STOP, result) + } + + private fun acknowledgement( + sessionId: String, + command: WearSessionCommand, + result: AppResult, + failureOutcome: WearAcknowledgementOutcome = WearAcknowledgementOutcome.FAILED, + ): WearCommand.Acknowledgement { + val acknowledgement = WearCommand.Acknowledgement( + sessionId = sessionId, + command = command, + outcome = if (result.isSuccess) WearAcknowledgementOutcome.SUCCEEDED else failureOutcome, + errorCode = result.errorOrNull()?.code, + failureCount = if (result.isFailure) 1 else 0, + ) + acknowledgements[AcknowledgementKey(sessionId, command)] = acknowledgement + return acknowledgement + } + + private fun cached(sessionId: String, command: WearSessionCommand): WearCommand.Acknowledgement? = + acknowledgements[AcknowledgementKey(sessionId, command)] + + private fun clearSession(sessionId: String) { + if (preparedSession?.sessionId == sessionId) preparedSession = null + if (activeSessionId == sessionId) activeSessionId = null + } + + private suspend fun sendSensorList(): AppResult = sendCommand( + PHONE_APP_CAPABILITY, + PHONE_MESSAGE_PATH, + WearCommand.SensorList(environment.sensors()), + ) + + private suspend fun sendAcknowledgement(acknowledgement: WearCommand.Acknowledgement): AppResult = + sendCommand(PHONE_APP_CAPABILITY, PHONE_MESSAGE_PATH, acknowledgement) + + private data class PreparedSession( + val sessionId: String, + val request: WearRecordingRequest, + val preferences: AppPreferences, + ) + + private data class AcknowledgementKey(val sessionId: String, val command: WearSessionCommand) + + private companion object { + const val STOP_TIMEOUT_MILLIS = 5_000L + const val RETRY_COUNT = 2 + const val ATTEMPT_COUNT = RETRY_COUNT + 1 + } +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/WearMessageDispatcher.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/WearMessageDispatcher.kt new file mode 100644 index 0000000..48c94c4 --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/WearMessageDispatcher.kt @@ -0,0 +1,21 @@ +package com.motionapps.sensorbox.communication + +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.suspendFlatMap +import com.motionapps.sensorbox.core.error.toDiagnosticEvent +import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH +import com.motionapps.wearoslib.protocol.WearCommandCodec +import javax.inject.Inject + +class WearMessageDispatcher @Inject constructor( + private val commandHandler: WearCommandHandler, + private val diagnosticLogger: DiagnosticLogger, +) { + suspend fun dispatch(path: String, payload: ByteArray): AppResult { + if (path != WEAR_MESSAGE_PATH) return AppResult.success(Unit) + return WearCommandCodec.decode(payload) + .suspendFlatMap(commandHandler::handle) + .onFailure { error -> diagnosticLogger.record(error.toDiagnosticEvent()) } + } +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/communication/WearRecordingSessionObserver.kt b/wear/src/main/java/com/motionapps/sensorbox/communication/WearRecordingSessionObserver.kt new file mode 100644 index 0000000..51d25fa --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/communication/WearRecordingSessionObserver.kt @@ -0,0 +1,51 @@ +package com.motionapps.sensorbox.communication + +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.toDiagnosticEvent +import com.motionapps.sensorservices.session.MeasurementSessionEvent +import com.motionapps.sensorservices.session.MeasurementSessionStore +import com.motionapps.sensorservices.session.MeasurementStopReason +import com.motionapps.wearoslib.protocol.WearStopReason +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicBoolean +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class WearRecordingSessionObserver @Inject constructor( + private val sessionStore: MeasurementSessionStore, + private val commandHandler: WearCommandHandler, + private val diagnosticLogger: DiagnosticLogger, +) { + private val started = AtomicBoolean(false) + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + + fun start() { + if (!started.compareAndSet(false, true)) return + scope.launch { + sessionStore.events.collect { event -> + if (event is MeasurementSessionEvent.Stopped) onStopped(event) + } + } + } + + private suspend fun onStopped(event: MeasurementSessionEvent.Stopped) { + event.result.errorOrNull()?.let { error -> diagnosticLogger.record(error.toDiagnosticEvent()) } + val reason = event.reason.toAutomaticWearReason() ?: return + commandHandler.onAutomaticStop(reason).onFailure { error -> + diagnosticLogger.record(error.toDiagnosticEvent()) + } + } + + private fun MeasurementStopReason.toAutomaticWearReason(): WearStopReason? = when (this) { + MeasurementStopReason.USER_REQUEST -> null + MeasurementStopReason.DURATION_EXPIRED -> WearStopReason.DURATION_EXPIRED + MeasurementStopReason.LOW_BATTERY -> WearStopReason.LOW_BATTERY + MeasurementStopReason.SOURCE_FAILURE -> WearStopReason.SOURCE_FAILURE + MeasurementStopReason.SERVICE_DESTROYED -> WearStopReason.SERVICE_DESTROYED + } +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt b/wear/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt new file mode 100644 index 0000000..5021b69 --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/di/DiagnosticsModule.kt @@ -0,0 +1,47 @@ +package com.motionapps.sensorbox.di + +import android.app.Application +import android.content.Context +import android.content.pm.ApplicationInfo +import android.os.Build +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.error.DiagnosticMetadata +import com.motionapps.sensorbox.core.error.DiagnosticsStore +import com.motionapps.sensorbox.core.error.FileDiagnostics +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DiagnosticsModule { + @Provides + @Singleton + fun provideFileDiagnostics(@ApplicationContext context: Context): FileDiagnostics = FileDiagnostics( + context = context, + metadata = DiagnosticMetadata( + appVersion = context.packageManager.getPackageInfo(context.packageName, 0).versionName.orEmpty(), + buildType = if (context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { + "debug" + } else { + "release" + }, + deviceModel = Build.MODEL, + androidVersion = Build.VERSION.RELEASE, + processName = if (Build.VERSION.SDK_INT >= 28) { + Application.getProcessName() + } else { + context.applicationInfo.processName + }, + ), + ) + + @Provides + fun provideDiagnosticLogger(diagnostics: FileDiagnostics): DiagnosticLogger = diagnostics + + @Provides + fun provideDiagnosticsStore(diagnostics: FileDiagnostics): DiagnosticsStore = diagnostics +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt b/wear/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt new file mode 100644 index 0000000..6cdf4f7 --- /dev/null +++ b/wear/src/main/java/com/motionapps/sensorbox/di/RecordingModule.kt @@ -0,0 +1,20 @@ +package com.motionapps.sensorbox.di + +import com.motionapps.sensorbox.communication.AndroidWearCommandEnvironment +import com.motionapps.sensorbox.communication.WearCommandEnvironment +import com.motionapps.sensorbox.domain.measurement.WearMeasurementControlUseCase +import com.motionapps.sensorbox.domain.measurement.WearRecordingController +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class RecordingModule { + @Binds + abstract fun bindWearRecordingController(implementation: WearMeasurementControlUseCase): WearRecordingController + + @Binds + abstract fun bindWearCommandEnvironment(implementation: AndroidWearCommandEnvironment): WearCommandEnvironment +} diff --git a/wear/src/main/java/com/motionapps/sensorbox/domain/measurement/WearMeasurementControlUseCase.kt b/wear/src/main/java/com/motionapps/sensorbox/domain/measurement/WearMeasurementControlUseCase.kt index 5dd5e37..ba05083 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/domain/measurement/WearMeasurementControlUseCase.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/domain/measurement/WearMeasurementControlUseCase.kt @@ -4,29 +4,61 @@ import android.content.Context import android.content.Intent import android.hardware.SensorManager import androidx.core.content.ContextCompat -import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.preferences.AppPreferences import com.motionapps.sensorservices.intent.MeasurementIntentFactory import com.motionapps.sensorservices.intent.MeasurementLaunchRequest import com.motionapps.sensorservices.services.MeasurementService +import com.motionapps.wearoslib.protocol.WearRecordingRequest +import com.motionapps.wearoslib.protocol.WearStopReason import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject +interface WearRecordingController { + fun start( + sessionId: String, + request: WearRecordingRequest, + preferences: AppPreferences, + startAtEpochMillis: Long, + ): AppResult + + fun stop(sessionId: String, reason: WearStopReason): AppResult +} + class WearMeasurementControlUseCase @Inject constructor( @ApplicationContext private val context: Context, private val intentFactory: MeasurementIntentFactory, -) { +) : WearRecordingController { + override fun start( + sessionId: String, + request: WearRecordingRequest, + preferences: AppPreferences, + startAtEpochMillis: Long, + ): AppResult = start( + sessionId = sessionId, + sensorIds = request.sensorIds.toSet(), + includesGps = request.includesGps, + preferences = preferences, + folderName = request.folderName, + startAtEpochMillis = startAtEpochMillis, + durationMillis = request.durationMillis, + measurementType = request.measurementType, + ) + fun start( sensorIds: Set, includesGps: Boolean, preferences: AppPreferences, + sessionId: String = java.util.UUID.randomUUID().toString(), folderName: String = intentFactory.newFolderName(), startAtEpochMillis: Long = System.currentTimeMillis(), durationMillis: Long = 0L, measurementType: String = "ENDLESS", - ): Result = appResult(AppError.Kind.MEASUREMENT, "Request Wear measurement start") { + ): AppResult = appResult(AppErrorCode.MEASUREMENT, "Request Wear measurement start") { val request = MeasurementLaunchRequest( + sessionId = sessionId, folderName = folderName, useInternalStorage = true, sensorIds = sensorIds, @@ -43,12 +75,14 @@ class WearMeasurementControlUseCase @Inject constructor( ContextCompat.startForegroundService(context, intentFactory.create(request)) } - fun stop(): Result = appResult(AppError.Kind.MEASUREMENT, "Request Wear measurement stop") { + fun stop(): AppResult = appResult(AppErrorCode.MEASUREMENT, "Request Wear measurement stop") { val intent = Intent(context, MeasurementService::class.java) .setAction(MeasurementService.ACTION_STOP) context.startService(intent) } + override fun stop(sessionId: String, reason: WearStopReason): AppResult = stop() + private fun samplingPeriod(index: Int): Int = SENSOR_PERIODS.getOrElse(index) { SensorManager.SENSOR_DELAY_FASTEST } diff --git a/wear/src/main/java/com/motionapps/sensorbox/domain/sync/SyncWearMeasurementsUseCase.kt b/wear/src/main/java/com/motionapps/sensorbox/domain/sync/SyncWearMeasurementsUseCase.kt index a00c398..489bb1c 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/domain/sync/SyncWearMeasurementsUseCase.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/domain/sync/SyncWearMeasurementsUseCase.kt @@ -2,6 +2,8 @@ package com.motionapps.sensorbox.domain.sync import android.content.Context import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.error.appResult import com.motionapps.sensorbox.core.error.suspendAppResult import com.motionapps.sensorbox.core.error.suspendFlatMap @@ -19,25 +21,25 @@ class SyncWearMeasurementsUseCase @Inject constructor( private val connectionRepository: WearConnectionRepository, private val transferClient: WearFileTransferClient, ) { - suspend operator fun invoke(): Result = suspendAppResult(AppError.Kind.CONNECTIVITY, "Find phone") { + suspend operator fun invoke(): AppResult = suspendAppResult(AppErrorCode.CONNECTIVITY, "Find phone") { connectionRepository.findNode(PHONE_APP_CAPABILITY) }.suspendFlatMap { node -> if (node == null) { - return@suspendFlatMap Result.failure(AppError(AppError.Kind.CONNECTIVITY, "Find connected phone")) + return@suspendFlatMap AppResult.failure(AppError(AppErrorCode.CONNECTIVITY, "Find connected phone")) } - appResult(AppError.Kind.STORAGE, "List Wear measurements", ::measurementFiles).suspendFlatMap { files -> - var transferResult: Result = Result.success(Unit) + appResult(AppErrorCode.STORAGE, "List Wear measurements", ::measurementFiles).suspendFlatMap { files -> + var transferResult: AppResult = AppResult.success(Unit) for (file in files) { if (transferResult.isFailure) break transferResult = sendFile(node.id, file) } transferResult.map { files.size } } - }.withAppError(AppError.Kind.CONNECTIVITY, "Sync Wear measurements") + }.withAppError(AppErrorCode.CONNECTIVITY, "Sync Wear measurements") - private suspend fun sendFile(nodeId: String, file: File): Result { + private suspend fun sendFile(nodeId: String, file: File): AppResult { val measurementName = file.parentFile?.name - ?: return Result.failure(AppError(AppError.Kind.STORAGE, "Read Wear measurement folder")) + ?: return AppResult.failure(AppError(AppErrorCode.STORAGE, "Read Wear measurement folder")) return transferClient.send( nodeId = nodeId, metadata = WearFileMetadata(measurementName, file.name), diff --git a/wear/src/main/java/com/motionapps/sensorbox/presentation/dashboard/WearDashboardViewModel.kt b/wear/src/main/java/com/motionapps/sensorbox/presentation/dashboard/WearDashboardViewModel.kt index 88d93cb..a7198ec 100644 --- a/wear/src/main/java/com/motionapps/sensorbox/presentation/dashboard/WearDashboardViewModel.kt +++ b/wear/src/main/java/com/motionapps/sensorbox/presentation/dashboard/WearDashboardViewModel.kt @@ -3,6 +3,8 @@ package com.motionapps.sensorbox.presentation.dashboard import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.motionapps.sensorbox.core.error.AppError +import com.motionapps.sensorbox.core.error.AppErrorCode +import com.motionapps.sensorbox.core.error.AppResult import com.motionapps.sensorbox.core.preferences.AppPreferencesIntent import com.motionapps.sensorbox.core.preferences.AppPreferencesRepository import com.motionapps.sensorbox.domain.measurement.WearMeasurementControlUseCase @@ -112,7 +114,7 @@ class WearDashboardViewModel @Inject constructor( sensorJob = viewModelScope.launch { observeSensorValues(sensorType) .catch { error -> - AppError.from(AppError.Kind.MEASUREMENT, "Observe live sensor", error) + AppError.from(AppErrorCode.MEASUREMENT, "Observe live sensor", error) showSensorError() } .collect(::publishSensorValue) @@ -188,7 +190,7 @@ class WearDashboardViewModel @Inject constructor( private var sampleBuffer: List = emptyList() - private fun Result<*>.showFailure() { + private fun AppResult<*>.showFailure() { if (isFailure) showOperationFailure() } diff --git a/wear/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt b/wear/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt index 5774387..34a824a 100644 --- a/wear/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt +++ b/wear/src/test/java/com/motionapps/sensorbox/PolicyLinksTest.kt @@ -1,9 +1,9 @@ package com.motionapps.sensorbox -import java.io.File -import javax.xml.parsers.DocumentBuilderFactory import org.junit.Assert.assertEquals import org.junit.Test +import java.io.File +import javax.xml.parsers.DocumentBuilderFactory class PolicyLinksTest { @Test diff --git a/wear/src/test/java/com/motionapps/sensorbox/communication/WearCommandHandlerTest.kt b/wear/src/test/java/com/motionapps/sensorbox/communication/WearCommandHandlerTest.kt new file mode 100644 index 0000000..89ba6da --- /dev/null +++ b/wear/src/test/java/com/motionapps/sensorbox/communication/WearCommandHandlerTest.kt @@ -0,0 +1,133 @@ +package com.motionapps.sensorbox.communication + +import com.motionapps.sensorbox.core.error.AppResult +import com.motionapps.sensorbox.core.error.DiagnosticLogger +import com.motionapps.sensorbox.core.preferences.AppPreferences +import com.motionapps.sensorbox.domain.measurement.WearRecordingController +import com.motionapps.wearoslib.WearOsConstants.WEAR_MESSAGE_PATH +import com.motionapps.wearoslib.connectivity.SendWearMessageUseCase +import com.motionapps.wearoslib.connectivity.WearConnection +import com.motionapps.wearoslib.connectivity.WearConnectionRepository +import com.motionapps.wearoslib.connectivity.WearNode +import com.motionapps.wearoslib.protocol.SendWearCommandUseCase +import com.motionapps.wearoslib.protocol.WearCommand +import com.motionapps.wearoslib.protocol.WearCommandCodec +import com.motionapps.wearoslib.protocol.WearRecordingRequest +import com.motionapps.wearoslib.protocol.WearSensorInfo +import com.motionapps.wearoslib.protocol.WearStopReason +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test + +class WearCommandHandlerTest { + @Test + fun `Given duplicate session commands When handled Then side effects run once and acknowledgements repeat`() = + runTest { + val fixture = Fixture() + val prepare = WearCommand.PrepareRecording("session-123", request()) + val commit = WearCommand.CommitRecording("session-123", 1_800_000_000_000L) + val stop = WearCommand.StopRecording("session-123", WearStopReason.USER_REQUEST) + + fixture.handler.handle(prepare) + fixture.handler.handle(prepare) + fixture.handler.handle(commit) + fixture.handler.handle(commit) + fixture.handler.handle(stop) + fixture.handler.handle(stop) + + assertEquals(1, fixture.environment.prepareCalls) + assertEquals(1, fixture.controller.startCalls) + assertEquals(1, fixture.controller.stopCalls) + assertEquals(fixture.repository.commands[0], fixture.repository.commands[1]) + assertEquals(fixture.repository.commands[2], fixture.repository.commands[3]) + assertEquals(fixture.repository.commands[4], fixture.repository.commands[5]) + } + + @Test + fun `Given encoded command bytes When dispatched Then no Google callback type is required`() = runTest { + val fixture = Fixture() + val dispatcher = WearMessageDispatcher(fixture.handler, DiagnosticLogger { }) + val payload = WearCommandCodec.encode(WearCommand.PrepareRecording("session-123", request())).getOrThrow() + + val result = dispatcher.dispatch(WEAR_MESSAGE_PATH, payload) + + assertTrue(result.isSuccess) + assertEquals(1, fixture.environment.prepareCalls) + } + + @Test + fun `Given an old protocol payload When dispatched Then it is rejected before policy runs`() = runTest { + val fixture = Fixture() + val dispatcher = WearMessageDispatcher(fixture.handler, DiagnosticLogger { }) + + val result = dispatcher.dispatch(WEAR_MESSAGE_PATH, byteArrayOf(0x53, 0x42, 0x58, 0x31, 1, 1)) + + assertTrue(result.isFailure) + assertEquals(0, fixture.environment.prepareCalls) + } + + private fun request() = WearRecordingRequest( + folderName = "fixture", + sensorIds = listOf(1), + includesGps = false, + ) + + private class Fixture { + val repository = CapturingRepository() + val controller = FakeWearRecordingController() + val environment = FakeWearCommandEnvironment() + val handler = WearCommandHandler( + recordingController = controller, + environment = environment, + sendCommand = SendWearCommandUseCase(SendWearMessageUseCase(repository)), + acknowledgementInbox = WearAcknowledgementInbox(), + ) + } +} + +private class FakeWearRecordingController : WearRecordingController { + var startCalls = 0 + var stopCalls = 0 + + override fun start( + sessionId: String, + request: WearRecordingRequest, + preferences: AppPreferences, + startAtEpochMillis: Long, + ): AppResult { + startCalls += 1 + return AppResult.success(Unit) + } + + override fun stop(sessionId: String, reason: WearStopReason): AppResult { + stopCalls += 1 + return AppResult.success(Unit) + } +} + +private class FakeWearCommandEnvironment : WearCommandEnvironment { + var prepareCalls = 0 + + override suspend fun prepare(request: WearRecordingRequest): AppResult { + prepareCalls += 1 + return AppResult.success(AppPreferences()) + } + + override fun sensors(): List = emptyList() +} + +private class CapturingRepository : WearConnectionRepository { + val commands = mutableListOf() + + override fun observeCapability(capability: String): Flow = emptyFlow() + + override suspend fun findNode(capability: String): WearNode? = WearNode("phone", "Phone", isNearby = true) + + override suspend fun sendMessage(capability: String, path: String, payload: ByteArray): AppResult { + commands += WearCommandCodec.decode(payload).getOrThrow() + return AppResult.success(Unit) + } +}