Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 51 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
# OpenWearable - App
# OpenWearables - App

The OpenWearable App is a mobile application for connecting to, configuring, and interacting with wearable devices. It is designed as a flexible companion app for research, development, and prototyping with sensor-rich wearable platforms.
The OpenWearables App is a mobile application for connecting to, configuring, and interacting with wearable devices. It is designed as a flexible companion app for research, development, and prototyping with sensor-rich wearable platforms.

The app supports live sensor control, data visualizations and example applications that demonstrate how wearable devices can be used in practice. [OpenEarable](https://openearable.com) is one example of a compatible OpenWearable device. It is a fully open-source platform for ear-based sensing applications with true wireless audio, high-precision sensors, and a modular, reconfigurable hardware design.
The app supports live sensor control, data visualizations and example applications that demonstrate how wearable devices can be used in practice. [OpenEarable](https://openearable.com) is one example of a compatible OpenWearables device. It is a fully open-source platform for ear-based sensing applications with true wireless audio, high-precision sensors, and a modular, reconfigurable hardware design.

For more information about the OpenWearable ecosystem, visit [openwearables.com](https://openwearables.com).
For more information about the OpenWearables ecosystem, visit [openwearables.com](https://openwearables.com).

## Project Structure

This repository is primarily the Flutter app in [`open_wearable/`](./open_wearable/).

High-level architecture and state-management docs live in [`open_wearable/docs/`](./open_wearable/docs/README.md).

- [App Setup and Architecture](./open_wearable/docs/app-setup.md)
- [State and Providers](./open_wearable/docs/state-and-providers.md)

## Features

- Connect to compatible OpenWearable devices, such as OpenEarable
- Connect to compatible devices from OpenWearables, such as OpenEarable
- Configure available device sensors
- Control audio features
- Show live data from wearable sensors
Expand All @@ -18,11 +27,37 @@ For more information about the OpenWearable ecosystem, visit [openwearables.com]

## Getting Started

To get started with the OpenWearable App, you need:
To get started with the OpenWearables App, you need:

- A compatible OpenWearable device, such as an OpenEarable device with the latest firmware
- A compatible OpenWearables device, such as an OpenEarable device with the latest firmware
- A working Flutter installation

## Development Quick Start

1. Install Flutter on the stable channel.
2. From the app module, fetch dependencies:

```bash
cd open_wearable
flutter pub get
```

3. Run on a connected device or emulator:

```bash
cd open_wearable
flutter run
```

To enter demo mode with simulated sensor values, start the app with the App Store preview flag:

```bash
cd open_wearable
flutter run --dart-define=APP_STORE_PREVIEW=true
```

This launches the preview shell used for screenshots and demo flows instead of the normal Bluetooth-connected app.

## Contributing

Contributor expectations and workflow rules are documented in [CONTRIBUTING.md](./CONTRIBUTING.md).
Expand All @@ -32,7 +67,7 @@ Contributor expectations and workflow rules are documented in [CONTRIBUTING.md](
1. Clone this repository:

```bash
git clone https://github.com/OpenWearable/app.git
git clone https://github.com/OpenEarable/app.git
```

2. Navigate to the project folder in your terminal.
Expand All @@ -42,6 +77,7 @@ Contributor expectations and workflow rules are documented in [CONTRIBUTING.md](
4. Start the app on your phone:

```bash
cd open_wearable
flutter run
```

Expand All @@ -56,7 +92,14 @@ Contributor expectations and workflow rules are documented in [CONTRIBUTING.md](
3. Run the app in release mode:

```bash
cd open_wearable
flutter run --release
```

Select your phone as the target device from the list of connected devices.

## Notes

- Core app bootstrap is in [`open_wearable/lib/main.dart`](./open_wearable/lib/main.dart).
- Route definitions are in [`open_wearable/lib/router.dart`](./open_wearable/lib/router.dart).
- High-level feature state is primarily under [`open_wearable/lib/view_models/`](./open_wearable/lib/view_models/).
29 changes: 3 additions & 26 deletions open_wearable/README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,5 @@
# OpenWearable App Module
# OpenWearables App Module

Flutter application module for the OpenEarable app.
This folder contains the main Flutter app for the repository.

## Documentation

High-level architecture and state-management docs live in [`docs/`](./docs/README.md).

- [App Setup and Architecture](./docs/app-setup.md)
- [State and Providers](./docs/state-and-providers.md)

## Development Quick Start

1. Install Flutter (stable channel).
2. From this folder (`open_wearable/`), fetch dependencies:
```bash
flutter pub get
```
3. Run on a connected device/emulator:
```bash
flutter run
```

## Notes

- Core app bootstrap is in `lib/main.dart`.
- Route definitions are in `lib/router.dart`.
- High-level feature state is primarily under `lib/view_models/`.
For the primary project overview, setup instructions, and documentation links, see the [root README](../README.md).
2 changes: 1 addition & 1 deletion open_wearable/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:label="OpenWearable" android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:enableOnBackInvokedCallback="true">
<application android:label="OpenWearables" android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:enableOnBackInvokedCallback="true">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:taskAffinity="" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:screenOrientation="portrait">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
companion object {
private const val SYSTEM_SETTINGS_CHANNEL = "edu.kit.teco.open_wearable/system_settings"
private const val SYSTEM_SETTINGS_CHANNEL = "edu.kit.teco.openWearable/system_settings"
}

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
Expand Down
2 changes: 1 addition & 1 deletion open_wearable/docs/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# OpenWearable App Documentation
# OpenWearables App Documentation

This folder contains high-level documentation for the Flutter app in `open_wearable/`.

Expand Down
2 changes: 1 addition & 1 deletion open_wearable/docs/app-setup.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# App Setup and Architecture

This document describes the high-level setup of the OpenWearable Flutter app (`open_wearable/`), including startup, routing, shell layout, and lifecycle behavior.
This document describes the high-level setup of the OpenWearables Flutter app (`open_wearable/`), including startup, routing, shell layout, and lifecycle behavior.

## 1. Runtime Entry Point

Expand Down
2 changes: 1 addition & 1 deletion open_wearable/docs/connectors/websocket-ipc-api.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# WebSocket IPC API

This document describes how to communicate with the OpenWearable WebSocket connector.
This document describes how to communicate with the OpenWearables WebSocket connector.

Python clients can use the [`open-wearables`](https://pypi.org/project/open-wearables/)
package instead of implementing the JSON WebSocket protocol directly.
Expand Down
3 changes: 3 additions & 0 deletions open_wearable/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
Expand Down Expand Up @@ -695,6 +696,7 @@
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
Expand All @@ -718,6 +720,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
Expand Down
4 changes: 2 additions & 2 deletions open_wearable/ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ import UIKit
) -> Bool {
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
let openFolderChannel = FlutterMethodChannel(name: "edu.teco.open_folder", binaryMessenger: controller.binaryMessenger)
let systemSettingsChannel = FlutterMethodChannel(name: "edu.kit.teco.open_wearable/system_settings", binaryMessenger: controller.binaryMessenger)
lifecycleChannel = FlutterMethodChannel(name: "edu.kit.teco.open_wearable/lifecycle", binaryMessenger: controller.binaryMessenger)
let systemSettingsChannel = FlutterMethodChannel(name: "edu.kit.teco.openWearable/system_settings", binaryMessenger: controller.binaryMessenger)
lifecycleChannel = FlutterMethodChannel(name: "edu.kit.teco.openWearable/lifecycle", binaryMessenger: controller.binaryMessenger)

openFolderChannel.setMethodCallHandler { (call: FlutterMethodCall, result: @escaping FlutterResult) in
if call.method == "openFolder", let args = call.arguments as? [String: Any], let path = args["path"] as? String {
Expand Down
6 changes: 5 additions & 1 deletion open_wearable/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Open Wearable</string>
<string>OpenWearables</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
Expand Down Expand Up @@ -45,6 +45,10 @@
<string>This app requires access to device motion in order to provide sensor data.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app records microphone audio with local sensor recording sessions.</string>
<key>NSCameraUsageDescription</key>
<string>Camera access may be required by an iOS file selection component used to import firmware files. The app does not use the camera as part of its normal workflow.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location access may be required by an iOS file selection component used to import firmware files. The app does not use location as part of its normal workflow.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Needed for optional file selection functionality.</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
Expand Down
3 changes: 1 addition & 2 deletions open_wearable/ios/ci_scripts/ci_post_clone.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ echo "🟩 Install Flutter Dependencies"
cd repository/open_wearable
time flutter clean
time flutter pub get
time flutter pub upgrade

echo "🟩 Install CocoaPods via Homebrew"
time HOMEBREW_NO_AUTO_UPDATE=1 brew install cocoapods
Expand All @@ -39,4 +38,4 @@ cd ../
echo "🟩 build iOS"
time flutter build ios --release --no-codesign

exit 0
exit 0
Loading
Loading