carp_mobile_sensing 1.13.1
carp_mobile_sensing: ^1.13.1 copied to clipboard
Mobile Sensing Framework for Flutter. A software framework for collecting sensor data from the phone and attached wearable devices via probes. Can be extended.
1.12.6 #
- deprecating the
ONE_TIME_SENSING_TYPE- now there is only one type of sensing user task (#488)
1.12.4 #
1.11.5 #
1.11.4 #
1.10.0 #
- Upgrade to carp_core v. 1.8 & carp_serialization v. 2.0
- Type safe
fromJson()methods & nested json serialization - Upgrade of example app to use new Flutter Android Gradle build setup
1.8.1 #
- Added support for extension of triggers, #403. See the section on Adding new Trigger on the CAMS wiki.
- Refactor of the software architecture to align better with a domain-driven design architecture.
- Improvements to executor state machine (can only restart an executor/probe that is already started)
1.7.0 #
- Refactor task and notification enqueueing process:
- Move from sequential scheduling for each TaskControl to buffering tasks in AppTaskController.
- Buffered tasks are sorted by time and scheduled in batches based on platform limits (iOS and Android notification limits).
- Enhance consistency in task scheduling:
- Ensured all necessary tasks in the foreseeable future are queued.
- Prevent task and notification drops due to notification slot limitations.
- Resolve issue with duplicate tasks being scheduled:
- Ensure tasks are stored in the database after being scheduled the first time.
1.6.1 #
- Improvement to removing studies (linked to issue #283 in the CARP Studies App)
- adding a new "disposed" sensing state
- removing study deployment runtime
- better handling of restarting sampling on device reconnection
- Upgrade of carp_serialization and carp_core
- Getting rid of uuid package dependency
- Fix of #394
1.5.1 #
- Automatically stopping a background task if all of its underlying probes have stopped (fix of 384)
- Upgrade to carp_core v. 1.5.0 (getting rid of
IsoDuration)
1.5.0 #
1.4.7 #
- Improvements to handling connected BLE devices
- Improvement to triggers and probes using BLE devices
- Improvements to restarting sampling on device reconnect
- Upgrade of packages
1.4.4 #
- Upgrade of plugins (battery_plus, sensor_plus, cron)
- Support for specifying ("overriding") sampling frequency in sensor measures (accelerometer, gyroscope, magnetometer) by using a
IntervalSamplingConfiguration - Improvement to executor state machine
- Improvement to restarting sampling on device (re)connection, including now also online service like the location service
- Improvements to device manager
1.4.0+1 #
- Upgrade to Dart 3.2
- Update to README
1.3.5 #
- Upgrade of uuid and permission_handler plugins
- Addition of a ACCELERATION_FEATURES that samples accelerometer readings over a sampling period and calculates a set of statistical features (Issue 336 & 347)
- Removal of support for awesome_notifications which does not compile on iOS
- Improvements to API docs
- Removal of
toString()methods on data points - if you want to print data, print the json generated from thetoJson()method. - Rename of
TransformerSchemaRegistrytoDataTransformerSchemaRegistry
1.2.0 #
- Battery stream on device controller and device managers
- Support for creating, scheduling, and cancelling generic text-based notifications in the notification controller
- A device manager can now specify and handle its required permissions
1.1.3 #
- Added support for restoring a
SmartPhoneClientManageron app restart - A
privacySchemaNameis moved to be part of theSmartphoneStudyProtocolconfiguration. - Simplification of API so that a simple local study can be configured, initialized, and started in one statement (without the need for understanding the whole deployment architecture).
1.1.2 #
Note: This release has breaking changes.
-
The first stable release of CARP Mobile Sensing which follows the carp.core-kotlin v. 1.1.0 domain model, which again is implemented in the carp_core v. 1.1.0 Dart Domain model.
-
This entails a set of breaking changes to the domain model:
- CARP cores now comes with a range of pre-defined Measure Types (e.g.,
geolocation,stepcount, etc.). These CARP Core measures has replaced the previous CAMS versions of these. However, most of the "old" measures are kept, so there should be backward compatibility. - Important new measure types are the
TriggeredTask,CompletedTask, which now automatically collected data on when and how a trigger and task are done. - A
Heartbeatmeasurement has been added, which sends a measure every 5 minutes for each device (incl. the phone), if connected. This can be used to retrospectively check if sampling has been running (typically used in our so-called Coverage tests). - In the protocol, triggering is now controlled by the
Controlclass, which basically states if sampling should be started or stopped. So, instead of adding aTriggeredTaskto a protocol you now add aTaskControlinstead. - As part of this, the states of sampling has changed from "resumed" and "paused" to "started" and "stopped" (to reflect the
Controlstate of aTaskControl). - Configuration of sampling is done using the
SamplingConfigurationwhich can be part of aDataTypeSamplingSchemewhich again can be part of aDataTypeSamplingSchemeMap. A description of how this works is on the CARP Core description of Sampling Schemes and Configuration section. Note that sampling configurations can be associated both with aMeasure, with aDeviceConfigurationfor a device, and with aSamplingPackage.
- CARP cores now comes with a range of pre-defined Measure Types (e.g.,
-
The new
datasub-system has been implemented in CAMS. This entails:- Sampled data is now stored as
Dataobjects which again are stored as part of aMeasurement(this replaces the oldDataPointdata model). - Measurements are streamed using the
measurementsstream which is accessible from theSmartphoneDeploymentController. - Measurements can be stored or managed by a
DataManager. CAMS comes with two build-in data managers: theFileDataManagerand theSQLiteDataManager.
- Sampled data is now stored as
-
The
UserTaskis no longer responsible for showing the user interface of the task. Now, instead of showing the user interface, theonStartmethods now returns aWidgetto be shown. In this model, the app (and not CAMS) is responsible for deciding when and how to show the user interface. This entails that the the life cycle methods ofonStart,onCancel,onExpired, andonDoneno longer takes the FlutterBuildContextas a parameter. Read more on theAppTaskandUserTaskmodel on the CAMS wiki. -
Other smaller changes include:
- Use the
CarpMobileSensing.ensureInitialized()static method in yourmainmethod to ensure that CAMS is initialized before use. - Update of
AppDelegate.swiftin example app to handle notifications in the background. - Adding info, warning, and debug information to the system log (instead of the console) using colors for better reading.
- Use the
0.40.12 #
- Better support for removing a study deployment from a client manager
- Refactor of
DataManagerinterfaces; file, sqlite, etc. to support multiple deployments on the same client. - NotificationController now cancels notifications for a study which is removed.
- Removal of tasks from the AppTaskController.
- Refactor of
- Support for local caching of files while keeping sampled data
- fix of JsonKey annotations
0.40.10 #
- Adding
dispose,pause, andremovelife cycle methods to theDeploymentController - Support for deleting cached runtime information (deployment and task list)
- Fix of bug in
getTaskExecutormethod
0.40.7 #
- Fix of
BufferingUserAccelerometerProbeerror.
0.40.6 #
0.40.4+1 #
- Added convenience method
addStudyProtocoltoSmartPhoneClientManagerand updated examples accordingly.
0.40.3 #
- Added the
UserTaskTriggertrigger. - Added the
magnetometermeasure type. - Upgrade of
device_info_plusv. ^8.0.0 - Upgrade to
carp_corev. 0.40.3
0.40.0 BREAKING #
- One purpose of this release is to make CAMS more stable across app re-restart (since the OSs (Android / iOS) increasingly are killing apps). This has lead to the following changes:
MarkedMeasureis no longer a separate measure type. The state of all measure are now saved across app restart.- A
OneTimeTriggerno longer needs an id (this is now handled behind-the-scene). - All
AppTaskare now scheduled persistently using the notification system. When an app task is due, a notification is made on the phone, and when the user taps this notification, the app is (re)started. - As part of this, CAMS now asks for permissions to use notifications on the phone (if the
SmartphoneDeploymentControlleris configured to use notifications).
- Another purpose is to change the configuration of the measures in the study protocol to resemble the newly released version 1.0.0 of the CARP Core Framework (Note, however, that CAMS is not yet updated to version 1.0.0 of CARP Core - this will happen in the next release). This entails:
Measureno longer contains sampling configurations but only specifies thetypeof data to collect (e.g.,dk.cachet.carp.memory)- instead, sampling configuration is now done in the
SamplingConfigurationandSamplingSchemeclasses (which can be part of aStudyProtocol). - default sampling configuration are now part of a
SamplingSchemaprovided by theSamplingPackage. For example, periodic sampling in e.g. theMemoryProbeis configured using aPeriodicSamplingConfigurationin theDeviceSamplingPackage. - improved support for supporting 'connected devices' such as a wearable ECG monitor or an online weather service. This is configured using specialized
DeviceDescriptorclasses.
- Added support for storing data in a SQLite database using a
SQLiteDataEndPointdata endpoint. - Upgrade to Android
compileSdkVersion33. Make sure to update theandroid/app/build.gradlefile and set thecompileSdkVersionto 33. - Upgraded to Dart 2.17 and Flutter 3.0
- Refactoring to comply to official Dart recommended lint rules
- Additional refactoring include:
DeploymentDelayedTriggerhas been removed. UseElapsedTimeTrigger.RecurrentScheduledTriggerno longer supports therememberfeature. Persistent sampling for app tasks is now supported by the persistent sampling configuration across app re-start as described above.AutomaticTaskis replaced by theBackgroundTaskfrom carp_core.
0.33.0 #
- upgrade to
carp_corev. 0.33.0 - support of new device model, incl. configuration of devices with device descriptors
- BREAKING - the
SmartphoneDeploymentControllerno longer automatically deploys the study when callingaddStudy().- make sure to call the
tryDeployment()method when you want the deployment to happen.
- make sure to call the
- the factory method for getting default sampling schemes (common, debug, etc.) are now instance members (rather than functions) on the singleton
SamplingPackageRegistry. - upgrade to
permission_handler: ^9.2.0
0.32.3 #
- added
OneTimeTriggeras a new trigger type. timestampis now enforced (not null) on allDatumobjects.
0.32.1 #
- notifications are no longer (re-)send when the app task queue is restored across app restart.
0.32.0 #
- upgrade to
permission_handler: ^8.3.0 - NOTE
- see the permission_handler README on how to set up your app - for example:
- on Android, in
build.graddlesetcompileSdkVersion 31 - on iOS, add permission to your
Info.plistfile and update thePodfile
0.31.4 #
- support for a
ConditionalPeriodicTriggerwhich preiodically checks resume/pause conditions (originates from #230). PeriodicTriggernow required a samplingduration.- upgrade of
pubspeclibaries (flutter_local_notifications,cron, andjson). - re-generation of json serialization
- still cannot upgrade
permission_handlersince 8.2.0 gives a graddle compile error?????
0.31.0 #
- A CAMS-specific
StudyProtocolnamedSmartphoneStudyProtocolhas been reintroduced (c.f., v. 0.30.0). It turned out that there are several things which needs to be configured as part of a study protocol, which the genericStudyProtocolfrom carp_core doesn't support. The newSmartphoneStudyProtocolsupports specifying:- The
StudyDescriptiondescribing the study including the researcher responsible for the study. - The
DataEndPointspecifying where and how to upload data.
- The
- The
SmartphoneDeploymentServiceis updated to handle the newSmartphoneStudyProtocol. StudyDescriptionnow also supports specifying the URL of a study description and the privacy policy.
0.30.6 #
- separate method for asking permissions in
SmartphoneDeploymentController - bug fix of #215 - notifications can now be enabled/disabled in the
configuremethod of theSmartphoneDeploymentController.
0.30.5 #
- all deployment information is now stored in a folder named
<local_application_path>/carp/deployments/<study_deployment_id>wherelocal_application_pathis the folder where an application can place files that are private to the application.- On iOS, this is the
NSDocumentsDirectoryand this can be accessed like accessing files on iOS via the Finder. - On Android, Flutter files are stored in the
AppDatadirectory, which is located in thedata/data/<package_name>/app_flutterfolder. Files can be accessed via AndroidStudio.
- On iOS, this is the
0.30.4 #
- added support for the
DeploymentDelayedTrigger Settingsnow have support for storing deployment information across app restart- added local notifications to an
AppTask
0.30.3+2 #
- small updates to
Settings - fixed a bug in path to json files in
FileDataManager - improvement to saving task list across app re-start
CAMSMasterDeviceDeploymentrenamed toSmartphoneDeployment(to allign with the other naming usingSmartphone)StudyProtocolDescriptionandStudyProtocolReponsiblerenamed toStudyDescriptionandStudyReponsible- fix of bug in storing app tasks in
AppTaskController - updates to example apps
0.30.1 #
DebugLevelis now an enum- support for persistenly storing
AppTasks on theAppTaskControllerqueue across app re-start
0.30.0 #
- upgrade to null-safety,
carp_corev. 0.30.0 CAMSStudyProtocolis no longer used and is replaced byStudyProtocolincarp_core- fix of bug in
RandomRecurrentTriggerExecutor(Issue #202)
0.21.5 #
- rename of
ProtocolOwnertoStudyProtocolReponsible(in order not to confuse it withownerIdinStudyProtocol)
0.21.4 #
- small bug fixes
- upgrade to
carp_core 0.21.4
0.21.3 #
- NOTE -
DataEndPointis no longer specified as part of aStudyProtocol.- Specifying where and how to store or upload data is really not part of specifying a study protocol, but rather a deployment issues. Therefore, the
DataEndPointis now part of aMasterDeviceDeployment. - The
SmartphoneDeploymentServicewill use theFileDataEndpointper default if not specified in the deployment. Hence, data is saved as files on the phone. - The
StudyDeploymentController.configure()method now takes an optionalDataEndPointparameter to specify the data endpoint, if it should be different to what is specified in the deployment. - The
StudyDeploymentController.configure()method also takes aaskForPermissionsparameter - iffalse, then CAMS will not ask for permissions, but hands this over to the app, which can show appropiate information to the user.
- Specifying where and how to store or upload data is really not part of specifying a study protocol, but rather a deployment issues. Therefore, the
- settings are now a singleton accessed using
Settings()(similar to other singletons in the framework) - better support for handling json functions
0.21.2 #
- update to
carp_corev. 0.21.2
0.21.1 #
- update to
carp_corev. 0.21.0
0.21.0 #
- update to
carp_corev. 0.21.0 client domain model - support for using a
SmartPhoneClientManagerfor executing multiple studies - adjusted examples and example app to use the carp_core_client domain model
0.20.4 #
- removed localization support again - this has to be handled on an application level, not as part of sensing.
- removed the
ConsentSectionalso - again, this is separate to sensing.
0.20.3 #
- update to
carp_corev. 0.20.3 (json serialization)
0.20.0 #
- BREAKING: Now using the
carp_coredomain models in order to align with the overall domain-driven design of CARP. - This has an impact on the naming used in the API. The most important changes are:
Studyis now calledStudyProtocoland a CAMS-specific protocol calledCAMSStudyProtocolis availablePrincipalInvestigatoris now calledProtocolOwnerTaskis now calledTaskDescriptorDeviceis now calledDeviceDescriptorManualTriggeris now calledPassiveTriggerScheduledTriggeris now calledDateTimeTriggerMeasureis now calledCAMSMeasure(butMeasureis part ofcarp_core)
- A
StudyProtocolnow uses the concept of aTriggeredTaskwhich is slightly different to the previousStudymodel. See the example. - A
CAMSStudyProtocolnow supports localization. AStudyProtocolDescriptionand a list ofConsentSectioncan be added to a protocol for each locale (i.e., language code). - Similarly, measures now also supports localization. For each
CAMSMeasurethere is the option to specify itsMeasureDescriptionfor each locale. - All json serialization of a protocol now use
camelCaseinstead ofsnake_caseto be consistent withcarp_corein Kotlin.- Note, however, that
DataPointobjects are still serialized assnake_casejson.
- Note, however, that
- All the
eventsstreams are now calleddataand streamsDataPointdata objects (instead of just theDatumdata objects). - The
DataPointcomply to version 1.2 definition (Issue #162)
0.12.3 #
- extension of
Studyto includepurpose,titleandPrincipalInvestigator
0.12.2 #
- support for canceling
UserTask
0.12.1 #
- small refactor for
Devicemodel.
0.12.0 #
- feature: support for handling devices as part of a study configuration.
- refactor: rename of
DevicetoDeviceInfo
0.11.1 #
- feature: support for storing and retrieving study json protocols on the local file system.
- refactor: the
deploymentIdhas been removed fromStudysince this is CARP specific info.
0.11.0 #
- refactor: improved (de)serialization in the
Serializationclass. - refactor: named constructors in the
StudyandMeasureclasses. - feature: support for handling local settings on the phone in the
Settings. - feature: added
descriptionproperty toMeasure. - feature: added support for an
AppTaskcan expire, i.e. be removed from the queue. - fix: issue #139
- fix: issue #140
0.10.1 #
- fix: issue #123
- based on issue #134
the following measures has changed
periodic_accelerometerandperiodic_gyroscopehas been added- the "old"
accelerometerandgyroscopemeasures are made to run continously - This implies that they need to be started and stopped using a
Triggerinstead. - This, however, open up for triggering the collection of accelerometer data as part of an
AppTask. For example, sampling accelerometer data while a Parkinson's patient fill in a survey.
0.10.0 #
- BREAKING: a new
AppTaskmodel is implemented- see documentation on the CAMS wiki.
- see the Pulmonary app for an example on how to use this new model.
- fix: issue #98
- fix: issue #114
0.9.5 #
- feature: added the
validNextState()method to theProbeclass, which checks if a probe can be move to a next state. - fix : issue #112
- this means that the
initialize()method is no longer aFuture(and hence cannot be awaited)
- this means that the
0.9.4+1 #
- fix: issue #106.
- fix: fix of race condition in
FileDataManager - fix: small error in monthly recurrence in
RecurrentScheduledTrigger - refactor:
Device()is now a singleton.
0.9.3 #
- refactor: all singleton adhering to the Dart Singleton Pattern.
SamplingPackageRegistryProbeRegistryTransformerSchemaRegistryDataManagerRegistry
- fix: fixed issue #100
- feature: support for the
CronScheduledTriggerthat takes a cron expression for scheduling
0.9.2 #
- fix: error in screen probe
- refactor: small pedantic formatting issues
- refactor:
TransformerSchemaRegistryandSamplingPackageRegistryare now accessed using an instance singleton
0.9.0 #
- refactor: new polymorphic JSON serialization using
$typefor class type identifier. - docs: update of documentation and examples (#92)
0.8.8 #
- feature: support for saving ("remembering")
RecurrentScheduledTriggeracross app shutdown (#80)
0.8.6 #
- update: updated to the new pedometer API
0.8.5 #
- refactor: removed the Apps package and moved this to an external package
0.8.2 #
- refactor: converted from a plugin to a package by overhauling the project
0.8.1 #
- feature: support for Deployment ID in
Study. - update: upgrade to
screen_statev. 1.x - update: upgrade to Android Embedding v2.
0.8.0 #
- using the Dart
Durationclass in many places where duration previously was specified using miliseconds. - added the
MarkedMeasureclass for creating measures that collect all measures since last time data was collected. Useful for collecting things like log entries and health data. - added the
settingsglobal variable providing access to:SharedPreferencesPackageInfo, and- a method for getting a unique, persistent user id
0.7.2 #
- added support for better logging using the
DebugLevelsettings
0.7.1 #
- Added
trigger_idto theTriggerclass. - Made
Taskabstract rather than deprecated. - Fixed issue #61.
0.7.0 #
- BREAKING: this release break some parts of the previous API.
- Extended Task model -- introduction of a
AutomaticTaskandAppTask. - Added support for "manually" adding data points (
Datum) and errors to the data stream (events). This is part of theStudyExecutorAPI. - The
start()method on all executors (probes, and study, trigger & task executors) has been removed. Now an executor is 'started' by resuming it (callingresume()). - Fixed a bug in
BufferingPeriodicStreamProbe. - Added the
FileDatumdata type which can hold a reference to a file. For example, an audio file (see thecarp_audio_package).
0.6.5 #
- upgrade to
persmission_handlerv. 5.x
0.6.3 #
- moved the
connectivitysampling package to an externalcarp_connectivity_packagedue to issue#46.
0.6.2 #
- intensive test of data upload to CARP and Firebase on both Android and iOS
- support for retry in upload of data to CARP
- handling that a study id can only be an integer in the CARP web services
0.6.1 #
- Thorough testing on iOS.
- Better handling of probes not available on iOS via the
initializemethod. - Centralized concept for handling permissions.
0.6.0 #
- Extension of
Studydomain model to include support forTrigger, which manages the temporal triggering of data sampling. See the documentation on how to defined a study with triggers. - Adjustment of runtime environment to reflect the new study model
- Addition of a
TriggerExecutor - Update to
Executors, i.e.StudyExecutor,TaskExecutorandProbe
- Addition of a
- The data manager model has been updated
- A
DataManagernow expose a stream of stateeventsas defined inDataManagerEventTypes - A
DataManagernow has atypewhich is a string as defined inDataEndPointTypes - These changes are also implemented for the file and CARP data managers.
- A
- Minor refactoring
- Apps and AppUsage are no longer periodic measure, but one-off measures. Hence, use the new trigger model to sample installed apps and their usage e.g. on a daily basis.
- The
BluetoothDatumnow lists all devices found in a scan. - The pedometer now works as a simple step stream which sense and report each step taken.
datastorelibrary have been renamed todata_managers.
0.5.1 #
- Update of readme file.
0.5.0 #
- BREAKING This version has been migrated from the deprecated Android Support Library to AndroidX.
This should not result in any functional changes, but it requires any Android app using this plugin to also
migrate if they're using the original support library.
- See Flutter AndroidX compatibility
- Fixed error in
PedometerProbe
0.4.0 #
- support for data transformers
- OMH Geolocation
- OMH PhysicalActivity
- support for privacy schema
- added support for hashing bluetooth names in the bluetooth package
- upgrade to json_serializable v.2
0.3.10 #
- minor change to the
StreamProbeAPI - now non-static streams can be used by implementing theget streammethod. - update of the relevant sampling packages using
StreamProbe
0.3.8+9 #
- update and rename of
CARPDataPointtoDataPointto reflect new CARP API. - moved CARP web service specific data model to
CARPDataPointto thecarp_webservicespackage.
0.3.5+7 #
- rename of
packagesfolder tosampling_packages(seems like Dart Pub don't like folders calledpackages) - rename of
corefolder todomain
0.3.3 #
- update to new versions of CACHET Flutter Plugins
- rename of
probesfolder topackages - upgrade and test on Flutter v. 1.3.4 Dart v. 2.2.1
0.3.2 #
- support for dividing probes into separate sampling packages
- included in
carp_mobile_sensingaredevice(device, screen, memory, battery)sensors(sensors, light, pedometer)connectivity(connectivity, bluetooth)apps(installed apps, app usage)
- implementation of the following external probe packages:
communication(sms & call log)context(location, activity, weather)audio(noise, audio recording)movisens(Movisens Move/ECG devices)
0.3.1 #
- small updates to the data format incl. documentation on the wiki.
- fixed error in the
stopmethod.
0.3.0 Domain Model update #
- major updates to the domain model as a
corelibraryMeasurenow have aconfiguration
- simplification to probe implementations
- all probes now uses the Dart
StreamAPI and supports a reactive programming model - all probes adjusted to a stream model
- implementation of
SamplingSchemaarchitecture - support for power-aware sampling using different sampling schemas
0.2.6 #
- fixed small bug in
weaterprobe.
0.2.5 #
- small bug fixes in connectivity datum model (to work w. `carp_firebase_backend).
weatherprobe added.
0.2.4 #
- error in
lightprobe fixed. noiseprobe added.- using the
carp_coredomain model
0.2.3 #
- fixed error in
readmefile.
0.2.2 #
phone_logprobe addedaudioprobe addedactivityprobe added- improvement to
readmefile onmanifest.xmlandInfo.plist.
0.2.1 #
- re-organization of github location and outline
- improvements to
FileDataManagerto avoid race conditions - improved API documentation
0.2.0 #
- refactor of organization of classes into libraries
- complete API documentation
0.1.1 #
- small improvements incl. documentation
0.1.0 #
- removal of all remote backend code to separate packages
0.0.1 #
- Initial version by Jakob E. Bardram
- Transferring the old implementation to this carp.sensing-flutter framework
- General refactor and clean-up