build: Android's built-in Kotlin, the three plugins applying KGP themselves patched in third_party/

AGP 9 compiles Kotlin itself (android.builtInKotlin=true in every app),
and warns that applying the Kotlin Gradle Plugin will soon fail.
flutter_web_auth_2 5.1.0, keyboard_height_plugin 0.3.0 and flutter_tts
4.2.5 still apply it unconditionally, so their pub releases are copied
into third_party/ with only their android/build.gradle changed, and
the root overrides them by path (third_party/README.md says when to
drop each). The servers' images copy third_party/, as pub refuses an
override whose path is missing. third_party/ isn't our own code: left
out of the analysis and the format check.

All four apps' APKs build without the warning. A Kotlin daemon's
session file that slipped into Train's android/ goes, and every app's
android/.gitignore keeps .kotlin/ out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-04 00:15:55 +01:00
commit 438ce20dbf
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
95 changed files with 8440 additions and 23 deletions

View file

@ -15,6 +15,7 @@ Halkyon's apps and the packages they share, in one repository and one pub worksp
- `halkyon_keys` (pure Dart on libsodium, ADR 0017): an account's keys on the device, the password's Argon2id and SRP's x, the key pairs and their wrapping, the recovery phrase, data keys, content sealed and signed, row IDs keyed by the account (`keyedRowId`). SRP-6a's two halves are the module's (`halkyon_base_server`'s `base.dart`, `halkyon_base_client`'s `srp.dart`), as are TOTP and the recovery codes. `sodium`'s build hook compiles libsodium, so every machine that builds or tests needs a C compiler and `make`. - `halkyon_keys` (pure Dart on libsodium, ADR 0017): an account's keys on the device, the password's Argon2id and SRP's x, the key pairs and their wrapping, the recovery phrase, data keys, content sealed and signed, row IDs keyed by the account (`keyedRowId`). SRP-6a's two halves are the module's (`halkyon_base_server`'s `base.dart`, `halkyon_base_client`'s `srp.dart`), as are TOTP and the recovery codes. `sodium`'s build hook compiles libsodium, so every machine that builds or tests needs a C compiler and `make`.
- `halkyon_llm` (pure Dart, Halkyon Learn's ADR 0021, D15 and D46): language models' APIs streamed over plain HTTP, no SDKs: Anthropic's Messages API, OpenAI's chat completions (each known host's fields, D45) and its Responses API, behind one interface (`LlmClient`), with `FakeLlmClient` for tests; tested on replies written from the providers' documentation and on those `tool/record_llm.dart` records with a key (D36). The module forwards the operator's assistants with it, and the apps call a person's own provider. BSD-3-Clause as `halkyon_oidc`, `publish_to: none`. - `halkyon_llm` (pure Dart, Halkyon Learn's ADR 0021, D15 and D46): language models' APIs streamed over plain HTTP, no SDKs: Anthropic's Messages API, OpenAI's chat completions (each known host's fields, D45) and its Responses API, behind one interface (`LlmClient`), with `FakeLlmClient` for tests; tested on replies written from the providers' documentation and on those `tool/record_llm.dart` records with a key (D36). The module forwards the operator's assistants with it, and the apps call a person's own provider. BSD-3-Clause as `halkyon_oidc`, `publish_to: none`.
- `halkyon_oidc_server`, `halkyon_oidc_client` (ADR 0023): signing in with OpenID Connect, with a SimpleLogin preset, as a Serverpod module that halkyon_base builds on; `halkyon_oidc_flutter`, the device's half: the provider's page opened, the way back caught (the app's scheme, or the loopback on Linux and Windows, `LoopbackWebAuth`) and its state checked. Nothing of Halkyon's is in it, so that others can use it with Serverpod: under BSD-3-Clause, Serverpod's own licence, where the other packages are AGPL; `publish_to: none` until it is published to pub.dev, which is asked again first. - `halkyon_oidc_server`, `halkyon_oidc_client` (ADR 0023): signing in with OpenID Connect, with a SimpleLogin preset, as a Serverpod module that halkyon_base builds on; `halkyon_oidc_flutter`, the device's half: the provider's page opened, the way back caught (the app's scheme, or the loopback on Linux and Windows, `LoopbackWebAuth`) and its state checked. Nothing of Halkyon's is in it, so that others can use it with Serverpod: under BSD-3-Clause, Serverpod's own licence, where the other packages are AGPL; `publish_to: none` until it is published to pub.dev, which is asked again first.
- **`third_party/`**: others' packages patched for us, each a pub release copied whole with only what its README names changed, overridden by path in the root `pubspec.yaml` (today the three Android plugins still applying the Kotlin Gradle Plugin themselves, which AGP 9's built-in Kotlin refuses soon); not our code, so left out of the analysis and the format check; the servers' images copy it, as pub refuses an override whose path is missing. Drop an override once its package's release has the change.
- **`deploy/`**: the instance deploy at the root, learn.halkyon.eu's today (Learn's `AGENTS.md`, *CI and deploys*), where other services' compose files join Learn's (Train's `compose.train.yaml`, Todo's `compose.todo.yaml`, each switched on in `.env`). **`snap/`**: Learn's snap, built from the root, which its build needs whole; Todo's and Train's are `apps/todo/snap/` and `apps/train/snap/`, which the release tool builds each in a clone of the repository with it in place of `snap/` (Todo's `AGENTS.md`, *Releases*). **`docs/adr/`**: the decision records of every app and package, one numbering. **`tool/`**: the repository's tools (below). - **`deploy/`**: the instance deploy at the root, learn.halkyon.eu's today (Learn's `AGENTS.md`, *CI and deploys*), where other services' compose files join Learn's (Train's `compose.train.yaml`, Todo's `compose.todo.yaml`, each switched on in `.env`). **`snap/`**: Learn's snap, built from the root, which its build needs whole; Todo's and Train's are `apps/todo/snap/` and `apps/train/snap/`, which the release tool builds each in a clone of the repository with it in place of `snap/` (Todo's `AGENTS.md`, *Releases*). **`docs/adr/`**: the decision records of every app and package, one numbering. **`tool/`**: the repository's tools (below).
- **One workspace, one lock**: the root `pubspec.yaml` lists every package, `pubspec.lock` holds one version of each dependency for all of them, and its `dependency_overrides` hold for every app (the offline sync fork, Learn's `AGENTS.md`; `cli_util`, below). **Serverpod's version moves as one**: every package pins Serverpod's packages to the same version (4.0.4), the module's, Meditate's, Todo's and Train's too, together with the CLI version CI generates code with (`SERVERPOD_VERSION` in `.forgejo/workflows/ci.yaml`) and the sync packages Learn's server depends on. - **One workspace, one lock**: the root `pubspec.yaml` lists every package, `pubspec.lock` holds one version of each dependency for all of them, and its `dependency_overrides` hold for every app (the offline sync fork, Learn's `AGENTS.md`; `cli_util`, below). **Serverpod's version moves as one**: every package pins Serverpod's packages to the same version (4.0.4), the module's, Meditate's, Todo's and Train's too, together with the CLI version CI generates code with (`SERVERPOD_VERSION` in `.forgejo/workflows/ci.yaml`) and the sync packages Learn's server depends on.

View file

@ -9,3 +9,9 @@ include: package:leancode_lint/analysis_options.yaml
plugins: plugins:
leancode_lint: ^27.0.0 leancode_lint: ^27.0.0
analyzer:
# Others' plugins, patched for their Gradle files alone (third_party/README.md),
# are analysed and formatted as their authors keep them.
exclude:
- third_party/**

View file

@ -14,3 +14,6 @@ GeneratedPluginRegistrant.java
key.properties key.properties
**/*.keystore **/*.keystore
**/*.jks **/*.jks
# The Kotlin compiler daemon's sessions.
.kotlin/

View file

@ -2,5 +2,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m
android.useAndroidX=true android.useAndroidX=true
# This newDsl flag was added by the Flutter template # This newDsl flag was added by the Flutter template
android.newDsl=false android.newDsl=false
# This builtInKotlin flag was added by the Flutter template # Kotlin built into the Android Gradle plugin (4 Nov 2026), every plugin
android.builtInKotlin=false # migrated (third_party/README.md).
android.builtInKotlin=true

View file

@ -13,6 +13,9 @@ FROM dart:3.13.4 AS build
WORKDIR /app WORKDIR /app
COPY pubspec.yaml pubspec.lock ./ COPY pubspec.yaml pubspec.lock ./
COPY tool/workspace_only.sh tool/ COPY tool/workspace_only.sh tool/
# The root's dependency_overrides name these by path; pub refuses a path
# that isn't there, though no server uses them.
COPY third_party third_party
COPY apps/learn/halkyon_learn_server apps/learn/halkyon_learn_server COPY apps/learn/halkyon_learn_server apps/learn/halkyon_learn_server
COPY packages/halkyon_base_server packages/halkyon_base_server COPY packages/halkyon_base_server packages/halkyon_base_server
COPY packages/halkyon_base_client packages/halkyon_base_client COPY packages/halkyon_base_client packages/halkyon_base_client

View file

@ -12,3 +12,6 @@ GeneratedPluginRegistrant.java
key.properties key.properties
**/*.keystore **/*.keystore
**/*.jks **/*.jks
# The Kotlin compiler daemon's sessions.
.kotlin/

View file

@ -2,5 +2,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m
android.useAndroidX=true android.useAndroidX=true
# This newDsl flag was added by the Flutter template # This newDsl flag was added by the Flutter template
android.newDsl=false android.newDsl=false
# This builtInKotlin flag was added by the Flutter template # Kotlin built into the Android Gradle plugin (4 Nov 2026), every plugin
android.builtInKotlin=false # migrated (third_party/README.md).
android.builtInKotlin=true

View file

@ -12,3 +12,6 @@ GeneratedPluginRegistrant.java
key.properties key.properties
**/*.keystore **/*.keystore
**/*.jks **/*.jks
# The Kotlin compiler daemon's sessions.
.kotlin/

View file

@ -2,5 +2,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m
android.useAndroidX=true android.useAndroidX=true
# This newDsl flag was added by the Flutter template # This newDsl flag was added by the Flutter template
android.newDsl=false android.newDsl=false
# This builtInKotlin flag was added by the Flutter template # Kotlin built into the Android Gradle plugin (4 Nov 2026), every plugin
android.builtInKotlin=false # migrated (third_party/README.md).
android.builtInKotlin=true

View file

@ -12,6 +12,9 @@ FROM dart:3.13.4 AS build
WORKDIR /app WORKDIR /app
COPY pubspec.yaml pubspec.lock ./ COPY pubspec.yaml pubspec.lock ./
COPY tool/workspace_only.sh tool/ COPY tool/workspace_only.sh tool/
# The root's dependency_overrides name these by path; pub refuses a path
# that isn't there, though no server uses them.
COPY third_party third_party
COPY apps/todo/halkyon_todo_server apps/todo/halkyon_todo_server COPY apps/todo/halkyon_todo_server apps/todo/halkyon_todo_server
COPY packages/halkyon_base_server packages/halkyon_base_server COPY packages/halkyon_base_server packages/halkyon_base_server
COPY packages/halkyon_base_client packages/halkyon_base_client COPY packages/halkyon_base_client packages/halkyon_base_client

View file

@ -12,3 +12,6 @@ GeneratedPluginRegistrant.java
key.properties key.properties
**/*.keystore **/*.keystore
**/*.jks **/*.jks
# The Kotlin compiler daemon's sessions.
.kotlin/

View file

@ -2,5 +2,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m
android.useAndroidX=true android.useAndroidX=true
# This newDsl flag was added by the Flutter template # This newDsl flag was added by the Flutter template
android.newDsl=false android.newDsl=false
# This builtInKotlin flag was added by the Flutter template # Kotlin built into the Android Gradle plugin (4 Nov 2026), every plugin
android.builtInKotlin=false # migrated (third_party/README.md).
android.builtInKotlin=true

View file

@ -12,6 +12,9 @@ FROM dart:3.13.4 AS build
WORKDIR /app WORKDIR /app
COPY pubspec.yaml pubspec.lock ./ COPY pubspec.yaml pubspec.lock ./
COPY tool/workspace_only.sh tool/ COPY tool/workspace_only.sh tool/
# The root's dependency_overrides name these by path; pub refuses a path
# that isn't there, though no server uses them.
COPY third_party third_party
COPY apps/train/halkyon_train_server apps/train/halkyon_train_server COPY apps/train/halkyon_train_server apps/train/halkyon_train_server
COPY packages/halkyon_base_server packages/halkyon_base_server COPY packages/halkyon_base_server packages/halkyon_base_server
COPY packages/halkyon_base_client packages/halkyon_base_client COPY packages/halkyon_base_client packages/halkyon_base_client

View file

@ -807,20 +807,18 @@ packages:
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_tts: flutter_tts:
dependency: transitive dependency: "direct overridden"
description: description:
name: flutter_tts path: "third_party/flutter_tts"
sha256: ce5eb209b40e95f2f4a1397116c87ab2fcdff32257d04ed7a764e75894c03775 relative: true
url: "https://pub.dev" source: path
source: hosted
version: "4.2.5" version: "4.2.5"
flutter_web_auth_2: flutter_web_auth_2:
dependency: transitive dependency: "direct overridden"
description: description:
name: flutter_web_auth_2 path: "third_party/flutter_web_auth_2"
sha256: a7655829251ee63aae64a748f8512f36670d8eba4657b0055cdf5ef304a9d164 relative: true
url: "https://pub.dev" source: path
source: hosted
version: "5.1.0" version: "5.1.0"
flutter_web_auth_2_platform_interface: flutter_web_auth_2_platform_interface:
dependency: transitive dependency: transitive
@ -1142,12 +1140,11 @@ packages:
source: hosted source: hosted
version: "4.12.0" version: "4.12.0"
keyboard_height_plugin: keyboard_height_plugin:
dependency: transitive dependency: "direct overridden"
description: description:
name: keyboard_height_plugin path: "third_party/keyboard_height_plugin"
sha256: d57944cd3e4f8d9cb4adb1b7f1300d14a8dcec99bfb4414d78c7dd0120c1d66c relative: true
url: "https://pub.dev" source: path
source: hosted
version: "0.3.0" version: "0.3.0"
latlong2: latlong2:
dependency: transitive dependency: transitive

View file

@ -57,6 +57,20 @@ dependency_overrides:
# (`Logger.standard`, `Logger.verbose`, `Ansi`, `Progress`), the same in 0.5.2. # (`Logger.standard`, `Logger.verbose`, `Ansi`, `Progress`), the same in 0.5.2.
# Drop this once flutter_launcher_icons allows 0.5. # Drop this once flutter_launcher_icons allows 0.5.
cli_util: ^0.5.2 cli_util: ^0.5.2
# Three Android plugins patched for Kotlin built into the Android Gradle
# plugin (android.builtInKotlin=true, which every app sets since 4 Nov
# 2026): their latest releases still apply the Kotlin Gradle plugin
# themselves, which Flutter warns will fail builds. Only android/build.gradle
# differs from the release (third_party/README.md); drop each override once
# its plugin's own release has migrated. flutter_web_auth_2 is
# halkyon_oidc_flutter's, keyboard_height_plugin appflowy_editor's (Learn's
# notes), flutter_tts Learn's voice mode's.
flutter_tts:
path: third_party/flutter_tts
flutter_web_auth_2:
path: third_party/flutter_web_auth_2
keyboard_height_plugin:
path: third_party/keyboard_height_plugin
# The offline sync package's shared part from our fork: v0.0.10 with seven # The offline sync package's shared part from our fork: v0.0.10 with seven
# changes. Byte payloads compared as bytes: v0.0.10 compares them byte by byte # changes. Byte payloads compared as bytes: v0.0.10 compares them byte by byte
# through a UUID parse that throws for each byte, so a sync touching a few thousand # through a UUID parse that throws for each byte, so a sync touching a few thousand

View file

@ -43,6 +43,8 @@ void main() {
'apps/learn/halkyon_learn_flutter/lib/l10n/app_localizations_de.dart', 'apps/learn/halkyon_learn_flutter/lib/l10n/app_localizations_de.dart',
'packages/halkyon_ui/lib/l10n/halkyon_ui_localizations_en.dart', 'packages/halkyon_ui/lib/l10n/halkyon_ui_localizations_en.dart',
'packages/halkyon_app/lib/l10n/halkyon_app_localizations.dart', 'packages/halkyon_app/lib/l10n/halkyon_app_localizations.dart',
// Others' plugins, kept patched for their Gradle files alone.
'third_party/flutter_tts/lib/flutter_tts.dart',
]) { ]) {
expect(isOwnDartFile(path), isFalse, reason: path); expect(isOwnDartFile(path), isFalse, reason: path);
} }

23
third_party/README.md vendored Normal file
View file

@ -0,0 +1,23 @@
# Others' plugins, patched
Android plugins whose latest release still applies the Kotlin Gradle plugin itself,
which Flutter warns will fail builds once Kotlin is built into the Android Gradle
plugin (`android.builtInKotlin=true`, which every Halkyon app sets since 4 Nov 2026).
The root `pubspec.yaml` takes each from here through `dependency_overrides`.
Each folder is the release from pub.dev as it was (its `example/`, `test/` and lint
options left out), under its own licence, but for `android/build.gradle`, changed as
[Flutter's guide for plugin authors](https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-plugin-authors)
has it: `apply plugin: 'kotlin-android'`, the Kotlin Gradle plugin's classpath, the
`kotlinOptions` block and the explicit `kotlin-stdlib` dropped, a `kotlin {
compilerOptions { jvmTarget } }` block added with the same JVM target.
| Plugin | Release | Licence | Used by |
|---|---|---|---|
| `flutter_web_auth_2` | 5.1.0 | MIT | `halkyon_oidc_flutter` (signing in with SimpleLogin) |
| `keyboard_height_plugin` | 0.3.0 | BSD-3-Clause | `appflowy_editor` (Learn's notes) |
| `flutter_tts` | 4.2.5 | MIT | Learn's voice mode |
When a plugin's own release has migrated, take it from pub.dev again: drop its
override and its folder here. Before then, a newer release is brought in by copying
it here and making the same change.

493
third_party/flutter_tts/CHANGELOG.md vendored Normal file
View file

@ -0,0 +1,493 @@
# ChangeLog
## 4.2.5
### Fixes
- **Android:** Fixing namespace path
## 4.2.4
### Fixes
- **Windows:** CMake fix
### Features
- **iOS:** Add playbackAndRecord category to iOS audio category mapping
- **Android:** Bump to AGP 8.13
## 4.2.3
### Fixes
- **Android:** Fix TTS reconnection behaviors
- **Windows:** Replace deprecated exec_program with execute_process
- **Windows:** Fix error on MSVC compilers
## 4.2.2
### Fixes
- **Web:** Fixing setLanguage on iOS browsers
## 4.2.1
### Fixes
- **iOS:** speeding up iOS plugin initialization
- **Android:** Fixes npe on plugin initialization
## 4.2.0
### Features
- **Windows:** Added extra metadata for voices
- **Web:** Added progress events using onboundary
## 4.1.0
### Fixes
- **Windows:** Fixes setvoices
- **iOS:** Fixes exported audio having the wrong sampleRate on ios 18
- **Android:** Fixes 'Reply already submitted' bug during synthesizeToFile
### Features
- **Android:** Added AudioFocus and Audio Attributes For Navigation
- **Android/iOS/macOS:** Added extra metadata for voices
- **Web:** Migrated js_interop to support WASM
- **Android/iOS:** Improving synthesizeToFile
## 4.0.2
### Fixes
- **Package:** using recommended static analysis and fixing issues from analyze
- **Package:** Upating android example to use declarative plugins block
## 4.0.1
### Fixes
- **Android:** Fixing synthesizeToFile
## 4.0.0
### Features
- **iOS:** Add clear selected voice
- **Android:** Add clear selected voice
- **Android:** Upgrade to Kotlin 1.9.10
- **Android:** Upgrade Gradle to 8.2.0
- **Android:** Change compileSDK target to 34
### Fixes
- **Android:** Fix TTS initialization (removed setInitHandler)
- **Web:** Fix pause
- **Package:** Fix describeEnum deprecation (requires Flutter SDK >=2.15.0)
- **Package:** Remove unnecessary foundation.dart include
## 3.8.5
### Fixes
- **iOS:** Fix AVSpeechSynthesisVoiceGender with available on iOS 13 or greater
## 3.8.4
- **Android:** Fix 'Reply already submitted' bug
- **iOS:** Return additional voice information fields (quality, gender, and identifier)
- **iOS:** Fix synthesizeToFile on iOS 17+
## 3.8.3
### Fixes
- **Android:** Clear pending method calls on initialization
## 3.8.2
### Fixes
- **Web:** Fixing onError to prevent crashing
## 3.8.1
- **iOS:** Fixing fileName type back to URL
## 3.8.0
### Features
- *iOS/Android:** Support relative path of synthesization audio file
- **Android:** Improved android manifest notice
- **Android:** Removed deprecated registerWith
- **iOS:** Improved iOS audio documentation
### Fixes
- **Android:** Set speaking and synth to false in the stop method
- **Web:** Fix error in check available language without locale (country)
## 3.7.0
### Features
- **iOS:** add option to disable the auto stop for the audio session after speech completion
- **Android:** Upgrade gradle and kotlin. Make project compatible with AGP 8
### Fixes
- **Web:** Add try-catch on initializing web plugin.
- **iOS:** Support project import fallback if the generated compatibility header is not copied when this plugin is created as a library.
## 3.6.3
- **Android:** fixed initHandler with setEngineInitHandler
- **Android:** refactored pause work around which fixed a couple of reports bugs
## 3.6.2
- **Android:** setEngine - adding initHandler within the method
## 3.6.1
### Fixes
- **Android:** setEngine initialization bug
### Features
- **Android:** added initHandler for android to help with engine initialization
## 3.6.0
### Features
- **Android:** Adding pause/continue
- **Windows:** Adding callbacks
### Fixes
- **All:** Adding async/await to Channel invokeMethods
## 3.5.3
### Features
- **Android:** Adding getDefaultVoice
## 3.5.2
### Updates
- **Android:** Converting Java to Kotlin and package upgrades
## 3.5.1
### Fixes
- **Web:** Fixing late variable and updating value being passed through a message channel to a primitive type
## 3.5.0
### Features
- **Web:** - Adding setVoice support
### Fixes
- **Web:** Fix chrome bug
## 3.4.0
### Features
- **Windows:** - Adding Windows Support
## 3.3.3
### Fixes
- **iOS:** Fix synthesizeToFile fatal error
## 3.3.2
### Fixes
- **Android:** Fix build.gradle missing property
## 3.3.1
### Fixes
- **Web:** Fix awaitSpeakCompletion
## 3.3.0
### Features
- **iOS:** Adding support for AVAudioSession.Mode
## 3.2.4
### Fixes
- **Android:** Fix compileSDK version
## 3.2.3
### Fixes
- **Android:** Fix await speak completion when queue mode is set to 1
## 3.2.2
### Fixes
- **Android:** Android 11 fix
## 3.2.1
### Fixes
- **Android:** Fix deprecation warning
## 3.2.0
### Features
- **Android:** Adding get max speech input length
- **Android:** Changed Android speed rate mapping
- **iOS/macOS/Android:** Adding awaitSynthCompletion for synthesize to file
### Fixes
- **Android:** Fix tts connection disconnection after long running time
## 3.1.0
### Features
- **Android:** Adding set engine and get default engine
## 3.0.0
### Features
- Adding null safety
## 2.1.0
### Features
- **Android:** Adding the ability to set the queue mode
## 2.0.0
### Features
- **Android:** Adding installed language check
### BREAKING CHANGES
- **iOS/Android:** Adding voice name and locale to voice methods
## 1.3.0
- All: Adding await speak completion
## 1.2.7
- iOS: Adding utterance settings to synthesizeToFile
- Android: Fix crash when utterance completes after Engine is detached
## 1.2.6
- Android: Fixing new API onAttachedToEngine call
## 1.2.5
- macOS: Adding support
## 1.2.4
- iOS: Deactivate audio session only when needed
- Android: Better exception handling for getLanguages
- Android: Adding getEngines
- Android: Adding new Android plugin APIs
## 1.2.3
- iOS: Adding synthesize to file
- iOS: Fix set category ios
## 1.2.2
- Web: Adding pause and continue
## 1.2.1
- iOS: Fix setting iOS Category
- iOS/Android: Adding additional platform calls
## 1.2.0
- iOS: Adding Set Audio Session Category
- Android: Bug fixes
## 1.1.0
- iOS: Adding Pause
- iOS: Adding set Shared Instance
## 1.0.0
- iOS/Android: Feature - Speech marks
- iOS/Android: Breaking changes to Speech rate
## 0.9.2
- iOS: Changing audio session to playAndRecord
## 0.9.1
- Android: Fixing method call error
## 0.9.0
- Android: Adding synthesize to file
## 0.8.7
- Android: Fix sporadic ANR on initialization
## 0.8.6
- iOS: Reducing volume of other sessions while TTS is playing
## 0.8.5
- Android: Fix Android async platform initialization
- Android: Removing initHandler
## 0.8.2
- Web: Adding isLanguageAvailable method
- All: Fixing isLanguageAvailable platform channel and making it case insensitive
## 0.8.0
- Web: Adding Web Support
## 0.7.0
- iOS: Adding Swift version 4.2 to podspec and correct audio playback category
## 0.6.0
- Android: AndroidX support
## 0.5.2
- Android: Bug Fix on isLanguageAvailable
## 0.5.1
- Applying flutter format to fix health suggestion
## 0.5.0
- Android: Adding silence before speak
- Android: Removing deprecated API
## 0.2.6
- IOS: Add voice selection implementation
## 0.2.5
- Android: Ensure invokeMethod runs on main thread
## 0.2.4
- Android: setting minSDK back to 21 and adding instructions to readme
- Android: Adding fallback for getLanguages and defaultLanguage
## 0.2.3
- IOS: Audio continues with the Ring/Silent switch set to silent
## 0.2.2
- Android: Fixing Locale bug
## 0.2.1
- IOS: Fixing getLanguages bug
## 0.2.0
- Android: Adding exception catch for samsung devices
- Android: Using default com.google.android.tts engine
- Android: Get and Set Voice
- Android: InitHandler
- Cleaning up the example
## 0.1.2
- Support for Android background execution
- Updating Android build gradle version to 3.2.1
## 0.1.1
- Fixing TTS bound error in the example
- Fixing default voice language not found error on Android
## 0.1.0
- Updating version for improved maintenance score
- Updating package description for improved maintenance score
## 0.0.8
- Adding analysis_options.yaml for improved health score
- Fixing info/errors from flutter analyze
## 0.0.7
- Updating SDK version in pubspec.yaml
- Adding package link to README
- Fixing language string warning received from xcode
## 0.0.6
- Android: Upgrading Gradle 4.1 to 4.4
- Android: Setting minSdk version to 21
- Android: Adding try/catch to getAvailableLanguages & getDefaultVoice methods (Issues with API 21 & 22)
## 0.0.5
- Adding IOS/Android isLanguageAvailable
- Rename setRate to setSpeechRate
## 0.0.4
- Simplify podspec for Cocoapods 1.5.0
## 0.0.3
- Adding IOS/Android speech pitch and volume
## 0.0.2
- Flutter formatting and fixing pubspec sdk versioning
## 0.0.1
- first POC :
- methods : speak, stop, setRate, setLangauge, getLanguages
- a globalHandler for completion

21
third_party/flutter_tts/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Daniel Lutton
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Some files were not shown because too many files have changed in this diff Show more